Java UrlRewriter偽靜態(tài)技術(shù)運用深入分析
更新時間:2012年12月02日 11:52:22 作者:
通常我們?yōu)榱烁玫木徑夥?wù)器壓力,和增強搜索引擎的友好面,都將文章內(nèi)容生成靜態(tài)頁面,這就產(chǎn)生了偽靜態(tài)技術(shù),也就是我們常說的Url Rewriter重寫技術(shù)
通常我們?yōu)榱烁玫木徑夥?wù)器壓力,和增強搜索引擎的友好面,都將文章內(nèi)容生成靜態(tài)頁面。
但是有時為了能實時的顯示一些信息,或者還想運用動態(tài)腳本解決一些問題,不能用靜態(tài)的方式來展示網(wǎng)站內(nèi)容,必須用到動態(tài)頁面顯示。
這樣以來,就損失了對搜索引擎的友好面,怎么樣在兩者之間找個中間方法呢,如何增強你網(wǎng)站中地址的可讀性和讓搜索引擎快速的收錄到你的站點?
這就需要你美化你的網(wǎng)頁的地址,這就產(chǎn)生了偽靜態(tài)技術(shù),也就是我們常說的Url Rewriter重寫技術(shù)。就是當(dāng)我們訪問一個頁面時,地址欄中展示出來的是以“.html”為結(jié)尾的靜態(tài)頁面形式,而實際上我們訪問的動態(tài)網(wǎng)頁。這里就需要用到UrlRewriter技術(shù)。
大家熟悉的可能有很多服務(wù)器都提供Url重寫的技術(shù),以前我們用的最多的就是Apache,Jboss這樣一些服務(wù)器自帶的一些Url重寫,但是他們的配置比較麻煩,性能又不是太好?,F(xiàn)在我們有專一的開源框架來完成Url重寫任務(wù),今天我要介紹的就是UrlRewriteFilter,它使用起來比較簡單。UrlRewriteFilter是一個用于改寫URL的Web過濾器,類似于Apache的mod_rewrite。適用于任何Web應(yīng)用服務(wù)器(如Resin,Orion,Tomcat等)。其典型應(yīng)用就把動態(tài)URL靜態(tài)化,便于搜索引擎爬蟲抓取你的動態(tài)網(wǎng)頁。
我們先簡單的了解一下使用Url重寫能給你網(wǎng)站帶來哪些好處。
第一:有利于搜索引擎的抓取,因為現(xiàn)在大部分的搜索引擎對動態(tài)頁面的抓取還比較弱,它們更喜歡抓取一些靜態(tài)的頁面。而我們現(xiàn)在的頁面大部分的數(shù)據(jù)都是動態(tài)的顯示的。這就需要我們把動態(tài)頁面變成靜態(tài)的頁面,有利于搜索引擎的抓取。
第二:讓用戶更容易理解,很少有用戶去關(guān)心你網(wǎng)站的頁面的地址,但對一般的大中型網(wǎng)站增強可讀性還是必須的。這樣會讓你的網(wǎng)站更加完美。
第三:隱藏技術(shù)的實現(xiàn),我們可以通過Url重寫可以實現(xiàn)技術(shù)的隱藏。不至于暴露你所采用的技術(shù),給一些想攻擊你網(wǎng)站的愛好者提供方便。
第四:可以很方便的重用,提高網(wǎng)站的移植性。如果我們后臺方法改動的話,可以保證前臺的頁面部分不用改。這樣就提高了網(wǎng)站的移植性。
它雖然有這么多的優(yōu)點,但是也有一點缺點的,因為它是通過過濾器原理來實現(xiàn)的,就以為著又多了一道訪問,會多少影響點訪問速度的,這個可以忽略不計的。
現(xiàn)在UrlRewriter技術(shù)有兩個技術(shù)平臺的,一個就是在Java方向的,另一個就是.NET方向的。今天我們講的是Java方向的應(yīng)用。
首先讓我們了解它的工作原理,說白了它就是一個簡單的過濾器(Filter),看看源碼你就會很快的明白,它就是通過我們在jsp中常用的兩個方法實現(xiàn)的forward(),sendRedirect()。
下面我們就Url重寫技術(shù)進(jìn)行簡單應(yīng)用:
第一步:下載urlrewrite-3.2.0beta.jar包,并把urlrewrite-3.2.0beta.jar拷到classpath下。
第二步:在WEB-INF目錄下建一個urlrewrite.xml配置文件。
第三步:在web.xml配置文件中初始化配置UrlRewriteFilter。在配置文件中加上下面的代碼:
<!-- 在配置文件中設(shè)置 URL Rewrite-->
<FILTER></FILTER>
<FILTER-NAME></FILTER-NAME>UrlRewriteFilter
<FILTER-CLASS></FILTER-CLASS>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
<FILTER-MAPPING></FILTER-MAPPING>
<FILTER-NAME></FILTER-NAME>UrlRewriteFilter
<URL-PATTERN></URL-PATTERN>/*
<DISPATCHER></DISPATCHER>REQUEST
<DISPATCHER></DISPATCHER>FORWARD
最后我要簡單的講一下常用的兩個配置規(guī)則,以下就是簡單的urlrewrite.xml配置片段。不要習(xí)慣Java的命名法把它寫成urlRewrite.xml,這樣即使你加上
<INIT-PARAM></INIT-PARAM>
<PARAM-NAME></PARAM-NAME>confPath
<PARAM-VALUE></PARAM-VALUE>/WEB-INF/urlRewrite.xml
在啟動的服務(wù)器的時候還是會報錯的,因為源碼中必須是全小寫的(urlrewrite.xml)且只能放到WEB-INF下面。
<!--l version="1.0" encoding="utf-8-->
<URLREWRITE></URLREWRITE>
<!-- 顯示主題帖 -->
<RULE></RULE>
<FROM></FROM>^/forum/thread/([0-9]+).html$
<TO type="forward"></TO>/forum/list.action?id=$1
<RULE></RULE>
<FROM></FROM>^/forum/thread/([0-9]+).html?page=([0-9]+)$
<TO type="forward"></TO>/forum/list.action?id=$1&page=$2
所有的規(guī)則配置都寫在這里。第一個常用個規(guī)則就是站內(nèi)的簡單重寫。
<rule>
<from></from>
<to type="forward></to>
</rule>
<from></from>
寫上你自己定義的訪問地址,通常采用正則表達(dá)式的寫法;<to type="forward></to>就是實際的訪問地址。比如我們實際的訪問地址是: http://www.phome.asia/forum/list.action?id=16931&page=2而我們想把它重寫為http://www.phome.asia/forum/thread/16931.html?page=2。這樣看起來比我們實際的要好看的多。我們就應(yīng)該這樣的寫:
<RULE></RULE>
<FROM></FROM>^/forum/thread/([0-9]+).html?page=([0-9]+)$
<TO type="forward"></TO>/forum/list.action?id=$1&page=$2
簡單的介紹一下常用的正規(guī)表示式:
代碼說明
. 匹配除換行符以外的任意字符
\w 匹配字母或數(shù)字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數(shù)字
\b 匹配單詞的開始或結(jié)束
^ 匹配字符串的開始
$ 匹配字符串的結(jié)束
常用的&要用 &來表示。$1,$2代表與你配置正規(guī)表達(dá)式>/(\w+)/(\w+)/相對應(yīng)的參數(shù)。<to type="forward">默認(rèn)的是 type="forward"。
另一個常用的規(guī)則就是連接外部的網(wǎng)站。就要用到<to type="redirect">。
<RULE></RULE>
<FROM></FROM>^/rss/yahoo\.html$
<TO type="redirect"></TO> http://add.my.yahoo.com/rss? url= http://feed.feedsky.com/ MySiteFeed
但是有時為了能實時的顯示一些信息,或者還想運用動態(tài)腳本解決一些問題,不能用靜態(tài)的方式來展示網(wǎng)站內(nèi)容,必須用到動態(tài)頁面顯示。
這樣以來,就損失了對搜索引擎的友好面,怎么樣在兩者之間找個中間方法呢,如何增強你網(wǎng)站中地址的可讀性和讓搜索引擎快速的收錄到你的站點?
這就需要你美化你的網(wǎng)頁的地址,這就產(chǎn)生了偽靜態(tài)技術(shù),也就是我們常說的Url Rewriter重寫技術(shù)。就是當(dāng)我們訪問一個頁面時,地址欄中展示出來的是以“.html”為結(jié)尾的靜態(tài)頁面形式,而實際上我們訪問的動態(tài)網(wǎng)頁。這里就需要用到UrlRewriter技術(shù)。
大家熟悉的可能有很多服務(wù)器都提供Url重寫的技術(shù),以前我們用的最多的就是Apache,Jboss這樣一些服務(wù)器自帶的一些Url重寫,但是他們的配置比較麻煩,性能又不是太好?,F(xiàn)在我們有專一的開源框架來完成Url重寫任務(wù),今天我要介紹的就是UrlRewriteFilter,它使用起來比較簡單。UrlRewriteFilter是一個用于改寫URL的Web過濾器,類似于Apache的mod_rewrite。適用于任何Web應(yīng)用服務(wù)器(如Resin,Orion,Tomcat等)。其典型應(yīng)用就把動態(tài)URL靜態(tài)化,便于搜索引擎爬蟲抓取你的動態(tài)網(wǎng)頁。
我們先簡單的了解一下使用Url重寫能給你網(wǎng)站帶來哪些好處。
第一:有利于搜索引擎的抓取,因為現(xiàn)在大部分的搜索引擎對動態(tài)頁面的抓取還比較弱,它們更喜歡抓取一些靜態(tài)的頁面。而我們現(xiàn)在的頁面大部分的數(shù)據(jù)都是動態(tài)的顯示的。這就需要我們把動態(tài)頁面變成靜態(tài)的頁面,有利于搜索引擎的抓取。
第二:讓用戶更容易理解,很少有用戶去關(guān)心你網(wǎng)站的頁面的地址,但對一般的大中型網(wǎng)站增強可讀性還是必須的。這樣會讓你的網(wǎng)站更加完美。
第三:隱藏技術(shù)的實現(xiàn),我們可以通過Url重寫可以實現(xiàn)技術(shù)的隱藏。不至于暴露你所采用的技術(shù),給一些想攻擊你網(wǎng)站的愛好者提供方便。
第四:可以很方便的重用,提高網(wǎng)站的移植性。如果我們后臺方法改動的話,可以保證前臺的頁面部分不用改。這樣就提高了網(wǎng)站的移植性。
它雖然有這么多的優(yōu)點,但是也有一點缺點的,因為它是通過過濾器原理來實現(xiàn)的,就以為著又多了一道訪問,會多少影響點訪問速度的,這個可以忽略不計的。
現(xiàn)在UrlRewriter技術(shù)有兩個技術(shù)平臺的,一個就是在Java方向的,另一個就是.NET方向的。今天我們講的是Java方向的應(yīng)用。
首先讓我們了解它的工作原理,說白了它就是一個簡單的過濾器(Filter),看看源碼你就會很快的明白,它就是通過我們在jsp中常用的兩個方法實現(xiàn)的forward(),sendRedirect()。
下面我們就Url重寫技術(shù)進(jìn)行簡單應(yīng)用:
第一步:下載urlrewrite-3.2.0beta.jar包,并把urlrewrite-3.2.0beta.jar拷到classpath下。
第二步:在WEB-INF目錄下建一個urlrewrite.xml配置文件。
第三步:在web.xml配置文件中初始化配置UrlRewriteFilter。在配置文件中加上下面的代碼:
復(fù)制代碼 代碼如下:
<!-- 在配置文件中設(shè)置 URL Rewrite-->
<FILTER></FILTER>
<FILTER-NAME></FILTER-NAME>UrlRewriteFilter
<FILTER-CLASS></FILTER-CLASS>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
<FILTER-MAPPING></FILTER-MAPPING>
<FILTER-NAME></FILTER-NAME>UrlRewriteFilter
<URL-PATTERN></URL-PATTERN>/*
<DISPATCHER></DISPATCHER>REQUEST
<DISPATCHER></DISPATCHER>FORWARD
最后我要簡單的講一下常用的兩個配置規(guī)則,以下就是簡單的urlrewrite.xml配置片段。不要習(xí)慣Java的命名法把它寫成urlRewrite.xml,這樣即使你加上
復(fù)制代碼 代碼如下:
<INIT-PARAM></INIT-PARAM>
<PARAM-NAME></PARAM-NAME>confPath
<PARAM-VALUE></PARAM-VALUE>/WEB-INF/urlRewrite.xml
在啟動的服務(wù)器的時候還是會報錯的,因為源碼中必須是全小寫的(urlrewrite.xml)且只能放到WEB-INF下面。
<!--l version="1.0" encoding="utf-8-->
<URLREWRITE></URLREWRITE>
<!-- 顯示主題帖 -->
<RULE></RULE>
<FROM></FROM>^/forum/thread/([0-9]+).html$
<TO type="forward"></TO>/forum/list.action?id=$1
<RULE></RULE>
<FROM></FROM>^/forum/thread/([0-9]+).html?page=([0-9]+)$
<TO type="forward"></TO>/forum/list.action?id=$1&page=$2
所有的規(guī)則配置都寫在這里。第一個常用個規(guī)則就是站內(nèi)的簡單重寫。
<rule>
<from></from>
<to type="forward></to>
</rule>
<from></from>
寫上你自己定義的訪問地址,通常采用正則表達(dá)式的寫法;<to type="forward></to>就是實際的訪問地址。比如我們實際的訪問地址是: http://www.phome.asia/forum/list.action?id=16931&page=2而我們想把它重寫為http://www.phome.asia/forum/thread/16931.html?page=2。這樣看起來比我們實際的要好看的多。我們就應(yīng)該這樣的寫:
復(fù)制代碼 代碼如下:
<RULE></RULE>
<FROM></FROM>^/forum/thread/([0-9]+).html?page=([0-9]+)$
<TO type="forward"></TO>/forum/list.action?id=$1&page=$2
簡單的介紹一下常用的正規(guī)表示式:
代碼說明
. 匹配除換行符以外的任意字符
\w 匹配字母或數(shù)字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數(shù)字
\b 匹配單詞的開始或結(jié)束
^ 匹配字符串的開始
$ 匹配字符串的結(jié)束
常用的&要用 &來表示。$1,$2代表與你配置正規(guī)表達(dá)式>/(\w+)/(\w+)/相對應(yīng)的參數(shù)。<to type="forward">默認(rèn)的是 type="forward"。
另一個常用的規(guī)則就是連接外部的網(wǎng)站。就要用到<to type="redirect">。
復(fù)制代碼 代碼如下:
<RULE></RULE>
<FROM></FROM>^/rss/yahoo\.html$
<TO type="redirect"></TO> http://add.my.yahoo.com/rss? url= http://feed.feedsky.com/ MySiteFeed
您可能感興趣的文章:
- Java實現(xiàn)遠(yuǎn)程控制技術(shù)完整源代碼分享
- 總結(jié)Java常用到的六個加密技術(shù)和代碼
- 識別率很高的java文字識別技術(shù)
- JAVA Web實時消息后臺服務(wù)器推送技術(shù)---GoEasy
- 分頁技術(shù)原理與實現(xiàn)之Java+Oracle代碼實現(xiàn)分頁(二)
- java的poi技術(shù)讀取和導(dǎo)入Excel實例
- Java中四種XML解析技術(shù)
- PHP、JAVA、.NET這三種技術(shù)的區(qū)別分析
- JAVA使用JDBC技術(shù)操作SqlServer數(shù)據(jù)庫實例代碼
- 你應(yīng)該知道的21個Java核心技術(shù)
相關(guān)文章
從Hello?World開始理解GraphQL背后處理及執(zhí)行過程
這篇文章主要為大家介紹了從Hello?World開始理解GraphQL背后處理過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08IDEA的默認(rèn)快捷鍵設(shè)置與Eclipse的常用快捷鍵的設(shè)置方法
這篇文章主要介紹了IDEA的默認(rèn)快捷鍵設(shè)置與Eclipse的常用快捷鍵的設(shè)置方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01使用IDEA異常斷點來定位java.lang.ArrayStoreException的問題
這篇文章主要介紹了使用IDEA異常斷點來定位java.lang.ArrayStoreException的問題,平常開發(fā)過程中面對這種描述不夠清楚,無法定位具體原因的問題該如何處理,下面我們來一起學(xué)習(xí)一下吧2019-06-06Java使用IOC控制反轉(zhuǎn)的三種設(shè)計模式詳解
這篇文章主要為大家詳細(xì)介紹了Java使用IOC控制反轉(zhuǎn)的三種設(shè)計模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10