卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

偽靜態(tài)_URLRewrite實(shí)例解析

Url Rewrite Filter實(shí)現(xiàn)頁面?zhèn)戊o態(tài)化,簡單實(shí)例及步驟1. 首先新建一個(gè)Web Project本例把它命名為:UrlRewrite ,在創(chuàng)建的時(shí)候,選擇勾選“Add JSTL libra

Url Rewrite Filter實(shí)現(xiàn)頁面?zhèn)戊o態(tài)化,簡單實(shí)例及步驟

1. 首先新建一個(gè)Web Project

本例把它命名為:UrlRewrite ,在創(chuàng)建的時(shí)候,選擇勾選“Add JSTL libraries to WEB-INF/lib folder ”(注:因?yàn)轫?xiàng)目中會(huì)用到j(luò)stl 核心標(biāo)簽庫) ,然后再把urlrewrite-2.6.0.jar 導(dǎo)入到項(xiàng)目Bulid Path路徑下,最后再加入struts 框架。

2. 配置web.xml 文件

把如下代碼加入到web.xml 配置文件中,更多的配置可參考官方文檔:

UrlRewriteFilter

org.tuckey.web.filters.urlrewrite.UrlRewriteFilter

logLevel

WARN

UrlRewriteFilter

/*

3. 新增urlrewrite.xml 文件

2.6//EN" "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">

^/([0-9] ).html$

/index.jsp?id=$1

在WEB-INF 目錄下新建一個(gè)Url Rewrite Filter 的規(guī)則配置文件,默認(rèn)命名為

,

urlrewrite.xml ,示例內(nèi)容如下:

注:rule 是url 重寫規(guī)則,from 是顯示出來的地址,to 是映射的實(shí)際地址,$1是重寫參數(shù), 它的值與from 中的正則表達(dá)式是一一對(duì)應(yīng),可以為多個(gè),()里是匹配的正則表達(dá)式, 在正則表達(dá)式^指定字符的串開始,$為指定結(jié)束

4. 新建一個(gè)簡單的action 處理類

在此命名為:ProcessAction.java ;示例代碼如下:

package com.telin.struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.actions.DispatchAction;

public class ProcessAction extends DispatchAction {

/**

* Method execute

*

* @param mapping

* @param form

* @param request

* @param response

* @return ActionForward

*/

public ActionForward show(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { return mapping.findForward("ok" );

}

}

5. 在struts-config.xml 中添加如下內(nèi)容:

,

6.. 新增index.jsp 文件,添加如下內(nèi)容:

Hello word ! <=request.getParameter("id" ) >

7. 新增show.html 文件,添加如下內(nèi)容:

This is OK page.

8. 所有文件都操作處理完后,發(fā)布并啟動(dòng)項(xiàng)目

下面做一下具體講解

講解1:

正常情況下:

在瀏覽器的地址欄中輸入:http://localhost:8080/UrlRewrite/

頁面內(nèi)容如下:Hello word ! null

(因?yàn)榇藭r(shí)id 并沒有值,所以顯示為null )

Urlrewrite 之后:

在瀏覽器的地址欄中輸入:http://localhost:8080/UrlRewrite/maomao.html

頁面內(nèi)容如下:Hello word ! maomao

解析:在項(xiàng)目中,maomao.html 實(shí)際上并不存在, 該請(qǐng)求由Url Rewrite Filter負(fù)責(zé)攔截,由于它符合我在urlrewrite.xml 中配置的攔截規(guī)則:

^/([0-9] ).html$

/index.jsp?id=$1

所以該請(qǐng)求被轉(zhuǎn)發(fā)由index.jsp 負(fù)責(zé)處理,即實(shí)際處理請(qǐng)求的是index.jsp ,但是地址欄中顯示地址依舊是maomao.html. 即偽靜態(tài)的顯示方式,并把參數(shù)id 賦值”maomao ”,所以頁面中id 此時(shí)不為null 。

講解2:

正常情況下:

,

在瀏覽器的地址欄輸入:http://localhost:8080/UrlRewrite/process.do?method=show&uuid=index 頁面內(nèi)容如下:This is OK page.

