當前位置:才華齋>計算機>java語言>

Java UrlRewriter偽靜態技術運用分析

java語言 閱讀(1.79W)

通常我們為了更好的緩解服務器壓力,和增強搜尋引擎的友好面,都將文章內容生成靜態頁面。

Java UrlRewriter偽靜態技術運用分析

但是有時為了能實時的顯示一些資訊,或者還想運用動態指令碼解決一些問題,不能用靜態的方式來展示網站內容,必須用到動態頁面顯示。

這樣以來,就損失了對搜尋引擎的友好面,怎麼樣在兩者之間找個中間方法呢,如何增強你網站中地址的可讀性和讓搜尋引擎快速的收錄到你的站點?

這就需要你美化你的網頁的地址,這就產生了偽靜態技術,也就是我們常說的Url Rewriter重寫技術。就是當我們訪問一個頁面時,位址列中展示出來的是以“”為結尾的靜態頁面形式,而實際上我們訪問的動態網頁。這裡就需要用到UrlRewriter技術。

大家熟悉的可能有很多伺服器都提供Url重寫的技術,以前我們用的最多的就是Apache,Jboss這樣一些伺服器自帶的一些Url重寫,但是他們的配置比較麻煩,效能又不是太好。現在我們有專一的開源框架來完成Url重寫任務,今天我要介紹的就是UrlRewriteFilter,它使用起來比較簡單。UrlRewriteFilter是一個用於改寫URL的Web過濾器,類似於Apache的mod_rewrite。適用於任何Web應用伺服器(如Resin,Orion,Tomcat等)。其典型應用就把動態URL靜態化,便於搜尋引擎爬蟲抓取你的動態網頁。

我們先簡單的瞭解一下使用Url重寫能給你網站帶來哪些好處。

第一:有利於搜尋引擎的抓取,因為現在大部分的搜尋引擎對動態頁面的抓取還比較弱,它們更喜歡抓取一些靜態的頁面。而我們現在的頁面大部分的資料都是動態的顯示的。這就需要我們把動態頁面變成靜態的頁面,有利於搜尋引擎的抓取。

第二:讓使用者更容易理解,很少有使用者去關心你網站的頁面的地址,但對一般的大中型網站增強可讀性還是必須的。這樣會讓你的網站更加完美。

第三:隱藏技術的實現,我們可以通過Url重寫可以實現技術的隱藏。不至於暴露你所採用的技術,給一些想攻擊你網站的愛好者提供方便。

第四:可以很方便的重用,提高網站的移植性。如果我們後臺方法改動的話,可以保證前臺的頁面部分不用改。這樣就提高了網站的移植性。

它雖然有這麼多的優點,但是也有一點缺點的,因為它是通過過濾器原理來實現的,就以為著又多了一道訪問,會多少影響點訪問速度的,這個可以忽略不計的。

現在UrlRewriter技術有兩個技術平臺的,一個就是在Java方向的,另一個就是方向的。

首先讓我們瞭解它的工作原理,說白了它就是一個簡單的過濾器(Filter),看看原始碼你就會很快的明白,它就是通過我們在jsp中常用的兩個方法實現的forward(),sendRedirect()。

下面我們就Url重寫技術進行簡單應用:

第一步:下載包,並把拷到classpath下。

第二步:在WEB-INF目錄下建一個配置檔案。

第三步:在配置檔案中初始化配置UrlRewriteFilter。在配置檔案中加上下面的程式碼:

複製程式碼 程式碼如下:

UrlRewriteFilter

ewriteFilter

UrlRewriteFilter

/*

REQUEST

FORWARD

最後我要簡單的講一下常用的兩個配置規則,以下就是簡單的配置片段。不要習慣Java的命名法把它寫成,這樣即使你加上

複製程式碼 程式碼如下:

confPath

/WEB-INF/

在啟動的`伺服器的時候還是會報錯的,因為原始碼中必須是全小寫的()且只能放到WEB-INF下面。

^/forum/thread/([0-9]+)$

/forum/on?id=$1

^/forum/thread/([0-9]+)([0-9]+)$

/forum/on?id=$1&page=$2

所有的規則配置都寫在這裡。第一個常用個規則就是站內的簡單重寫。

就是實際的訪問地址。比如我們實際的訪問地址是: 而我們想把它重寫為。這樣看起來比我們實際的要好看的多。我們就應該這樣的寫:

複製程式碼 程式碼如下:

^/forum/thread/([0-9]+)([0-9]+)$

/forum/on?id=$1&page=$2

簡單的介紹一下常用的正規表示式:

程式碼說明

. 匹配除換行符以外的任意字元

w 匹配字母或數字或下劃線或漢字

s 匹配任意的空白符

d 匹配數字

b 匹配單詞的開始或結束

^ 匹配字串的開始

$ 匹配字串的結束

常用的&要用 &來表示。$1,$2代表與你配置正規表示式>/(w+)/(w+)/相對應的引數。預設的是 type="forward"。

另一個常用的規則就是連線外部的網站。就要用到。

複製程式碼 程式碼如下:

^/rss/$

? url= MySiteFeed