UrlRewrite就是咱們一般說的地址重寫,用戶獲得的所有都是通過處理後url

UrlRewritehtml

UrlRewrite就是咱們一般說的地址重寫,用戶獲得的所有都是通過處理後的URL地址,相似於Apachemod_rewrite。將咱們的動態網頁地址轉化爲靜態的地址,如htmlshtml,還能夠隱藏網頁的真正路徑,java

好比:有時候須要將xxx.com/news/ type1/001.jsp 轉化成顯示路徑爲xxx.com/news_type1_001.htmlweb


有點以下:
正則表達式

一:提升安全性,能夠有效的避免一些參數名、ID等徹底暴露在用戶面前,若是用戶隨便亂輸的話,不符合規則的話直接會返回個404或錯誤頁面,這比直接返回500或一大堆服務器錯誤信息要好的多安全

二:美化URL,去除了那些好比*.do之類的後綴名、長長的參數串等,能夠本身組織精簡更能反映訪問模塊內容的URL服務器

三:更有利於搜索引擎的收入,經過對URL的一些優化,可使搜索引擎更好的識別與收錄網站的信息app


下載地址:

官網下載: http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/4.0/index.html#filterparams


實例展現
jsp

實例應用版本urlrewritefilter-4.0.3. Tomcat服務器端口定製爲80
svn

1. 建立web項目,增長 urlrewritefilter-4.0.3.jar 到 WEB-INF/lib 性能

2. 在WEB-INF/web.xml 增長urlrewritefilter過濾器 (near the top above any servlet mappings)

複製代碼

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- 加到任何servlet映射的頂部,否則可能有些路徑不能被過濾到
         http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.2/index.html     -->
    <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
        <!-- 
            設備文件重加載間隔 (0默示隨時加載, -1默示不重加載, 默認-1) 
        -->
        <init-param>
            <param-name>confReloadCheckInterval</param-name>
            <param-value>60</param-value>
        </init-param>
        
        <!-- 自定義配置文件的路徑,是相對context的路徑,(默認位置 /WEB-INF/urlrewrite.xml) -->
        <init-param>
            <param-name>confPath</param-name>
            <param-value>/WEB-INF/urlrewrite.xml</param-value>
        </init-param>
        
        <!-- 
            設置日誌級別(將被記錄到日誌中)
               能夠爲: TRACE, DEBUG, INFO (default), WARN, ERROR, FATAL, log4j, commons, slf4j,
               好比 sysout:DEBUG(設置到控制檯調試輸出級別) 
            (默認級別 WARN) -->
        <init-param>
            <param-name>logLevel</param-name>
            <param-value>DEBUG</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
    
    
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list></web-app>

複製代碼

若是以爲/*這樣的通配,並不符合個人預期,我只想對部分路徑進行URL的重寫,/*可能會形成我想象不到的或者是許微不足道的性能浪費.我把它改爲了我須要的:

複製代碼

    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/member/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/article/*</url-pattern>
    </filter-mapping>

複製代碼

更多請參考: http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.2/index.html

3. 由於上面咱們經過confPath定義了配置文件的路徑,其實該默認位置就是在/WEB-INF/urlrewrite.xml,爲了更能說明問題,因此顯示指定下

複製代碼

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE urlrewrite
    PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
    "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd"><urlrewrite>
    <rule>
        <from>/page/(.*).html</from>  
        <to>/index.jsp?page=$1</to> 
    </rule>
    
    <rule>
        <from>^/user/([a-z]+)/([0-9]+)$</from>
        <to>/index.jsp?nickname=$1&amp;age=$2</to>  </rule></urlrewrite>

複製代碼

此時咱們就能夠經過url進行模擬了.

注意:

1.urlrewrite.xmlutf-8.因此若是你要在rule上加note標籤爲中文的話,也必定是要utf-8.

2.UrlRewriteFilter 最好是配置在web.xml的前面filter,否則有可能對有些url轉變失去做用.

3.urlrewrite屬性:有僅只有一個,rule屬性::至少一個.

4.在寫rule的時,若是有多個參數時,中間的鏈接符號&應該是&

5.ruleurl重寫規則,from是顯示出來的地址,to是映射的實際地址,$1是重寫參數,它的值與from中的正則表達式是一一對應,能夠爲多個,()裏是匹配的正則表達式在正則表達式^指定字符的串開始,$爲指定結束

6.對於中文參數要使用(.*)做爲參數轉義.

4.重寫url演示

實例1

<rule>
        <from>/page/(.*).html</from>  
        <to>/index.jsp?currentPage=$1</to> </rule>

index.jsp中的內容

  <body>
          <%
              String current = request.getParameter("currentPage");           %>           
         當前頁碼<%=current %>
  </body>

執行效果以下:



實例2

Rule規則

<rule>
        <name>World Rule</name>
        <from>^/user/([a-z]+)/([0-9]+)$</from>
        <to>/index.jsp?nickname=$1&amp;age=$2</to></rule>

index.jsp中的內容

複製代碼

<body>
          <%
              String username = request.getParameter("nickname");              int age = Integer.parseInt(request.getParameter("age"));           %>           
         用戶名: <%=username %> 年齡: <%=age %> <br>
</body>

複製代碼

執行效果以下:


因此,當咱們在url中輸入」http://localhost/urlrewrite/user/dennisit/23」時,實際執行的就是」http://localhost/urlrewrite/index.jsp?nickname=dennisit&age=23」

實例3

同理rule規則以下時

<rule>
        <from>^/page/(.*)$</from>
        <to type="redirect">/page/$1.action</to></rule>

這樣我訪問的:http://localhost/urlrewrite/page/test

則跳轉到:    http://localhost/urlrewrite/page/test.action


實例4
Rule規則

    <rule>
        <from>^/([a-z]+)/([a-z]+)/([a-z]+)$</from>
        <to>/$1.do?method=$2&amp;uuid=$3</to>
    </rule>

index.jsp中添加以下連接:

    <a href="process/show/index">跳轉</a>

當點擊該連接,

地址欄中顯示url是:http://localhost/urlrewrite/process/show/index,

其實際執行路徑是:http://localhost/urlrewrite/process.do?method=show&uuid=index

相關文章
相關標籤/搜索