我們?cè)趺窗堰@個(gè)url 實(shí)現(xiàn)偽靜態(tài)化呢?

實(shí)現(xiàn)方式1:

在urlrewrite.xml 中定義如下規(guī)則:

^/([a-z] )/([a-z] )/([a-z] )$

/$1.do?method=$2&uuid=$3

在index.jsp 中添加如下鏈接:

跳轉(zhuǎn)-1

當(dāng)點(diǎn)擊該鏈接,地址欄中顯示url 是:

注:這種方式在很多論壇中經(jīng)常使用。

實(shí)現(xiàn)方式2:

在urlrewrite.xml 中定義如下規(guī)則:

^/([a-z] )/([a-z] )/([a-z] ).html$

/$1.do?method=$2&uuid=$3

在index.jsp 中添加如下鏈接:

跳轉(zhuǎn)-2

當(dāng)點(diǎn)擊該鏈接,地址欄中顯示url 是:

注:這只是偽靜態(tài)的兩種url 展現(xiàn)方式。

講解3:

在urlrewrite.xml 配置文件中有兩種規(guī)則:即,在上面的例子中,講解的都是規(guī)則,下面我們來講解一下規(guī)則:

這是非常類似的一個(gè)正常的規(guī)則,但它是用于重寫的URL ,通過response.encodeURL() 或者 標(biāo)簽來實(shí)現(xiàn)

下面我們?cè)趇ndex.jsp 中加入如下三段代碼:

<@ taglib uri="http://java.sun.com/jstl/core-rt" prefix="c">

">跳轉(zhuǎn)-3

跳轉(zhuǎn)-4

在urlrewrite.xml 中加入如下規(guī)則:

process.do?method=([a-z] )&uuid=([a-z] ) ./$1.html

,

正常情況下:

在瀏覽器的地址欄中輸入:http://localhost:8080/UrlRewrite/

我們把鼠標(biāo)指向鏈接” 跳轉(zhuǎn)-3”或者” 跳轉(zhuǎn)-4”上的時(shí)候,狀態(tài)欄的地址顯示為: http://localhost:8080/UrlRewrite/show.html

當(dāng)我們點(diǎn)擊鏈接” 跳轉(zhuǎn)-3”或者” 跳轉(zhuǎn)-4”上的時(shí)候。地址欄顯示地址為:

頁面顯示內(nèi)容為:This is OK page.

解析:跳轉(zhuǎn)-4該語句符合我在urlrewrite.xml 中配置的攔截規(guī)則

process.do?method=([a-z] )&uuid=([a-z] ) ./$1.html

所以它會(huì)被服務(wù)器解析為:跳轉(zhuǎn)-4,從而實(shí)現(xiàn)url 重定向。

講解4:

上面已經(jīng)講過,比如訪問:

可以這樣:

^/([a-z] )/([a-z] )/([a-z] ).html$

/$1.do?method=$2&uuid=$3

跳轉(zhuǎn)-2

相結(jié)合的配置訪問。

但是像這種配置:跳轉(zhuǎn)-2的可讀性比較差,不方便一眼看出是一個(gè)什么樣的請(qǐng)求處理方式。

所以可以把 結(jié)合使用:

^/([a-z] )/([a-z] )/([a-z] ).html$

/$1.do?method=$2&uuid=$3

,

([a-z] ).do?method=([a-z] )&uuid=([a-z] ) {context-path}/$1/$2/$3.html

跳轉(zhuǎn)-4

此時(shí)點(diǎn)擊“跳轉(zhuǎn)-4”,地址欄url 顯示為:

頁面顯示內(nèi)容為:

This is OK page.

解析:

1. 跳轉(zhuǎn)-4該語句會(huì)根據(jù)規(guī)則被服務(wù)器解析為:跳轉(zhuǎn)-4

2. 我們點(diǎn)擊“>跳轉(zhuǎn)-4 “實(shí)際上就是請(qǐng)求”/upload/12/v1heqrnfo41.html“,該請(qǐng)求符合規(guī)則,所以會(huì)被轉(zhuǎn)發(fā)到 ”process.do?method=show&uuid=index“,從而實(shí)現(xiàn)偽靜態(tài)。

