使用UrlRewriteFilter對url進(jìn)行更替
一般來說,使用struts之后url的訪問實(shí)際上訪問的是action的地址,為了不讓該地址暴露給別人,可以采用UrlRewriteFilter來對url進(jìn)行重寫。
首先,在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里面加上,要不然會(huì)出錯(cuò)的!這個(gè)花了我半天才搞定。還有一點(diǎn):UrlRewriteFilter要放在struts Filter之前。web.xml里面過濾器需要講究順序,一般是這樣子的順序:字符編碼過濾器,hibernate open session in view 過濾器,Urlrewrite過濾器,struts過濾器。
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
然后在WEB-INF里面新建urlrewrite.xml文件,該文件為UrlRewriteFilter的配置文件,通過在里面定義rule規(guī)則對URL進(jìn)行更替。
下面是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>
<!-- 真實(shí)的請求地址 -->
<to>/url/test.action</to>
</rule>
</urlrewrite>
以上只是簡單的實(shí)現(xiàn),具體的替換需要用到正則表達(dá)式。
如下例:
<from>/content/([0-9]+)/list</from>
<to type="forward">/IssuedContentAction.do?dispatch=vContentListBySubid&scope=vmcontent&columninfoid=$1</to>
需要注意的地方是:用括號括起來的正則表達(dá)式為變量,如to標(biāo)簽里面的$1表示的是上面from里面的第一個(gè)括號內(nèi)容。url里面的參數(shù)間隔符 '&'應(yīng)該寫為'&'.
值得注意的是<outbound-rule>標(biāo)簽,可以使用該標(biāo)簽替換頁面里面的url托福答案 www.yztrans.com
簡單的正則表達(dá)式:
. 匹配除換行符以外的任意字符
\w 匹配字母或數(shù)字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數(shù)字
\b 匹配單詞的開始或結(jié)束
^ 匹配字符串的開始
$ 匹配字符串的結(jié)束