1. 程式人生 > >URLRewrite 實現URL地址偽靜態化

URLRewrite 實現URL地址偽靜態化

UrlRewrite

   A Java Web Filter for any compliant web application servers (such as Tomcat,JBossJetty or Resin), which allows you to rewrite URLs before they get to your code. It is a very powerful tool just like Apache's mod_rewrite.

使用UrlRewrite有三大好處:

    一:提高安全性,可以有效的避免一些引數名、ID等完全暴露在使用者面前,如果使用者隨便亂輸的話,不符合規則的
話直接會返回個404或錯誤頁面,這比直接返回500或一大堆伺服器錯誤資訊要好的多      二:美化URL,去除了那些比如*.do之類的字尾名、長長的引數串等,可以自己組織精簡更能反映訪問模組內容的URL 
    三:更有利於搜尋引擎的收入,通過對URL的一些優化,可以使搜尋引擎更好的識別與收錄網站的資訊 

    UrlRewrite的用法:

    1. 首先下載jar包。從官網http://tuckey.org/urlrewrite/上下載下來urlrewrite-3.2.0.jar(本人使用的版 本,但不是最新版本,建議使用最新版本)。然後把jar包放到你的web專案的WEB-INF/lib下面。

    2. 配置web.xml。 它的配置如下:

UrlRewrite
   A Java Web Filter for any compliant web application servers (such as Tomcat,JBoss, Jetty or Resin), which allows you to rewrite URLs before they get to your code. It is a very powerful tool just like Apache's mod_rewrite.

    使用UrlRewrite有三大好處:
    一:提高安全性,可以有效的避免一些引數名、ID等完全暴露在使用者面前,如果使用者隨便亂輸的話,不符合規則的
話直接會返回個404或錯誤頁面,這比直接返回500或一大堆伺服器錯誤資訊要好的多 
    二:美化URL,去除了那些比如*.do之類的字尾名、長長的引數串等,可以自己組織精簡更能反映訪問模組內容的URL 
    三:更有利於搜尋引擎的收入,通過對URL的一些優化,可以使搜尋引擎更好的識別與收錄網站的資訊 
    
    UrlRewrite的用法:
    1. 首先下載jar包。從官網http://tuckey.org/urlrewrite/上下載下來urlrewrite-3.2.0.jar(本人使用的版
本,但不是最新版本,建議使用最新版本)。然後把jar包放到你的web專案的WEB-INF/lib下面。
    2. 配置web.xml。 它的配置如下:

  3. 在WEB-INF下面新建urlrewrite.xml(注意都是小寫)。其配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"
"http://tuckey.org/res/dtds/urlrewrite2.6.dtd">
<urlrewrite>
	<rule>
		<from>^/(.*)$</from>
		<to type="redirect">/$1.jsp</to>
	</rule>
	<outbound-rule>
		<from></from>
		<to></to>
	</outbound-rule>
</urlrewrite>

rule結點中form的規則預設使用的是正則表示式來匹配的,當用戶訪問伺服器時的URL會與該配置相比較,如果符合規則就會按照下面to結點中的配置對其進行跳轉,其預設是forward跳轉,具體配置可見官網文件。 例如下面的配置:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
        "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite>
    <rule>
        <from>^/page/(.*)$</from>
        <to type="redirect">/page/$1.action</to>
    </rule>
</urlrewrite>
 
這樣在瀏覽器中輸入此url:http://localhost:8080/page/test
就相當於訪問:http://localhost:8080/page/test.jsp

4特別說明
為什麼位址列不變?
原因就在於瀏覽器顯示的是最後被給定的URL。當一個URL被提交後,在某一個元件返回一個相應給瀏覽器之 前,你的應用可能轉發請求多次。所有這些都發生在伺服器端,瀏覽器並不知道發生了什麼事。當一個Http相應被放回時,它並沒有包含地址資訊,所以瀏覽器 僅僅顯示用來作為初始請求的地址。

要想讓位址列也變成靜態化的URL,很簡單,將<to type="redirect">改成<to type="forward">即可