Java UrlRewrite 實現網站URL重寫過程實錄
現在大部分的網站和商城都會使用到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
<filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
宣告完filter後,需要在WEB-INF目錄下新建一個urlrewrite.xml檔案
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" "http://tuckey.org/res/dtds/urlrewrite3.0.dtd"> <urlrewrite> </urlrewrite>
該檔案是UrlRewrite的規則制定檔案,後續主要通過配置它來進行URL的重寫。
至此,UrlRewrite的匯入就完成了
UrlRewrite 匯入成功後,接下來主要通過在urlrewrite.xml新增規則,就能實現URL的重寫了。在此列舉一些常用的規則。
<rule> <from>^/demo/(\w+).html$</from> <to type="redirect">/Struts/$1</to> </rule>
rule 是urlrewrite下的子節點,是urlrewrite的主要規則節點,在它裡面包含from 和to兩個子節點,from表示請求的URL,to表示將轉到的真實的URL。關於from,UrlRewrite有兩種匹配的模式,一種是正規表示式匹配,一種的萬用字元匹配,如上就是正規表示式匹配。當進行匹配的時候,匹配部分的正則可以被提取為引數進行傳遞
如上規則設定,當客戶端訪問的網址是http://127.0.0.1:8080/Struts/demo/hello.html 的時候,因為匹配部分是hello,所以它跳轉到的是http://127.0.0.1:8080/Struts/hello 上。當網址規則中有多個正則的時候,匹配的引數也會隨之增加。如:
<rule> <from>^/demo1/(\w+)/(\w+).html$</from> <to type="redirect" >/Struts/$1.action?age=$2</to> </rule>
rule 的預設匹配方式是正規表示式,但是,有時候也可以以萬用字元的形式進行匹配。在編寫規則的時候,只需要在rule新增一個match-type=”wildcard” 的屬性即可。
<rule match-type="wildcard"> <from>/demo2/*/*</from> <to type="redirect">/Struts/$1.action?age=$2</to> </rule>
關於to節點,UrlRewrite提供了多種網址跳轉方式,如forward和redirect,這兩種方式,和大部分MVC框架提供的功能一樣,在此不再贅述。
除了支援指定規則的跳轉外,UrlRewrite還支援當匹配規則的時候執行某個物件的某個函式
<rule> <from>^/demo3/(\w+)/(\w+).html$</from> <run class="com.sean.action.Demo" method="log" /> <to type="redirect" >/Struts/$1.action?age=$2</to> </rule>
如上述設定,要實現匹配規則是執行某個函式,需要新增多一個run節點,在節點上面新增對應的類屬性和方法屬性。同時,對應的類必須繼承RewriteRule類,執行的方法必須傳入兩個引數,分別是HttpServletRequest 和HttpServletResponse
public class Demo extends RewriteRule{ public void log(HttpServletRequest request,HttpServletResponse response){ System.out.println("haha1"); } public void log2(HttpServletRequest request,HttpServletResponse response){ System.out.println("haha2"); } }
這樣,當客戶端輸入的網址第一次匹配到指定規則的時候,UrlRewrite就會執行對應的函式,該函式只在第一次匹配成功的時候執行。
如果想要每次匹配規則都執行某函式,可以在urlrewrite新增class-rule子節點,該節點設定後,每次匹配規則後,指定的函式都會執行一次。
<class-rule class="com.sean.action.Demo" method="log2"/>
除了對請求的URL進行處理外,UrlRewrite還提供了對返回頁面中的地址進行重寫的功能。使用rule是對使用者輸入的url進行處理,但是開發過程中,經常需要在頁面中也新增一些網址請求,UrlRewrite可以通過規則,對頁面中的網址也進行重寫。如:
<outbound-rule match-type="regex"> <from>/(\w+).action\?id=(\w+)$</from> <to>/$1.html</to> </outbound-rule>
在UrlRewrite中新增該規則後,我們在頁面中原本的地址是
可是在頁面中顯示卻成了如下:
這樣可以隱藏了許多開發中的技術,較為安全。
以上,就是UrlRewrite的一些常見的用法。關於UrlRewrite,網上也有人說這個會影響效能,因為在每次請求的時候都需要經過換一次過濾,但是這個還是要見仁見智,畢竟,使用URL重寫,對網址還是有好處的。
UrlRewrite的幫助文件:http://pan.baidu.com/s/1c0fg0uc
相關文章
- Nginx實現URL重寫Nginx
- 使用HttpModule實現URL重寫HTTP
- PHP實現url重寫和.htaccessPHP
- 請問如何實現URL重寫?
- UrlReWrite(Url重寫或偽靜態)完美示例原始碼原始碼
- Nginx實戰(二) URL重寫Nginx
- nginx 網站目錄重寫Nginx網站
- 手寫AOP實現過程
- 手寫IOC實現過程
- OpenShift新增URLRewrite重寫支援
- nginx實現網站url帶參跳轉Nginx網站
- 在struts2中實現去掉字尾及url重寫
- Apache中URLRewrite技術的實現Apache
- promise實現過程Promise
- Java影像灰度化的實現過程解析Java
- 在Java中實現回撥過程 (轉)Java
- URL重寫(rewrite)的具體實現與異常問題解決
- nginx url重寫Nginx
- java實現url轉碼、解碼Java
- 秋色園網站轉移過程記錄篇網站
- KVC、KVO實現過程
- HIVE實現wordcount過程Hive
- 使用NumPy演示實現神經網路過程神經網路
- 【JAVA】重寫和過載Java
- JVM系列(四):java方法的查詢過程實現JVMJava
- java實現手機簡訊驗證全過程Java
- 用RecyclerView 重寫LayoutManager實現BannerViewView
- PHP 協程實現過程詳解PHP
- Nginx實現url請求不區分大小寫Nginx
- ASP.NET URL雙向改寫的實現ASP.NET
- 購物網站的redis相關實現(Java)網站RedisJava
- 滲透測試公司實戰拿下客戶網站過程網站
- 換膚功能實現過程
- SDWebImage內部實現過程Web
- Spring AOP實現過程Spring
- java實現論文查重Java
- ASP.NET URL Rewrite. URL重寫ASP.NET
- java中listFiles(Filefilter filter)檔案過濾器的實現過程JavaFilter過濾器