Maven下 urlrewrite 地址重寫

環境:
html

Maven: apache-maven-3.3.3
Urlrewrite 3.1.0
Myeclipse 10


使用Url重寫能給你網站帶來哪些好處呢? 

第一:有利於搜索引擎的抓取,由於如今大部分的搜索引擎對動態頁面的抓取還比較弱,它們更喜歡抓取一些靜態的頁面。而咱們如今的頁面大部分的數據都是動態的顯示的。這就須要咱們把動態頁面變成靜態的頁面,有利於搜索引擎的抓取 

第二:讓用戶更容易理解,不多有用戶去關心你網站的頁面的地址,但對通常的大中型網站加強可讀性仍是必須的。這樣會讓你的網站更加完美 

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

第四:能夠很方便的重用,提升網站的移植性。若是咱們後臺方法改動的話,能夠保證前臺的頁面部分不用改。這樣就提升了網站的移植性。 

它雖然有這麼多的優勢,可是也有一點缺點的,由於它是經過過濾器原理來實現的,就意味着又多了一道訪問,會多少影響點訪問速度的,但這個能夠忽略不計" web

-----摘自網絡正則表達式

1、Tomcat的過濾器apache

最典型的就是用urlReweite的類庫。若是有經驗,本身寫也不是很麻煩。也能夠用現成的開源的免費的urlrewrite  filter. http://tuckey.org/urlrewrite/下載網絡

2、使用Apache的mod
 
# 去掉這個前面的#,啓用它
LoadModule rewrite_module modules/mod_rewrite.soapp

<VirtualHost _default_:80>
# 其它的配置數據eclipse

RewriteEngine On
# 下面三行實現動態解析
RewriteRule ^/viewthread/(/d+).htm$ /viewthread.jsp?id=$1 [L,PT]
</VirtualHost>jsp

3、使用系統的404錯誤進行
也就是頁面沒找到的錯誤,使用了404的錯誤處理頁面來頁面轉發 maven


第一種修改麻煩,但對於平穩運行的系統,是個不錯的選擇
第二種須要配置Apache,但 Apache的重啓速度很快,適合於有可能常常變得狀況,並且Apache Mod的效率仍是不錯的
第三種最靈活,通常簡單的應用能夠用這個。網站


本次採用第一種Tomcat的過濾器urlReweite

首先引入maven庫

<!-- URL Rewrite -->
		<dependency>               
		<groupId>org.tuckey</groupId>                  
		<artifactId>urlrewritefilter</artifactId>
		<version>3.1.0</version>
		</dependency>

在WEB-INF目錄下建一個urlrewrite.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<urlrewrite>

 <rule>
    <note>首頁</note>
	<from>/index.html</from>
    <to type="forward">/index.do</to>
 </rule>
  
</urlrewrite>

urlrewrite.xml詳解:

<!-- 
  <rule>
    <note>重寫index.jsp成index.html</note>
    <note>example:/index.html</note>
    <from>/index.html</from>
    <to type="forward">/index.jsp</to>
  </rule>
  
  <rule>
    <note>將view根目錄下全部jsp資源重寫成/xxx.action</note>
    <note>example:/index.action</note>
    <from>/([A-Za-z0-9]+).action</from>
    <to type="forward">/view/$1.jsp</to>
  </rule>
  
  <rule>
    <note>forward(轉發模式)傳參</note>
    <note>example:/user/param/fancy/8080.do</note>
    <from>/user/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+).do</from>
    <to type="forward">/view/parameter/$1.jsp?username=$2&amp;password=$3</to>
  </rule>
  
  <rule>
    <note>redirect(重定向模式)傳參,to中寫絕對地址</note>
    <note>example:/admin/param/fancy/8080.do</note>
    <from>/admin/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+).do</from>
    <to type="redirect">/urlrewrite-maven-example/view/parameter/$1.jsp?username=$2&amp;password=$3</to>
  </rule> 
  
  
urlrewrite.xml 這個配置文件必定只能放在 WEB-INF 下,放別的地方,不管你在web.xml中怎麼配置都是不行的,至少如今是不行的。

所謂重寫,就必定會有規則的匹配,這裏用到了正則表達式,方便起見,我只用了[A-Za-z0-9]+,簡單的解釋一下:

A-Z:匹配 A 到 Z 中的任意一個字符,說一句廢話,同理可得,

a-z:匹配 a 到 z 中的任意一個字符

0-9:匹配 0 到 9 的任意一個字符

+:至少出現一次,即,一次或一次以上

合起來 [A-Za-z0-9]+ 的意思就是:匹配一個任意的英文字母和數字組合的字符串

<rule>:自定義匹配規則

<note>:註釋,解釋標籤

<from>:定義具體的匹配規則

<to>:匹配成功後的目標地址

<to type="">:type的值有兩個,一個是 forward (轉發,參數不丟失),一個是 redirect (重定向,地址欄顯示的地址就是目標真實地址)

$1:匹配中的第一個正則表達式的字符串的值,$2,$3,$4....也是如此

&amp; :是 & 的實體名,表明的就是 &,這個能夠在 w3school 中找到:http://www.w3school.com.cn/tags/html_ref_entities.html

第一個rule:訪問 /index.html,其實是訪問了 /index.jsp

第二個rule:訪問 /xx.action , 其實是訪問了 view 目錄下的 xx.jsp

第三個rule:訪問 /user/xx/yy/zz.do , 其實是訪問了 view 目錄下的 parameter 目錄下的 xx.jsp?username=yy&password=zz

第四個rule:跟第三個實際上是同樣的,可是因爲是重定向模式,因此地址欄就會顯示真的是地址
  -->

在web.xml中初始化。添加過濾器:

<!--urlrewrite過濾器-->
    <filter>
          <filter-name>UrlRewriteFilter</filter-name>
          <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
          <init-param>
                <!-- 設置自動更新urlrewrite.xml信息  -->
                <param-name>confReloadCheckInterval</param-name> 
                <param-value>60</param-value>
          </init-param>
     </filter>
     <filter-mapping>
         <filter-name>UrlRewriteFilter</filter-name>
         <url-pattern>/*</url-pattern>
         <dispatcher>REQUEST</dispatcher>
         <dispatcher>FORWARD</dispatcher>
         <dispatcher>INCLUDE</dispatcher>
     </filter-mapping>

至此,搞定!

相關文章
相關標籤/搜索