struts地址栏中重写Url

注意使用的struts版本一定是2.0.6

首先,这要用到两个软件包,一个是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过滤,不支持转发之类的过滤 

它和以上的两部分,以及/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配置注意

1.UrlRewriteFilter 应在 struts2过滤器前。

2.struts2的filtermap应如此修改,否则会报404错误。

 <filter-mapping> 
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>

struts.xml加上常量

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE struts PUBLIC  
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
    "http://struts.apache.org/dtds/struts-2.0.dtd">  
    <constant name="struts.devMode" value="false" />  
    <constant name="struts.action.extension" value="" />  
    <constant name="smarturls.action.packages" value="actions" />  
    <constant name="smarturls.base.result.location" value="/WEB-INF/results/" ></constant>  
    <constant name="struts.custom.i18n.resources" value="support.package" ></constant>  
</struts>  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值