總之, 頁面中的地址紅過URLRewriter 進(jìn)行靜態(tài)化以后, 在請(qǐng)求的時(shí)候,URLRewriter 又將其進(jìn)行了還原, 保證了一致性.

講解5:

防止不同規(guī)則之間沒必要的多次轉(zhuǎn)發(fā)請(qǐng)求:

^/([a-z] )/([a-z] )/([a-z] ).html$

{context-path}/$1.do?method=$2&uuid=$3

process.do?method=([a-z] )&uuid=([a-z] ) {context-path}/$2.jsp

,

跳轉(zhuǎn)-2

在瀏覽器的地址欄中輸入:http://localhost:8080/UrlRewrite/

我們把鼠標(biāo)指向鏈接” 跳轉(zhuǎn)-2”狀態(tài)欄的地址顯示為:

當(dāng)我們點(diǎn)擊鏈接” 跳轉(zhuǎn)-2”后,地址欄顯示地址為:

解析:

1. 跳轉(zhuǎn)-2該語句會(huì)根據(jù)第一個(gè)規(guī)則被轉(zhuǎn)發(fā)到 /process.do?method=show&uuid=index

2. 被轉(zhuǎn)發(fā)后的請(qǐng)求/process.do?method=show&uuid=index,同時(shí)它又符合第二個(gè)規(guī)則, 所以它會(huì)被轉(zhuǎn)發(fā)到index.jsp, 所以此時(shí)地址欄顯示為最后的地址。

注:似乎這種在不同之間轉(zhuǎn)發(fā)的情況,只在type="redirect"時(shí)才出現(xiàn)。

常見的問題:

1) 當(dāng)你想要把“ & ”放在rule 規(guī)則中時(shí),你必須鍵入的XML 實(shí)體"&”.

2) 為了簡單你可能想要啟動(dòng)所有的from ’s, 以^開始以$結(jié)束(在正則表達(dá)式^指定字符

的串開始,$為指定結(jié)束).

例如一個(gè)請(qǐng)求/my/url/path不匹配^/url/$但匹配/url/

3) 如果使用記住所有網(wǎng)址, 在您的代碼必須是編碼如:

">

4) 在outbound-rule 處如果不加“ ”對(duì)相關(guān)的符號(hào)進(jìn)行轉(zhuǎn)義那么將使5)

6)

7)

8)

9) response.encodeURL 或者h(yuǎn)ttp://wk.huhome.net/3/綁定不上“美化后”的url 。 對(duì)于中文參數(shù)要使用(.*)作為參數(shù)轉(zhuǎn)義. 在制定rule 時(shí)最好要加上^........$,否則后果就是將你的web project下面的所有的你轉(zhuǎn)發(fā)路徑下的目錄均認(rèn)定成為參數(shù)了,導(dǎo)致頁面圖片以及css 路徑出錯(cuò)。 在瀏覽器url 中輸入:,則可以看見所有你自定義的重寫規(guī)則。 簡單的說:是對(duì)進(jìn)入服務(wù)器的url 進(jìn)行重置。 是對(duì)從服務(wù)器向頁面輸出的url 進(jìn)行重置。 正則表達(dá)式是復(fù)雜的,有些技巧,

常見的兩種跳轉(zhuǎn)方式(type值) :redirect 、forward

1. )forward (default) 如果請(qǐng)求匹配“from ”中的規(guī)則, 那么該請(qǐng)求將內(nèi)部送交到URL 指定

,

的“ to “ 元素。注:在這種情況下, “to ”鏈接必須和UrlRewriteFilter 在同一上下文環(huán)境中,它等同于:

RequestDispatcher rq = request.getRequestDispatcher([to value]);

rq.forward(request, response);

2. )redirect 如果請(qǐng)求匹配“from ”中的規(guī)則,那么該請(qǐng)求將會(huì)HTTP 重定向,它等同于:

HttpServletResponse.sendRedirect([to value]))

因此:如果選擇跳轉(zhuǎn)類型不同,那么他們相關(guān)的配置路徑是不同的。

官方文檔:http://tuckey.org/urlrewrite/

標(biāo)簽: