struts地址欄中重寫Url

注意使用的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

  1. <filter>
  2.     <filter-name>struts2</filter-name>
  3.     <filter-class>org.texturemedia.smarturls.SmartURLsFilter</filter-class>            
  4.   </filter>
  5.  

      用這個代替struts2的核心過濾器,FilterDispatcher。沒必要擔憂struts2不起做用了,由於這個過濾器是繼承自FilterDispatcher的。同時在struts.properties中加入struts.action.extension= ,不設任何值。

      
      而後就是配置UrlRewriteFilter,以下apache

  1. <filter>
  2.            <filter-name>UrlRewriteFilter</filter-name>
  3.            <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
  4. </filter>
  5.  

     在配置filter-mapping的時候,注意urlrewritefilter的應該在前面。而後urlrewritefilter的重寫該怎麼用你們能夠參看文檔,這裏就再也不贅述。

     當使用時發現重寫後,filterChain上只有一個urlrewritefilter,而沒有通過smartUrls就發到了請求的資源,獲得的天然是一個404錯誤。因而我參看urlrewritefilter的源代碼發現,若是重寫url成功的話,將會調用RequestDispatcher的forward方法轉發到資源,而重寫不成功或者是沒有重寫纔會調用filterChain.dofilter。因此struts2的filter-mapping應該這樣配置app

  1. <filter-mapping>
  2.     <filter-name>struts2</filter-name>
  3.     <url-pattern>/*</url-pattern>
  4.     <dispatcher>FORWARD</dispatcher>
  5. </filter-mapping>

      而後就 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

  1. <?xml version="1.0" encoding="UTF-8" ?>    
  2. <!DOCTYPE struts PUBLIC    
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">    
  5.     <constant name="struts.devMode" value="false" />    
  6.     <constant name="struts.action.extension" value="" />    
  7.     <constant name="smarturls.action.packages" value="actions" />    
  8.     <constant name="smarturls.base.result.location" value="/WEB-INF/results/" ></constant>    
  9.     <constant name="struts.custom.i18n.resources" value="support.package" ></constant>    
  10. </struts>    
相關文章
相關標籤/搜索