本博客的部分内容来自于其它博客,对原作者表示感谢。

参考文献:http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.2/index.html

如何增强你网站中地址的可读性和让搜索引擎快速的收录到你的站点,这就需要你美化你的网页的地址,

也就是我们常说的Url重写技术,大家熟悉的可能有很多服务器都提供Url重写的技术,以前我们用的最多的就是Apache,

Jboss这样一些服务器自带的一些Url重写,但是他们的配置比较麻烦,性能又不是太好,现在我们有专一的开源框架

来完成Url重写任务,今天我要介绍的就是UrlRewriter。使用起来比较简单,配置是相当的简单明了。

我们先简单的了解一下使用Url重写能给你网站带来哪些好处。

  第一:有利于搜索引擎的抓取,因为现在大部分的搜索引擎对动态页面的抓取还比较弱,它们更喜欢抓取一些静态的页面。

    而我们现在的页面大部分的数据都是动态的显示的。这就需要我们把动态页面变成静态的页面,有利于搜索引擎的抓取。

  第二:让用户更容易理解,很少有用户去关心你网站的页面的地址,但对一般的大中型网站增强可读性还是必须的。这样会让你的网站更加完美。

  第三:隐藏技术的实现,我们可以通过Url重写可以实现技术的隐藏。不至于暴露你所采用的技术,给一些想攻击你网站的爱好者提供方便。

  第四:可以很方便的重用,提高网站的移植性。如果我们后台方法改动的话,可以保证前台的页面部分不用改。这样就提高了网站的移植性。

它虽然有这么多的优点,但是也有一点缺点的,因为它是通过过滤器原理来实现的,就以为着又多了一道访问,会多少影响点访问速度的,这个可以忽略不计的。

现在UrlRewriter技术有两个技术平台的,一个就是在Java方向的,另一个就是.NET方向的。今天我们讲的是Java方向的应用。

首先让我们了解它的工作原理,说白了它就是一个简单的过滤器(Filter) ,看看源码你就会很快的明白,它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect().

下面我们就快速的为你的网站搭建Url重写技术。

==============================================

如何增强你网站中地址的可读性和让搜索引擎快速的收录到你的站点,这就需要你美化你的网页的地址,也就是我们常说的Url重写技术,大家熟悉的可能有很多服务器都提供Url重写的技术,以前我们用的最多的就是Apache,Jboss这样一些服务器自带的一些Url重写,但是他们的配置比较麻烦,性能又不是太好,现在我们有专一的开源框架来完成Url重写任务,今天我要介绍的就是UrlRewriter。使用起来比较简单,配置是相当的简单明了。

我们先简单的了解一下使用Url重写能给你网站带来哪些好处。
    第一:有利于搜索引擎的抓取,因为现在大部分的搜索引擎对动态页面的抓取还比较弱,它们更喜欢抓取一些静态的页面。而我们现在的页面大部分的数据都是动态的显示的。这就需要我们把动态页面变成静态的页面,有利于搜索引擎的抓取。
    第二:让用户更容易理解,很少有用户去关心你网站的页面的地址,但对一般的大中型网站增强可读性还是必须的。这样会让你的网站更加完美。
    第三:隐藏技术的实现,我们可以通过Url重写可以实现技术的隐藏。不至于暴露你所采用的技术,给一些想攻击你网站的爱好者提供方便。
    第四:可以很方便的重用,提高网站的移植性。如果我们后台方法改动的话,可以保证前台的页面部分不用改。这样就提高了网站的移植性。

它虽然有这么多的优点,但是也有一点缺点的,因为它是通过过滤器原理来实现的,就以为着又多了一道访问,会多少影响点访问速度的,这个可以忽略不计的。
   现在UrlRewriter技术有两个技术平台的,一个就是在Java方向的,另一个就是.NET方向的。今天我们讲的是Java方向的应用。
   首先让我们了解它的工作原理,说白了它就是一个简单的过滤器(Filter) ,看看源码你就会很快的明白,它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect().
   下面我们就快速的为你的网站搭建Url重写技术。
   第一步:下载urlrewrite-2.6.0.现在最新版本是3.1的。
   http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip
   http://urlrewritefilter.googlecode.com/files/urlrewritefilter-3.1.0.zip
   把urlrewrite-2.6.0.jar拷到classpath下。

