JSP使用URLRewirte實(shí)現(xiàn)url地址偽靜態(tài)化
Posted on 2008-09-27 16:20 三羽 閱讀(1971) 評(píng)論(1) 編輯 收藏 所屬分類(lèi): 收 藏 夾URLRewirte的用處:
1.滿(mǎn)足搜索引擎的要求
2.隱藏技術(shù)實(shí)現(xiàn),提高網(wǎng)站的移植性
3.滿(mǎn)足美感的要求(個(gè)人感覺(jué)這個(gè)用處太牽強(qiáng))
項(xiàng)目部署
1.首先在http://tuckey.org/urlrewirte/下載urlrewirtefilter
2.解壓所下載的文件,把urlrewrite-2.6.0.jar復(fù)制到項(xiàng)目的WebRoot/WEB-INF/lib/目錄下,然后編譯
3.把urlrewrite.xml復(fù)制到項(xiàng)目的WebRoot/WEB-INF/目錄下
4.在web.xml文件中加入以下:
1
<!-- 動(dòng)態(tài)地址靜態(tài)化 -->
2
<filter>
3
<filter-name>UrlRewriteFilter</filter-name>
4
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
5
<init-param>
6
<param-name>logLevel</param-name>
7
<param-value>WARN</param-value>
8
</init-param>
9
</filter>
10
<filter-mapping>
11
<filter-name>UrlRewriteFilter</filter-name>
12
<url-pattern>/*</url-pattern>
13
</filter-mapping>
14

2

3

4

5

6

7

8

9

10

11

12

13

14

5.需要配置urlrewrite.xml文件來(lái)實(shí)現(xiàn)url靜態(tài)化,下面將詳細(xì)說(shuō)明
到這里相關(guān)的配置已經(jīng)完成,下面看如何把動(dòng)態(tài)地址靜態(tài)化
1.普通url靜態(tài)化
例如:要把http://localhost/prjtest/user/list.jsp轉(zhuǎn)換成http://localhost/prjtest/user/list.html
這種是最簡(jiǎn)單的,當(dāng)一個(gè)servlet跳轉(zhuǎn)到list.jsp頁(yè)面列出user列表時(shí),在urlrewrite.xml中這樣配置:
1
<rule>
2
<from>^/user/list.html</from>
3
<to
4
</rule>
當(dāng)請(qǐng)求/user/list.html這個(gè)頁(yè)面時(shí),實(shí)際上相當(dāng)于請(qǐng)求/user/list.jsp頁(yè)面 
2

3

type="redirect"
>/user/list.jsp</to> 4

在servlet的跳轉(zhuǎn)要這樣寫(xiě):
response.sendRedirect("./user/list.html");
2.帶參數(shù)的url靜態(tài)化
例如:要把http://localhost/prjtest/user/view.jsp?cid=1&cname=admin轉(zhuǎn)換成
http://localhost/prjtest/user/view/1_admin.html
在urlrewrite.xml中這樣配置:
1
<rule>
2
<from>^/user/view/([0-9]+)_([a-z]+).html$</from>
3
<to
4
</rule>

2

3

type="redirect"
>/user/view.jsp?cid=$1&cname=$2</to> 4

當(dāng)請(qǐng)求/user/view/1_admin.html這個(gè)頁(yè)面時(shí),實(shí)際上相當(dāng)于請(qǐng)求/user/list.jsp?cid=1&cname=admin頁(yè)面
在servlet的跳轉(zhuǎn)要這樣寫(xiě)(cid,cname為變量):
response.sendRedirect("./user/view/"+ cid +"_"+ cname +".html");
注意:配置文件中用"&"來(lái)代替"&"
一個(gè)通用的正則表達(dá)式:[a-zA-Z0-9]+
特別說(shuō)明
為什么地址欄不變?
原因就在于瀏覽器顯示的是最后被給定的URL。當(dāng)一個(gè)URL被提交后,在某一個(gè)組件返回一個(gè)相應(yīng)給瀏覽器之前,你的應(yīng)用可能轉(zhuǎn)發(fā)請(qǐng)求多次。所有這些都發(fā)生在服務(wù)器端,瀏覽器并不知道發(fā)生了什么事。當(dāng)一個(gè)Http相應(yīng)被放回時(shí),它并沒(méi)有包含地址信息,所以瀏覽器僅僅顯示用來(lái)作為初始請(qǐng)求的地址。
要想讓地址欄也變成靜態(tài)化的URL,很簡(jiǎn)單,將<to type="redirect">改成<to type="forward">即可