来源:http://tcrct.iteye.com/blog/631226
Url Rewrite Filter 是一个基于java的url rewirte开源项目,功能类似Apache中的rewrite模块。其实,Url Rewrite让apache来负责才是最好的选择,因为mod_rewrite已经很成熟了,功能或者效率上都更好用,apache已足以使urlrewrite的功能透明了,对于多个应用使用起来更方便。这篇文章介绍的urlrewrite filter只是给那些不打算使用apache的应用提供了另外一种选择。
   主要功能
  a) 实现url地址的伪静态化
  例如可以把http://localhost:8080/myindex.do?method=listIndex&user=ezplus的请求重定向或转发到http://localhost:8080/blog/ezplus,这样做就避免了url中出现?&之类的符号,而且页面伪静态化之后也增加了被搜索引擎找到的概率。
  b) 根据配置文件自动转化页面上的连接
  在写页面的时候程序员不用关心在页面中出现的url地址将被如何伪静态化,例如,程序员还是可以在写页面的时候使用http://localhost:8080/myindex.do?method=listIndex&user=ezplus,通过在urlrewrite.xml中配置<outbound-rule></outbound-rule>,既可以实现页面url地址自动转化为伪静态化后的地址,用户在查看页面源码的时候原http://localhost:8080/blog/ezplus将被自动替换为http://localhost:8080/blog/ezplus
之前在struts1.x中就已经使用过urlrewrite(下载地址 http://tuckey.org/urlrewrite/#download )这个jar包的了,有这个urlrewrite的目的就是为了简化与美观及对SEO,搜索引擎收录等方面都有好处。  

最近改版系统,由struts1.x升级为struts2.x,在使用时urlrewrite这个时,直接将xml文件及jar复制过来,然后就开始运行,但好遗憾的时,没有起到作用,于是上网查,查到一大堆的资料,基本上都是说加多两个配置选项,于是一样的照抄过,所以我的WEB.XML文件的配置如下(过滤器部分): 
Xml代码   收藏代码
  1. <!-- 字符过滤器 -->  
  2.     <filter>  
  3.         <filter-name>encodingFilter</filter-name>  
  4.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  5.         <init-param>  
  6.             <param-name>encoding</param-name>  
  7.             <param-value>UTF-8</param-value>  
  8.         </init-param>  
  9.         <init-param>  
  10.             <param-name>forceEncoding</param-name>  
  11.             <param-value>true</param-value>  
  12.         </init-param>  
  13.     </filter>   
  14.     <filter-mapping>  
  15.         <filter-name>encodingFilter</filter-name>  
  16.         <url-pattern>/*</url-pattern>  
  17.     </filter-mapping>  
  18.       
  19.     <!-- Hibernate Open Session In View filter(开启OSIV)-->  
  20.     <filter>  
  21.         <filter-name>hibernateOpenSessionInViewFilter</filter-name>  
  22.         <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
  23.     </filter>  
  24.     <filter-mapping>  
  25.         <filter-name>hibernateOpenSessionInViewFilter</filter-name>  
  26.         <url-pattern>/*</url-pattern>  
  27.     </filter-mapping>  
  28.       
  29.     <!-- UrlRewriteFilter简化URL,有利于搜索引擎收录 -->  
  30.      <filter>  
  31.         <filter-name>UrlRewriteFilter</filter-name>  
  32.         <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>  
  33.          <init-param>  
  34.             <param-name>logLevel</param-name>  
  35.             <param-value>WARN</param-value>  
  36.         </init-param>  
  37.     </filter>        
  38.       <filter-mapping>  
  39.         <filter-name>UrlRewriteFilter</filter-name>  
  40.         <url-pattern>/*</url-pattern>  
  41.      </filter-mapping>  
  42.        
  43.     <!-- Struts2 核心过滤器 -->  
  44.     <filter>  
  45.         <filter-name>struts2CleanupFilter</filter-name>  
  46.         <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>  
  47.     </filter>  
  48.     <filter-mapping>  
  49.         <filter-name>struts2CleanupFilter</filter-name>  
  50.         <url-pattern>/*</url-pattern>                 
  51.         <dispatcher>REQUEST</dispatcher>    
  52.         <dispatcher>FORWARD</dispatcher>  
  53.         <dispatcher>INCLUDE</dispatcher>  
  54.     </filter-mapping>  
  55.       
  56.     <filter>  
  57.         <filter-name>struts2Filter</filter-name>  
  58.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  59.     </filter>  
  60.     <filter-mapping>  
  61.         <filter-name>struts2Filter</filter-name>  
  62.         <url-pattern>/*</url-pattern>         
  63.         <dispatcher>REQUEST</dispatcher>    
  64.         <dispatcher>FORWARD</dispatcher>  
  65.         <dispatcher>INCLUDE</dispatcher>  
  66.     </filter-mapping>  


保存,运行,还是不成功!感觉就好似urlrewrite.jar这个包没启动成功一样,但我已经时时按网上的配置配好的了,加载顺序为: 
Java代码   收藏代码
  1. 1, encodingFilter  
  2. 2, opensessionInviewfilter  
  3. 3, UrlRewriteFilter  
  4. 4, struts2-Cleanup  
  5. 5, struts2  

这已经是没有错的了,为什么会不成功的呢?于是再google,终于在 http://wiki.springside.org.cn/display/SpringSide3/View这个页里看到一句:
Java代码   收藏代码
  1. 首先在web.xml中加入url rewrite filter,注意需放到struts2 filter的前面,然后在WEB-INF/下放一个urlrewrite.xml进行定义  
,然后在WEB-INF/下放一个urlrewrite.xml, 于是马上查看了一下,发现我自己的竟然写在src目录下,那些在WEB-INF目录下就是在classes生成urlrewrite.xml,于是将src目录下的删除,再将classes目录下移至WEB-INF目录下再运行。