第二步:在web.xml中初始化。加上下面的代码:

  1. <!-- Set URL Rewrite-->
  2. <filter>
  3. <filter-name>UrlRewriteFilter</filter-name>
  4. <filter-class>
  5. org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
  6. </filter-class>
  7. </filter>
  8. <filter-mapping>
  9. <filter-name>UrlRewriteFilter</filter-name>
  10. <url-pattern>/*</url-pattern>
  11. </filter-mapping>

第三步:在WEB-INF目录下建一个urlrewrite.xml文件。

所有的规则配置都写在这里。第一个常用个规则就是站内的简单重写。

[html]  view plain copy
  1. <rule>
  2. <note>一些说明</note>
  3. <from>写上你自己定义的访问地址</from>
  4. <to>就是实际的访问地址</to>
  5. </rule>
  6. <rule>
  7. <note>
  8. 假设实际的访问地址是:http://yousite.com/entity.htm?category=user&page=2,即to
  9. 而我们想把它重写为http://yousite.com/entity/uesr/page_2.html,即from
  10. 我们就应该这样的写:
  11. </note>
  12. <from>^/(\w+)/(\w+)/page_(\d+)\.html$</from>
  13. <to type="forward">/$1.htm?category=$2&page=$3</to> 非常重要:这里应将 & 换成 &amp;
  14. </rule>
[html]  view plain copy
  1. <rule>
  2. <note>
  3. 假设实际的访问地址是:http://localhost:8080/user/search.action?gender=Male&name=Mary,即to
  4. 而我们想把它重写为http://localhost:8080/user/search/Male/Mary.html,即from
  5. 我们就应该这样的写:
  6. </note>
  7. <from>^/(\w+)/(\w+)/(\w+).html$</from>
  8. <to>/$1.action?gender=$2&name=$3</to>
  9. </rule>

简单的介绍一下常用的正规表示式:  
代码 说明 
. 匹配除换行符以外的任意字符 
\w 匹配字母或数字或下划线或汉字 
\s 匹配任意的空白符 
\d 匹配数字 
\b 匹配单词的开始或结束 
^ 匹配字符串的开始 
$ 匹配字符串的结束

常用的&要用  &amp;来表示。$1,$2代表与你配置正规表达式/(\w+)/(\w+)/相对应的参数。<to type="forward">默认的是 type="forward".
  另一个常用的规则就是连接外部的网站。就要用到。<to type="redirect">

  1. <rule>
  2. <from>^/rss/yahoo\.html$</from>
  3. <to type="redirect">http://add.my.yahoo.com/rss? url=http://feed.feedsky.com/MySiteFeed[/url]
  4. </to>
  5. </rule>

==============================================

下面我们就来实现一个的url重写例子:

准备工作:

下载:urlrewrite-3.2.0.jar

可以到这里下载:http://code.google.com/p/urlrewritefilter/downloads/list

我下载的是:urlrewrite-3.2.0.jar

1.项目结构

2.运行效果1:

输入:http://localhost:8080/UrlReWriter/name/hongten

3.运行效果2:

输入:http://localhost:8080/UrlReWriter/test.html

不错吧,是不是想自己动手试一试啊.

==============================================

/UrlReWriter/WebContent/WEB-INF/web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 3     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 4
 5     <!-- url重写start -->
 6     <filter>
 7          <filter-name>UrlRewriteFilter</filter-name>
 8          <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
 9      </filter>
10      <filter-mapping>
11          <filter-name>UrlRewriteFilter</filter-name>
12          <url-pattern>/*</url-pattern>
13          <dispatcher>REQUEST</dispatcher>
14          <dispatcher>FORWARD</dispatcher>
15      </filter-mapping>
16     <!-- url重写end -->
17
18
19     <welcome-file-list>
20         <welcome-file>index.html</welcome-file>
21         <welcome-file>index.htm</welcome-file>
22         <welcome-file>index.jsp</welcome-file>
23     </welcome-file-list>
24 </web-app>

/UrlReWriter/WebContent/WEB-INF/urlrewrite.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2  <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
 3          "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
 4 <!-- Configuration file for UrlRewriteFilter http://tuckey.org/urlrewrite/ -->
 5 <urlrewrite>
 6     <rule>
 7         <from>/test.html</from>
 8         <to type="redirect">%{context-path}/duona.html</to>
 9     </rule>
10     <rule>
11         <from>/name/(.*)</from>
12         <to>/MyName.jsp?name=$1</to>
13     </rule>
14 </urlrewrite>

/UrlReWriter/WebContent/duona.html

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 5 <title>多拿网</title>
 6 </head>
 7 <body>
 8  红色字体加粗测试 :<br />
 9 <font color="red" >多拿网,'码'上行动,多拿多优惠</font><br />
10 测试连接地址:<br />
11 <a href="http://www.iduona.com" target="_blank">多拿网</a><br />
12 图片测试:<br />
13 <img alt="多拿网" src="img/iduona.jpg">
14 </body>
15 </html>

/UrlReWriter/WebContent/test.html

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 5 <title>Insert title here</title>
 6 </head>
 7 <body>
 8 this is a test html page!
 9 </body>
10 </html>

/UrlReWriter/WebContent/MyName.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%
 4 String path = request.getContextPath();
 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6 %>
 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 8 <html>
 9 <head>
10 <base href="<%=basePath %>"/>
11 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
12 <title><%=request.getParameter("name")%></title>
13 </head>
14 <body>
15 my name is :<font color="red"> <%=request.getParameter("name")%> </font>,welcome to my zone:<br />
16 <a href="http://www.cnblogs.com/hongten">http://www.cnblogs.com/hongten</a><br />
17 <img alt="多拿网" src="img/iduona.jpg">
18 </body>
19 </html>

==============================================

下面和大家分享一下:org.tuckey.web.filters.urlrewrite.sample包下面的一些源代码

org.tuckey.web.filters.urlrewrite.sample.SampleConfExt.class

 1 package org.tuckey.web.filters.urlrewrite.sample;
 2
 3 import org.tuckey.web.filters.urlrewrite.Conf;
 4 import org.w3c.dom.Document;
 5
 6 import java.io.InputStream;
 7
 8
 9 public class SampleConfExt extends Conf {
10
11     public SampleConfExt() {
12         // do something
13     }
14
15     protected synchronized void loadDom(InputStream inputStream) {
16         // do something
17         super.loadDom(inputStream);
18     }
19
20     protected void processConfDoc(Document doc) {
21         // do something else
22         super.processConfDoc(doc);
23     }
24 }

org.tuckey.web.filters.urlrewrite.sample.SampleMultiUrlRewriteFilter.class

 1 package org.tuckey.web.filters.urlrewrite.sample;
 2
 3 import org.tuckey.web.filters.urlrewrite.Conf;
 4 import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;
 5 import org.tuckey.web.filters.urlrewrite.UrlRewriter;
 6
 7 import javax.servlet.FilterChain;
 8 import javax.servlet.FilterConfig;
 9 import javax.servlet.ServletException;
10 import javax.servlet.ServletRequest;
11 import javax.servlet.ServletResponse;
12 import java.io.FileInputStream;
13 import java.net.URL;
14 import java.util.ArrayList;
15 import java.util.List;
16
17 /**
18  * Sample of how you might load multiple configuration files. (NOT to be used verbatim!!)
19  */
20 public class SampleMultiUrlRewriteFilter extends UrlRewriteFilter {
21
22     private List urlrewriters = new ArrayList();
23
24     public void loadUrlRewriter(FilterConfig filterConfig) throws ServletException {
25         // add configurations
26         try {
27             Conf conf1 = new Conf(filterConfig.getServletContext(), new FileInputStream("someconf.xml"), "someconf.xml", "");
28             urlrewriters.add(new UrlRewriter(conf1));
29
30             Conf conf2 = new SampleConfExt();
31             urlrewriters.add(new UrlRewriter(conf2));
32
33         } catch (Exception e) {
34             throw new ServletException(e);
35         }
36     }
37
38     public UrlRewriter getUrlRewriter(ServletRequest request, ServletResponse response, FilterChain chain) {
39         // do some logic to decide what urlrewriter to use (possibly do a reload check on the conf file)
40         return (UrlRewriter) urlrewriters.get(0);
41     }
42
43     public void destroyUrlRewriter() {
44         for (int i = 0; i < urlrewriters.size(); i++) {
45             UrlRewriter urlRewriter = (UrlRewriter) urlrewriters.get(i);
46             urlRewriter.destroy();
47         }
48     }
49
50 }

