注意使用的struts版本必定是2.0.6html
首先,这要用到两个软件包,一个是SmartUrls(Struts2的插件,下载地址:http://code.google.com/p/smarturls-s2/downloads/list),还有就是urlrewritefilter(下载地址:http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip).java
要想去掉struts2的后缀,就要这样配置filter:web
用这个代替struts2的核心过滤器,FilterDispatcher。没必要担忧struts2不起做用了,由于这个过滤器是继承自FilterDispatcher的。同时在struts.properties中加入struts.action.extension= ,不设任何值。
而后就是配置UrlRewriteFilter,以下apache
在配置filter-mapping的时候,注意urlrewritefilter的应该在前面。而后urlrewritefilter的重写该怎么用你们能够参看文档,这里就再也不赘述。
当使用时发现重写后,filterChain上只有一个urlrewritefilter,而没有通过smartUrls就发到了请求的资源,获得的天然是一个404错误。因而我参看urlrewritefilter的源代码发现,若是重写url成功的话,将会调用RequestDispatcher的forward方法转发到资源,而重写不成功或者是没有重写才会调用filterChain.dofilter。因此struts2的filter-mapping应该这样配置app
而后就 OK 了jsp
最后说明一点,这要在支持servlet2.4以上规范的容器中才气做用,由于servlet2.3规范里面,过滤器只支持request过滤,不支持转发之类的过滤 google
它和以上的两部分,以及/web-inf/urlrewrite.xml构成了对url地址的美化 打开这个文件,咱们能够看到如下的声明: <?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"> <!-- https://urlrewrite.dev.java.net/manual/3.0 --> <urlrewrite> <rule> <from>^/user/(.*).html$</from> <to type="forward">/editUser.html\?username=$1</to> </rule> </urlrewrite> 这样系统就完成了url地址的editUser.html?username=****的美化 如将 http://localhost/aaa/bbb.jsp?id=99&name=abc 表现为: http://localhost/aaa/bbb/99_abc.html 配置以下: <rule> <from>/aaa/bbb/([0-9]+)_([a-z]+).html</from> <to>/../aaa/bbb.jsp?id=$1&name=$2</to> </rule>
struts2+UrlRewriteFilter配置注意url
1.UrlRewriteFilter 应在 struts2过滤器前。spa
2.struts2的filtermap应如此修改,不然会报404错误。.net
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
struts.xml加上常量
[html] view plain copy