打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
在struts2中实现去掉后缀及url重写
     首先,这要用到两个软件包,一个是SmartUrls(Struts2的插件,下载地址:http://code.google.com/p/smarturls-s2/downloads/list),还有就是urlrewritefilter(下载地址:http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip).
     要想去掉struts2的后缀,就要这样配置filter:
  1. <filter>
  2.     <filter-name>struts2</filter-name>
  3.     <filter-class>org.texturemedia.smarturls.SmartURLsFilter</filter-class>           
  4.   </filter>
      用这个代替struts2的核心过滤器,FilterDispatcher。不必担心struts2不起作用了,因为这个过滤器是继承自FilterDispatcher的。同时在struts.properties中加入struts.action.extension= ,不设任何值。

     
      然后就是配置UrlRewriteFilter,如下
  1. <filter>
  2.            <filter-name>UrlRewriteFilter</filter-name>
  3.            <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
  4. </filter>
     在配置filter-mapping的时候,注意urlrewritefilter的应该在前面。然后urlrewritefilter的重写该怎么用大家可以参看文档,这里就不再赘述。

     当使用时发现重写后,filterChain上只有一个urlrewritefilter,而没有经过smartUrls就发到了请求的资源,得到的自然是一个404错误。于是我参看urlrewritefilter的源代码发现,如果重写url成功的话,将会调用RequestDispatcher的forward方法转发到资源,而重写不成功或者是没有重写才会调用filterChain.dofilter。所以struts2的filter-mapping应该这样配置
  1. <filter-mapping>
  2.     <filter-name>struts2</filter-name>
  3.     <url-pattern>/*</url-pattern>
  4.     <dispatcher>FORWARD</dispatcher>
  5. </filter-mapping>
      然后就 OK 了
      最后说明一点,这要在支持servlet2.4以上规范的容器中才气作用,因为servlet2.3规范里面,过滤器只支持request过滤,不支持转发之类的过滤
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
20081013-Struts 2 + Spring 2.0 + Hibernate 3.0整合笔记
解决Struts2和FckEditor冲突最简单的方法
漂亮回答面试官struts2的原理
拦截器和过滤器的区别(转)
Hibernate(四)
Spring + Struts2 注解驱动配置文件【web.xml】
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服