org.tuckey.web.filters.urlrewrite.sample.SampleRewriteMatch.class

 1 /**
 2  * Copyright (c) 2005-2007, Paul Tuckey
 3  * All rights reserved.
 4  * ====================================================================
 5  * Licensed under the BSD License. Text as follows.
 6  *
 7  * Redistribution and use in source and binary forms, with or without
 8  * modification, are permitted provided that the following conditions
 9  * are met:
10  *
11  *   - Redistributions of source code must retain the above copyright
12  *     notice, this list of conditions and the following disclaimer.
13  *   - Redistributions in binary form must reproduce the above
14  *     copyright notice, this list of conditions and the following
15  *     disclaimer in the documentation and/or other materials provided
16  *     with the distribution.
17  *   - Neither the name tuckey.org nor the names of its contributors
18  *     may be used to endorse or promote products derived from this
19  *     software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  * ====================================================================
34  */
35 package org.tuckey.web.filters.urlrewrite.sample;
36
37 import org.tuckey.web.filters.urlrewrite.extend.RewriteMatch;
38
39 import javax.servlet.RequestDispatcher;
40 import javax.servlet.ServletException;
41 import javax.servlet.http.HttpServletRequest;
42 import javax.servlet.http.HttpServletResponse;
43 import java.io.IOException;
44
45
46 /**
47  * A sample of how you might write a custom match.
48  */
49 class SampleRewriteMatch extends RewriteMatch {
50     private int id;
51
52     SampleRewriteMatch(int i) {
53         id = i;
54     }
55
56     int getId() {
57         return id;
58     }
59
60     public boolean execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
61
62         // lookup things in the db based on id
63
64         // do something like forward to a jsp
65         request.setAttribute("sampleRewriteMatch", this);
66         RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/jsp/some-view.jsp");
67         rd.forward(request, response);
68         // in the jsp you can use request.getAttribute("sampleRewriteMatch") to fetch this object
69
70         return true;
71     }
72
73 }

