中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

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

2018-07-20    來源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

  現(xiàn)在大部分的網(wǎng)站和商城都會使用到URL重寫,接觸到這個(gè),也是因?yàn)檎谧龅碾娮由虅?wù)商城。URL重寫,是將原有的URL采用另一種規(guī)則來顯示,使得用戶方便訪問同時(shí)也屏蔽一些信息。

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

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

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

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

  以下是UrlRewrite的使用實(shí)例(個(gè)人認(rèn)為,UrlRewrite的官方文檔寫的還是比較全面易懂的)

  UrlRewrite的導(dǎo)入:

  UrlRewrite的導(dǎo)入非常簡單,首先需在項(xiàng)目的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目錄下新建一個(gè)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的規(guī)則制定文件,后續(xù)主要通過配置它來進(jìn)行URL的重寫。

  至此,UrlRewrite的導(dǎo)入就完成了

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

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

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

  如上規(guī)則設(shè)置,當(dāng)客戶端訪問的網(wǎng)址是http://127.0.0.1:8080/Struts/demo/hello.html  的時(shí)候,因?yàn)槠ヅ洳糠质莌ello,所以它跳轉(zhuǎn)到的是http://127.0.0.1:8080/Struts/hello 上。當(dāng)網(wǎng)址規(guī)則中有多個(gè)正則的時(shí)候,匹配的參數(shù)也會隨之增加。如:

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

  rule 的默認(rèn)匹配方式是正則表達(dá)式,但是,有時(shí)候也可以以通配符的形式進(jìn)行匹配。在編寫規(guī)則的時(shí)候,只需要在rule添加一個(gè)match-type="wildcard" 的屬性即可。

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

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

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

<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>

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

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

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

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

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

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

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

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

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

  以上,就是UrlRewrite的一些常見的用法。關(guān)于UrlRewrite,網(wǎng)上也有人說這個(gè)會影響性能,因?yàn)樵诿看握埱蟮臅r(shí)候都需要經(jīng)過換一次過濾,但是這個(gè)還是要見仁見智,畢竟,使用URL重寫,對網(wǎng)址還是有好處的。

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

標(biāo)簽: isp 安全 電子商務(wù) 電子商務(wù)商城 搜索 搜索引擎

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:一套跨平臺五子棋網(wǎng)游的開發(fā)經(jīng)歷

下一篇:Git 使用規(guī)范流程