網站URL重寫(Java UrlRewrite 的使用)

來源:互聯網
上載者:User

標籤:

現在大部分的網站和商城都會使用到URL重寫,接觸到這個,也是因為正在做的電子商務商城。URL重寫,是將原有的URL採用另一種規則來顯示,使得使用者方便訪問同時也屏蔽一些資訊。

在此說下它的好處,在開發過程中,經常會遇到一些帶了一大堆參數的URL,這樣子,一方面顯得煩亂,另一方面,一些資訊直接顯示在URL上,會有些安全性問題。使用URL重寫,可以使帶有參數的URL以一種較規則的方式體現,如:

/demoAction?id=1            ==>            /demo1.html

它也將本該在URL上顯示出來的傳參給隱蔽起來,隱藏了技術實現和敏感資訊。另外,URL重寫,也有利於搜尋引擎的訪問。

 

最近項目接觸到的URL重寫採用的是UrlRewrite,它主要是採用Filter技術在使用者請求的時候對訪問的URL進行處理,來實現重寫的作用。

 

以下是UrlRewrite的使用執行個體(個人認為,UrlRewrite的官方文檔寫的還是比較全面易懂的)

UrlRewrite的匯入:

UrlRewrite的匯入非常簡單,首先需在項目的lib檔案夾中加入urlrewrite-3.2.0.jar包,然後,在web.xml中聲明Filter

 1 <filter> 2         <filter-name>UrlRewriteFilter</filter-name> 3         <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 4     </filter> 5     <filter-mapping> 6         <filter-name>UrlRewriteFilter</filter-name> 7         <url-pattern>/*</url-pattern> 8         <dispatcher>REQUEST</dispatcher> 9         <dispatcher>FORWARD</dispatcher>10     </filter-mapping>11     

聲明完filter後,需要在WEB-INF目錄下建立一個urlrewrite.xml檔案

1 <?xml version="1.0" encoding="utf-8"?>2 <!DOCTYPE urlrewrite3 PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"4 "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">5 <urlrewrite>6     7     8 </urlrewrite>

該檔案是UrlRewrite的規則制定檔案,後續主要通過配置它來進行URL的重寫。

至此,UrlRewrite的匯入就完成了

 

UrlRewrite 匯入成功後,接下來主要通過在urlrewrite.xml添加規則,就能實現URL的重寫了。在此列舉一些常用的規則。

 

1 <rule>2         <from>^/demo/(\w+).html$</from>3         <to type="redirect">/Struts/$1</to>4 </rule>

rule 是urlrewrite下的子節點,是urlrewrite的主要規則節點,在它裡麵包含from 和to兩個子節點,from表示請求的URL,to表示將轉到的真實的URL。關於from,UrlRewrite有兩種匹配的模式,一種是Regex匹配,一種的萬用字元匹配,如上就是Regex匹配。當進行匹配的時候,匹配部分的正則可以被提取為參數進行傳遞

如上規則設定,當用戶端訪問的網址是http://127.0.0.1:8080/Struts/demo/hello.html  的時候,因為匹配部分是hello,所以它跳轉到的是http://127.0.0.1:8080/Struts/hello 上。當網址規則中有多個正則的時候,匹配的參數也會隨之增加。如:

1 <rule>2         <from>^/demo1/(\w+)/(\w+).html$</from>3         <to type="redirect" >/Struts/$1.action?age=$2</to>4 </rule>

rule 的預設匹配方式是Regex,但是,有時候也可以以萬用字元的形式進行匹配。在編寫規則的時候,只需要在rule添加一個match-type="wildcard" 的屬性即可。

1 <rule match-type="wildcard">2         <from>/demo2/*/*</from>3         <to type="redirect">/Struts/$1.action?age=$2</to>4 </rule>

關於to節點,UrlRewrite提供了多種網址跳轉方式,如forward和redirect,這兩種方式,和大部分MVC架構提供的功能一樣,在此不再贅述。

 

除了支援指定規則的跳轉外,UrlRewrite還支援當匹配規則的時候執行某個對象的某個函數

1 <rule>2         <from>^/demo3/(\w+)/(\w+).html$</from>3         <run class="com.sean.action.Demo" method="log" />4         <to type="redirect" >/Struts/$1.action?age=$2</to>5 </rule>

如上述設定,要實現匹配規則是執行某個函數,需要添加多一個run節點,在節點上面添加對應的類屬性和方法屬性。同時,對應的類必須繼承RewriteRule類,執行的方法必須傳入兩個參數,分別是HttpServletRequest 和HttpServletResponse

 1 public class Demo extends RewriteRule{ 2  3     public void log(HttpServletRequest request,HttpServletResponse response){ 4         System.out.println("haha1"); 5     } 6      7     public void log2(HttpServletRequest request,HttpServletResponse response){ 8         System.out.println("haha2"); 9     }10 }

這樣,當用戶端輸入的網址第一次匹配到指定規則的時候,UrlRewrite就會執行對應的函數,該函數只在第一次匹配成功的時候執行。

如果想要每次匹配規則都執行某函數,可以在urlrewrite添加class-rule子節點,該節點設定後,每次匹配規則後,指定的函數都會執行一次。

 1 <class-rule class="com.sean.action.Demo" method="log2"/> 

 

 

除了對請求的URL進行處理外,UrlRewrite還提供了對返回頁面中的地址進行重寫的功能。使用rule是對使用者輸入的url進行處理,但是開發過程中,經常需要在頁面中也添加一些網址請求,UrlRewrite可以通過規則,對頁面中的網址也進行重寫。如:

1 <outbound-rule match-type="regex">2         <from>/(\w+).action\?id=(\w+)$</from>3         <to>/$1.html</to>4 </outbound-rule>

在UrlRewrite中添加該規則後,我們在頁面中原本的地址是

可是在頁面中顯示卻成了如下:

這樣可以隱藏了許多開發中的技術,較為安全。

 

以上,就是UrlRewrite的一些常見的用法。關於UrlRewrite,網上也有人說這個會影響效能,因為在每次請求的時候都需要經過換一次過濾,但是這個還是要見仁見智,畢竟,使用URL重寫,對網址還是有好處的。

 

UrlRewrite的協助文檔:http://pan.baidu.com/s/1c0fg0uc

網站URL重寫(Java UrlRewrite 的使用)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.