org.tuckey.web.filters.urlrewrite.sample.SampleRewriteRule.class

 1 /**
 2  * Copyright (c) 2005-2007, Paul Tuckey
 3  * All rights reserved.
 4  * ====================================================================
 5  * Licensed under the BSD License. Text as follows.
 6  *
 7  * Redistribution and use in source and binary forms, with or without
 8  * modification, are permitted provided that the following conditions
 9  * are met:
10  *
11  *   - Redistributions of source code must retain the above copyright
12  *     notice, this list of conditions and the following disclaimer.
13  *   - Redistributions in binary form must reproduce the above
14  *     copyright notice, this list of conditions and the following
15  *     disclaimer in the documentation and/or other materials provided
16  *     with the distribution.
17  *   - Neither the name tuckey.org nor the names of its contributors
18  *     may be used to endorse or promote products derived from this
19  *     software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  * ====================================================================
34  */
35 package org.tuckey.web.filters.urlrewrite.sample;
36
37 import org.tuckey.web.filters.urlrewrite.extend.RewriteRule;
38 import org.tuckey.web.filters.urlrewrite.extend.RewriteMatch;
39
40 import javax.servlet.http.HttpServletRequest;
41 import javax.servlet.http.HttpServletResponse;
42
43 /**
44  * A sample of how you might write a custom rule.
45  */
46 public class SampleRewriteRule extends RewriteRule {
47
48
49     public RewriteMatch matches(HttpServletRequest request, HttpServletResponse response) {
50
51         // return null if we don't want the request
52         if (!request.getRequestURI().startsWith("/staff/")) return null;
53
54         Integer id = null;
55         try {
56             // grab the things out of the url we need
57             id = Integer.valueOf(request.getRequestURI().replaceFirst(
58                 "/staff/([0-9]+)/", "$1"));
59         } catch (NumberFormatException e) {
60             // if we don't get a good id then return null
61             return null;
62         }
63
64         // match required with clean parameters
65         return new SampleRewriteMatch(id.intValue());
66     }
67
68 }

