自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java UrlRewrite 實現(xiàn)網(wǎng)站URL重寫過程實錄

開發(fā) 后端 開發(fā)工具
本文是UrlRewrite的一些常見的用法。關(guān)于UrlRewrite,網(wǎng)上也有人說這個會影響性能,因為在每次請求的時候都需要經(jīng)過換一次過濾,但是這個還是要見仁見智,畢竟,使用URL重寫,對網(wǎng)址還是有好處的。

現(xiàn)在大部分的網(wǎng)站和商城都會使用到URL重寫,接觸到這個,也是因為正在做的電子商務(wù)商城。URL重寫,是將原有的URL采用另一種規(guī)則來顯示,使得用戶方便訪問同時也屏蔽一些信息。

Java UrlRewrite 實現(xiàn)網(wǎng)站URL重寫過程實錄

在此說下它的好處,在開發(fā)過程中,經(jīng)常會遇到一些帶了一大堆參數(shù)的URL,這樣子,一方面顯得煩亂,另一方面,一些信息直接顯示在URL上,會有些安全性問題。使用URL重寫,可以使帶有參數(shù)的URL以一種較規(guī)則的方式體現(xiàn),如:

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

它也將本該在URL上顯示出來的傳參給隱蔽起來,隱藏了技術(shù)實現(xiàn)和敏感信息。另外,URL重寫,也有利于搜索引擎的訪問。

最近項目接觸到的URL重寫采用的是UrlRewrite,它主要是采用Filter技術(shù)在用戶請求的時候?qū)υL問的URL進行處理,來實現(xiàn)重寫的作用。

以下是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> 

聲明完filter后,需要在WEB-INF目錄下新建一個urlrewrite.xml文件

 

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

該文件是UrlRewrite的規(guī)則制定文件,后續(xù)主要通過配置它來進行URL的重寫。

至此,UrlRewrite的導入就完成了

UrlRewrite 導入成功后,接下來主要通過在urlrewrite.xml添加規(guī)則,就能實現(xiàn)URL的重寫了。在此列舉一些常用的規(guī)則。

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

rule 是urlrewrite下的子節(jié)點,是urlrewrite的主要規(guī)則節(jié)點,在它里面包含from 和to兩個子節(jié)點,from表示請求的URL,to表示將轉(zhuǎn)到的真實的URL。關(guān)于from,UrlRewrite有兩種匹配的模式,一種是正則表達式匹 配,一種的通配符匹配,如上就是正則表達式匹配。當進行匹配的時候,匹配部分的正則可以被提取為參數(shù)進行傳遞

如上規(guī)則設(shè)置,當客戶端訪問的網(wǎng)址是http://127.0.0.1:8080/Struts/demo/hello.html  的時候,因為 匹配部分是hello,所以它跳轉(zhuǎn)到的是http://127.0.0.1:8080/Struts/hello 上。當網(wǎng)址規(guī)則中有多個正則的時候,匹 配的參數(shù)也會隨之增加。如:

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

rule 的默認匹配方式是正則表達式,但是,有時候也可以以通配符的形式進行匹配。在編寫規(guī)則的時候,只需要在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> 

關(guān)于to節(jié)點,UrlRewrite提供了多種網(wǎng)址跳轉(zhuǎn)方式,如forward和redirect,這兩種方式,和大部分MVC框架提供的功能一樣,在此不再贅述。

除了支持指定規(guī)則的跳轉(zhuǎn)外,UrlRewrite還支持當匹配規(guī)則的時候執(zhí)行某個對象的某個函數(shù)

  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> 

如上述設(shè)置,要實現(xiàn)匹配規(guī)則是執(zhí)行某個函數(shù),需要添加多一個run節(jié)點,在節(jié)點上面添加對應(yīng)的類屬性和方法屬性。同時,對應(yīng)的類必須繼承 RewriteRule類,執(zhí)行的方法必須傳入兩個參數(shù),分別是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.     } 

這樣,當客戶端輸入的網(wǎng)址***次匹配到指定規(guī)則的時候,UrlRewrite就會執(zhí)行對應(yīng)的函數(shù),該函數(shù)只在***次匹配成功的時候執(zhí)行。

如果想要每次匹配規(guī)則都執(zhí)行某函數(shù),可以在urlrewrite添加class-rule子節(jié)點,該節(jié)點設(shè)置后,每次匹配規(guī)則后,指定的函數(shù)都會執(zhí)行一次。

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

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

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

在UrlRewrite中添加該規(guī)則后,我們在頁面中原本的地址是

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

這樣可以隱藏了許多開發(fā)中的技術(shù),較為安全。

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

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

責任編輯:王雪燕 來源: Sean學習筆記
相關(guān)推薦

2009-10-13 14:38:15

.NET重寫URL

2009-07-31 09:39:59

ASP.NET和URL

2009-08-05 14:46:17

ASP.NET url

2010-03-05 14:55:39

Python創(chuàng)建Sil

2019-05-14 15:27:31

MongoDB自動備份數(shù)據(jù)庫

2017-11-21 14:14:04

PHPnode.js圖片訪問

2023-08-21 11:09:38

IngressNginxApache

2009-12-30 14:28:09

ASP.NET Web

2024-07-22 16:26:47

2011-05-11 14:50:54

URL

2011-06-07 15:42:25

優(yōu)化URL

2009-07-22 14:23:39

URL RewriteASP.NET

2012-07-31 13:28:03

GAE

2021-01-27 18:15:58

Java重寫Overriding

2024-09-30 09:56:36

CSV文件Python

2009-06-17 16:10:37

Java網(wǎng)站優(yōu)勢

2010-10-29 16:17:55

Oracle存儲過程

2009-12-30 15:26:02

Silverlight

2012-12-28 14:23:12

Android開發(fā)TextView

2013-08-30 13:40:42

喬布斯蘋果
點贊
收藏

51CTO技術(shù)棧公眾號