使用UrlRewriteFilter對url進行更替

通常來講,使用struts以後url的訪問實際上訪問的是action的地址,爲了避免讓該地址暴露給別人,能夠採用UrlRewriteFilter來對url進行重寫。html

首先,在web.xml裏面配置:web

 

      <filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> <init-param> <param-name>confReloadCheckInterval</param-name> <param-value>60</param-value> </init-param> <init-param> <param-name>confPath</param-name> <param-value>/WEB-INF/urlrewrite.xml</param-value> </init-param> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <url-pattern>/*</url-pattern> </filter-mapping>

 

注意,要在struts的mapping裏面加上,要否則會出錯的!這個花了我半天才搞定。還有一點:UrlRewriteFilter要放在struts Filter以前。web.xml裏面過濾器須要講究順序,通常是這樣子的順序:字符編碼過濾器,hibernate open session in view 過濾器,Urlrewrite過濾器,struts過濾器。正則表達式

         <dispatcher>REQUEST</dispatcher>
         <dispatcher>FORWARD</dispatcher>
   而後在WEB-INF裏面新建urlrewrite.xml文件,該文件爲UrlRewriteFilter的配置文件,經過在裏面定義rule規則對URL進行更替。
   下面是urlrewrite.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN" "http://tuckey.org/res/dtds/urlrewrite3.2.dtd"> <urlrewrite> <rule> <!-- 地址欄顯示的地址 --> <from>/anything</from> <!-- 真實的請求地址 --> <to>/url/test.action</to> </rule> </urlrewrite>
 

以上只是簡單的實現,具體的替換須要用到正則表達式。session

以下例:app

<from>/content/([0-9]+)/list</from> <to type="forward">/IssuedContentAction.do?dispatch=vContentListBySubid&amp;scope=vmcontent&amp;columninfoid=$1</to>

須要注意的地方是:用括號括起來的正則表達式爲變量,如to標籤裏面的$1表示的是上面from裏面的第一個括號內容。url裏面的參數間隔符 ‘&’應該寫爲‘&amp;’。編碼

值得注意的是<outbound-rule>標籤,能夠使用該標籤替換頁面裏面的url。url

簡單的正則表達式:spa

. 匹配除換行符之外的任意字符
      \w 匹配字母或數字或下劃線或漢字
      \s 匹配任意的空白符
      \d 匹配數字
      \b 匹配單詞的開始或結束
      ^ 匹配字符串的開始
      $ 匹配字符串的結束hibernate

相關文章
相關標籤/搜索