標籤:lis 應該 key 分行符號 dtd ued efi attr doc
一般來說,使用struts之後url的訪問實際上訪問的是action的地址,為了不讓該地址暴露給別人,可以採用UrlRewriteFilter來對url進行重寫。
首先,在web.xml裡面配置:
<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>
以上只是簡單的實現,具體的替換需要用到Regex。
如下例:
<from>/content/([0-9]+)/list</from><to type="forward">/IssuedContentAction.do?dispatch=vContentListBySubid&scope=vmcontent&columninfoid=$1</to>
需要注意的地方是:用括弧括起來的Regex為變數,如to標籤裡面的$1表示的是上面from裡面的第一個括弧內容。url裡面的參數間隔符 ‘&’應該寫為‘&’。
值得注意的是<outbound-rule>標籤,可以使用該標籤替換頁面裡面的url。
簡單的Regex:
. 匹配除分行符號以外的任一字元
\w 匹配字母或數字或底線或漢字
\s 匹配任意的空白符
\d 匹配數字
\b 匹配單詞的開始或結束
^ 匹配字串的開始
$ 匹配字串的結束
使用UrlRewriteFilter對url進行更替