还有:org.tuckey.web.filters.urlrewrite包下面的conf-dist.xml文件

/org/tuckey/web/filters/urlrewrite/conf-dist.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
 3         "http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
 4
 5 <!--
 6
 7     Configuration file for UrlRewriteFilter
 8     http://tuckey.org/urlrewrite/
 9
10 -->
11 <urlrewrite>
12
13     <rule>
14         <note>
15             The rule means that requests to /test/status/ will be redirected to /rewrite-status
16             the url will be rewritten.
17         </note>
18         <from>/test/status/</from>
19         <to type="redirect">%{context-path}/rewrite-status</to>
20     </rule>
21
22
23     <outbound-rule>
24         <note>
25             The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)
26             the url /rewrite-status will be rewritten to /test/status/.
27
28             The above rule and this outbound-rule means that end users should never see the
29             url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks
30             in your pages.
31         </note>
32         <from>/rewrite-status</from>
33         <to>/test/status/</to>
34     </outbound-rule>
35
36
37     <!--
38
39     INSTALLATION
40
41         in your web.xml add...
42
43         <filter>
44             <filter-name>UrlRewriteFilter</filter-name>
45             <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
46             <init-param>
47                 <param-name>logLevel</param-name>
48                 <param-value>WARN</param-value>
49             </init-param>
50         </filter>
51         <filter-mapping>
52             <filter-name>UrlRewriteFilter</filter-name>
53             <url-pattern>/*</url-pattern>
54         </filter-mapping>
55
56      EXAMPLES
57
58      Redirect one url
59         <rule>
60             <from>/some/old/page.html</from>
61             <to type="redirect">/very/new/page.html</to>
62         </rule>
63
64     Redirect a directory
65         <rule>
66             <from>/some/olddir/(.*)</from>
67             <to type="redirect">/very/newdir/$1</to>
68         </rule>
69
70     Clean a url
71         <rule>
72             <from>/products/([0-9]+)</from>
73             <to>/products/index.jsp?product_id=$1</to>
74         </rule>
75     eg, /products/1234 will be passed on to /products/index.jsp?product_id=1234 without the user noticing.
76
77     Browser detection
78         <rule>
79             <condition name="user-agent">Mozilla/[1-4]</condition>
80             <from>/some/page.html</from>
81             <to>/some/page-for-old-browsers.html</to>
82         </rule>
83     eg, will pass the request for /some/page.html on to /some/page-for-old-browsers.html only for older
84     browsers whose user agent srtings match Mozilla/1, Mozilla/2, Mozilla/3 or Mozilla/4.
85
86     Centralised browser detection
87         <rule>
88             <condition name="user-agent">Mozilla/[1-4]</condition>
89             <set type="request" name="browser">moz</set>
90         </rule>
91     eg, all requests will be checked against the condition and if matched
92     request.setAttribute("browser", "moz") will be called.
93
94     -->
95
96 </urlrewrite>

总结:有没理解它的工作原理,说白了它就是一个简单的过滤器(Filter) ,看看源码你就会很快的明白,

它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect().

项目源码下载:http://files.cnblogs.com/hongten/UrlReWriter.rar

====================================================================================

下面的内容非常重要

urlrewriter 和 Struts2 整合

准备工作先要有2个配置文件+1个jar包

配置文件1:urlrewrite.xml

写道
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" 
"http://tuckey.org/res/dtds/urlrewrite3.0.dtd">

<urlrewrite> 
<rule> 
<note> 
<!-- 这是一个通用请求url rewrite 
将请求forword url加上".action"的处理器上。例: 
请求 http://{domain}/user/login 将被forward到 http://{domain}/user/login.do 
请求 http://{domain}/user/login/ 将被forward到 http://{domain}/user/login.do 
请求 http://{domain}/user/logout/ 将被forward到 http://{domain}/user/logout.do 
--> 
</note> 
<from>^/([_a-zA-Z]+[_0-9a-zA-Z-/]*[_0-9a-zA-Z]+)/?.html$</from> 
<to type="forward">/$1.action</to> 
</rule> 
<!-- 
<rule> 
<note>这是一个通用请求url rewrite</note> 
<from>^/([a-z0-9A-Z_]+)/([a-z0-9A-Z_]+)/!([a-z0-9A-Z_]+).html$</from> 
<to type="forward">/$2.action?id=$1</to> 
</rule> 
--> 
<!-- Override default validation.js from WebWork --> 
<rule> 
<from>^/struts/css_xhtml/validation.js$</from> 
<to type="forward">/template/css_xhtml/validation.js</to> 
</rule>

<!-- The following fixes a bug in XFire: --> 
<!-- http://jira.codehaus.org/browse/XFIRE-1089 --> 
<rule> 
<from>^//services/(.*)$</from> 
<to type="forward">/services/$1</to> 
</rule> 
</urlrewrite>

配置文件2:web.xml

在web.xml文件中插入一个filter

写道
<!-- UrlRewriteFilter filter --> 
<filter> 
<filter-name>UrlRewriteFilter</filter-name> 
<filter-class> 
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter 
</filter-class> 
<init-param> 
<param-name>logLevel</param-name> 
<param-value>WARN</param-value> 
</init-param> 
</filter> 
<filter-mapping> 
<filter-name>UrlRewriteFilter</filter-name> 
<url-pattern>/*</url-pattern> 
<dispatcher>REQUEST</dispatcher> 
<dispatcher>FORWARD</dispatcher> 
</filter-mapping>

1个jar包:urlrewritefilter-3.1.0.jar

但是这样配置会遇到问题

因此需要在web.xml文件中添加一个东西,完整的filter链如下:

写道
<!-- UrlRewriteFilter filter --> 
<filter> 
<filter-name>UrlRewriteFilter</filter-name> 
<filter-class> 
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter 
</filter-class> 
<init-param> 
<param-name>logLevel</param-name> 
<param-value>WARN</param-value> 
</init-param> 
</filter> 
<!-- Struts2 filter --> 
<filter> 
<filter-name>struts2-cleanup</filter-name> 
<filter-class> 
org.apache.struts2.dispatcher.ActionContextCleanUp 
</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>UrlRewriteFilter</filter-name> 
<url-pattern>/*</url-pattern> 
<dispatcher>REQUEST</dispatcher> 
<dispatcher>FORWARD</dispatcher> 
</filter-mapping> 
<filter-mapping> 
<filter-name>struts2-cleanup</filter-name> 
<url-pattern>/*</url-pattern> 
<dispatcher>REQUEST</dispatcher> 
<dispatcher>FORWARD</dispatcher> 
</filter-mapping>

<filter> 
<filter-name>struts2</filter-name> 
<filter-class> 
org.apache.struts2.dispatcher.FilterDispatcher 
</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>struts2</filter-name> 
<url-pattern>/*</url-pattern> 
<dispatcher>REQUEST</dispatcher> 
<dispatcher>FORWARD</dispatcher> 
</filter-mapping>

<filter> 
<filter-name>encodingFilter</filter-name> 
<filter-class> 
org.springframework.web.filter.CharacterEncodingFilter 
</filter-class> 
<init-param> 
<param-name>encoding</param-name> 
<param-value>UTF-8</param-value> 
</init-param> 
</filter> 
<filter-mapping> 
<filter-name>encodingFilter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping>

1、在web.xml中EncodingFilter的位置应该在Struts2的FilterDispatcher之前,道理很简单,要先调整字符集,再进入Action。

2、如果使用Urlrewrite,要指定filter-mapping的dispatcher方式,如下 
<filter-mapping> 
    <filter-name>Struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping>

3、在做上传文件的时候,要在web.xml中增加ActionContextCleanUp这个filter,如果不增加,会发生第一次上传取不到文件的情况 
<filter> 
  <filter-name>struts-cleanup</filter-name> 
  <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class> 
  </filter> 
  <filter-mapping> 
    <filter-name>struts-cleanup</filter-name> 
    <url-pattern>/*</url-pattern> 
  </filter-mapping> 
按照Struts2的API,filter的顺序是 
struts-cleanup filter 
SiteMesh filter 
FilterDispatcher

只看完这篇博文还不够,此时你应该再看下面这篇博文

http://blog.csdn.net/jackieliulixi/article/details/38335615

如果你不看,会遇到下面这个问题:

在 urlrewriter.xml 中有如下配置

Plain Text code ?
1
2
3
4
5
6
7
8
9
10
11
<urlrewrite>
     <rule>
         <from>^/(\w+).html$</from>
         <to type="forward">$1.action</to>
     </rule>
     
     <rule>
         <from>^/(\w+)/(\w+)/(\w+)$</from>
         <to type="forward">/$1.action?userName=$2&amp;password=$3</to>
     </rule>
</urlrewrite>

在这里 如果在浏览器地址栏中输入http://localhost:8080/brook/userLogin.html
地址会映射到 http://localhost:8080/brook/userLogin.action,这是一个登录页面。
但现在不懂的问题是,我在登录页面中输入登录信息后,通过下面的表单提交

XML/HTML code ?
1
< form  id = "loginform"  method = "post"  class = "form-vertical" action = "doLogin.action" >

此时浏览器显示地址为 http://localhost:8080/brook/doLogin.action
但我想把地址显示成 http://localhost:8080/brook/index.html

请问各位我该如何进行配置呢。

urlrewriter 的用法相关推荐

  1. URLRewriter在ASP.NET配置文件中的用法

    <?xml version="1.0"?> <configuration>   <configSections>     <section ...

  2. urlrewriter 用法

    1.简介 UrlRewriteFilter是一个用于改写URL的Web过滤器,类似于Apache的mod_rewrite.适用于任何Web应用服务器(如Resin,Orion,Tomcat等).其典型 ...

  3. java urlrewriter_java url重写技术(UrlReWriter)

    现在url重写技术用的越来越广泛了,很高兴今天和各位网友分享一下: 首先我们要从网上下一个UrlReWriter jar包 现在地址进不了,我这里有一个3.0版本的,文章底有下载地址,大家可以去下载 ...

  4. URL 重写的常见用法

    URL 重写的常见用法 创建数据驱动的 ASP.NET 网站时,通常会产生一个单个的网页,该网页基于查询字符串参数显示数据库数据的子集.例如,在设计电子商务站点时,您的任务之一便是允许用户浏览待售产品 ...

  5. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  6. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  7. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  8. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  9. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

最新文章

  1. [译] React 路由和 React 组件的爱恨情仇
  2. HDU -- 2084 数塔(简单DP)
  3. gcc/g++/makefile/easymake/cmake/xmake/nmake ...
  4. 理解并取证:DLS网络架构和PPPOE数据帧
  5. 电纸书kindle相关产品调研(没搞完)
  6. 怎样发布一个工程到自己的GitHub
  7. Spring boot admin 升级到2.3.1 遇到的问题总结
  8. 代码调试技巧【OI缩水版】
  9. django orm 以列表作为筛选条件进行查询
  10. 再谈Objective C中的BOOL类型
  11. python问卷星微信登录_Python+Selenium自动刷问卷星问卷
  12. Cadence PSpice 仿真0:绘制电路图方法图文教程
  13. DARPA到底是什么?一个能轻松将人类变成电子生化人的科技
  14. 《JETS Jointly Training FastSpeech2 and HiFi-GAN for End to End Text to Speech》
  15. 用Python操控手机APP攻略一
  16. 阿拉伯数字跟中文汉字互转js
  17. 自制WIFI放大器(信号真的有增强)
  18. 富士康员工盗卖iPhone部件3年赚3亿;张朝阳称工作只为赚钱太low;国产统一操作系统 UOS 正全面适配 | EA周报...
  19. 「Vue系列」欢迎传送到“Teleport”星球
  20. 如何利用高德地图URI加载区域边界

热门文章

  1. 主共振、超谐波共振、亚谐波共振与次共振
  2. 应届生求职经历-一路坎坷
  3. http协议(一)/应用层
  4. Soft-RoCE部署及通信测试
  5. 图欧学习资源库 https://tuostudy.com/
  6. 于博士Cadence教程视频地址以及目录
  7. Matlab中在一个矩阵后面加apos是什么意思?绘图时出现错误该如何修改,麻烦解答一下,谢谢了
  8. jodd发送http请求(util)
  9. Houdini 节点
  10. requireJs笔记