隨筆-126  評(píng)論-247  文章-5  trackbacks-0


           博客搬家的時(shí)候順便把文章搬過(guò)來(lái),如果看得不是很清楚的,可以前往原博客地址:
           -->URL:http://www.cnblogs.com/fancyzero/archive/2012/06/10/urlrewrite.html 

          環(huán)境:

          Maven 3.0.4
          Urlrewrite 2.5.2
          Myeclipse 8.6.1

          借此機(jī)會(huì)順便提一下 Maven Project 的創(chuàng)建,會(huì)了的朋友或還不想了解 Maven 的朋友,可以略過(guò)創(chuàng)建過(guò)程。

          創(chuàng)建一個(gè) Maven Project:New --> Other --> Maven Project

          在彈出的對(duì)話框里,如果你想修改你項(xiàng)目的存放路徑你可以改一下,其他的默認(rèn),我的所有項(xiàng)目都是存放在默認(rèn)的工作區(qū)下,所以直接點(diǎn)NEXT

          接下來(lái)找到并選擇webapp,其他的默認(rèn),NEXT

           

          填寫你的 groupId、artifactId、version 和 package 信息,然后 Finish

          (Finish 之后myeclipse在創(chuàng)建maven的時(shí)候可能會(huì)彈出錯(cuò)誤框提示,沒(méi)事,不用管它,直接按兩次回車或手動(dòng)關(guān)閉提示框)

           

          下面我簡(jiǎn)單解釋一下 groupId、artifactId、version 和 package:

          groupId:group 翻譯成中文就是組、集團(tuán)的意識(shí),groupId就是這樣一個(gè)組或集團(tuán)的ID標(biāo)識(shí),就拿 Apache 來(lái)說(shuō)好了,Apache 大家都不陌生吧,

                       Apache 官網(wǎng)上有非常多的項(xiàng)目,每個(gè)項(xiàng)目里面肯定能找得到 org.apache.xxxx,而 org.apache 就是這里說(shuō)的 groupId

          artifactId:還是拿 Apache 來(lái)說(shuō),Apache 官網(wǎng)上有非常多的項(xiàng)目,而每個(gè)項(xiàng)目的名字就是這里的 artifactId,換句話說(shuō),artifactId 就是你的項(xiàng)目名

          version:這個(gè)就沒(méi)有什么好解釋的了吧,是項(xiàng)目版本的意思

          package:這個(gè)也沒(méi)什么好說(shuō)的,就是 groupId.artifactId,創(chuàng)建的時(shí)候會(huì)自動(dòng)幫你補(bǔ)全,如果沒(méi)有自動(dòng)幫你補(bǔ)全就自己手動(dòng)敲上去

          好,下面來(lái)看創(chuàng)建出來(lái)的urlrewrite-maven-example的目錄結(jié)構(gòu):

          src/main/resources:用來(lái)存放資源文件(默認(rèn)會(huì)幫你創(chuàng)建這個(gè)資源文件夾)

          src/main/java:用來(lái)存放 java 源碼文件(需要自己手動(dòng)創(chuàng)建)

          src/main/test:用來(lái)存放測(cè)試代碼(需要自己手動(dòng)創(chuàng)建,也有人習(xí)慣命名為:src/test)

          target:是用來(lái)存放 Maven 編譯好的字節(jié)碼的地方

          Maven 的創(chuàng)建就講到這,接著講 urlrewrite,另外為了調(diào)試方便我引進(jìn)了 Ant,即上面的 build.xml,這里我不講它,沒(méi)有影響。

          pom.xml

          <project xmlns="http://maven.apache.org/POM/4.0.0" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
            http://maven.apache.org/maven-v4_0_0.xsd">
            
            <modelVersion>4.0.0</modelVersion>
            <groupId>com.fancy</groupId>
            <artifactId>urlrewrite-maven-example</artifactId>
            <packaging>war</packaging>
            <version>1.0</version>
            <name>urlrewrite-maven-example Maven Webapp</name>
            <url>http://maven.apache.org</url>
            <dependencies>
              <!-- urlrewrite jar -->
              <dependency>
                <groupId>org.tuckey</groupId>
                <artifactId>urlrewrite</artifactId>
                <version>2.5.2</version>
              </dependency>
            </dependencies>
            <build>
              <finalName>urlrewrite-maven-example</finalName>
            </build>
            
          </project>


          web.xml

          <?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">
           
            <!-- 開(kāi)啟URLREWRITE監(jiān)聽(tīng) -->
            <filter>
              <filter-name>UrlRewriteFilter</filter-name>
              <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
              <init-param>
                <param-name>logLevel</param-name>
                <param-value>WARN</param-value>
              </init-param>
            </filter>
            <filter-mapping>
              <filter-name>UrlRewriteFilter</filter-name>
              <url-pattern>/*</url-pattern>
              <dispatcher>REQUEST</dispatcher>
              <dispatcher>FORWARD</dispatcher>
            </filter-mapping>
            
            <!-- 404錯(cuò)誤 -->
            <error-page>
              <error-code>404</error-code>
              <location>/404.jsp</location>
            </error-page>
            
            <!-- 500錯(cuò)誤 -->
            <error-page>
              <error-code>500</error-code>
              <location>/500.jsp</location>
            </error-page>
            
            <welcome-file-list>
              <welcome-file>welcome.jsp</welcome-file>
            </welcome-file-list>
            
          </web-app>


          urlrewrite.xml

          <?xml version="1.0" encoding="utf-8"?>
          <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN" "\\urlrewrite3.2.dtd">
            
          <urlrewrite>
            
            <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(轉(zhuǎn)發(fā)模式)傳參</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中寫絕對(duì)地址</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>

           


          urlrewrite.xml 這個(gè)配置文件一定只能放在 WEB-INF 下,放別的地方,無(wú)論你在web.xml中怎么配置都是不行的,至少現(xiàn)在是不行的。

          所謂重寫,就一定會(huì)有規(guī)則的匹配,這里用到了正則表達(dá)式,方便起見(jiàn),我只用了[A-Za-z0-9]+,簡(jiǎn)單的解釋一下:

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

          a-z:匹配 a 到 z 中的任意一個(gè)字符

          0-9:匹配 0 到 9 的任意一個(gè)字符

          +:至少出現(xiàn)一次,即,一次或一次以上

          合起來(lái) [A-Za-z0-9]+ 的意思就是:匹配一個(gè)任意的英文字母和數(shù)字組合的字符串

          <rule>:自定義匹配規(guī)則

          <note>:注釋,解釋標(biāo)簽

          <from>:定義具體的匹配規(guī)則

          <to>:匹配成功后的目標(biāo)地址

          <to type="">:type的值有兩個(gè),一個(gè)是 forward (轉(zhuǎn)發(fā),參數(shù)不丟失),一個(gè)是 redirect (重定向,地址欄顯示的地址就是目標(biāo)真實(shí)地址)

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

          &amp; :是 & 的實(shí)體名,代表的就是 &,這個(gè)可以在 w3school 中找到:http://www.w3school.com.cn/tags/html_ref_entities.html

          第一個(gè)rule:訪問(wèn) /index.html,實(shí)際上是訪問(wèn)了 /index.jsp

          第二個(gè)rule:訪問(wèn) /xx.action , 實(shí)際上是訪問(wèn)了 view 目錄下的 xx.jsp

          第三個(gè)rule:訪問(wèn) /user/xx/yy/zz.do , 實(shí)際上是訪問(wèn)了 view 目錄下的 parameter 目錄下的 xx.jsp?username=yy&password=zz

          第四個(gè)rule:跟第三個(gè)其實(shí)是一樣的,但是由于是重定向模式,所以地址欄就會(huì)顯示真的是地址

          下面是 測(cè)試的 JSP :

          /welcome.jsp

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html>
           <head>
            <title>Urlrewrite Simple Demo</title>
           </head>
           <body>
            <h3>/welcome.jsp</h3>
            <HR/>
            <p>
             <a href="index.html" target="_blank">/index.html</a>
            </p>
            <p>
             <a href="index.action" target="_blank">/index.action</a>
            </p>
            <p>
             <a href="user/param/fancy/8080.do" target="_blank">/user/param/fancy/8080.do</a>(forward[轉(zhuǎn)發(fā)模式])
            </p>
            <p>
             <a href="admin/param/fancy/8080.do" target="_blank">/user/param/fancy/8080.do</a>(redirect[重定向模式])
            </p>
           </body>
          </html>

           

          /index.jsp

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
           <head>
            <title>Urlrewrite Simple Demo</title>
           </head>
           <body>
            <h3>/index.jsp</h3>
            <h1>Hello Urlrewrite</h1>
           </body>
          </html>


          /view/index.jsp

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
           <head>
            <title>Urlrewrite Simple Demo</title>
           </head>
           <body>
            <h3>/view/index.jsp</h3>
            <h1>Hello Urlrewrite</h1>
           </body>
          </html>

           

          /view/parameter/param.jsp

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
           <head>
            <title>Urlrewrite Simple Demo</title>
           </head>
           <body>
            <h3>/view/parameter/param.jsp</h3>
            <h1>${param}</h1>
           </body>
          </html>


          Run it :

          在 pom.xml 中右鍵,Run as --> Maven install

          下面是生成的 target 資源:

          將 war 文件拷貝到你的 服務(wù)器中,我用的是tomcat,然后啟動(dòng)tomcat:

          如果你是第一次使用 urlrewrite 可能會(huì)拋一個(gè)異常:

          這個(gè)異常信息是說(shuō)系統(tǒng)找不到 tomcat bin 下的 urlrewrite3.2.dtd 文件,解決辦法很簡(jiǎn)單:

          方法一:將 urlrewrite3.2.dtd 放到 urlrewrite.xml 所在的目錄下,即 WEB-INFO 的目錄下

          方法二:將 urlrewrite3.2.dtd 放到 tomcat 的 bin 目錄下,這個(gè)方法一勞永逸,所以我選的是這個(gè)

          urlrewrite3.2.dtd 這個(gè)文件可以在文章的最下面下載,源碼包里我沒(méi)有放這個(gè)文件,沒(méi)問(wèn)題之后,

          訪問(wèn):http://localhost:8080/urlrewrite-maven-example/ 留意地址欄的地址,你會(huì)發(fā)現(xiàn),真實(shí)的地址沒(méi)有被顯示出來(lái),你看到的是偽地址:

           

           

          /index.html

           

          /index.action

           

          /user/param/fancy/8080.do

           

          /user/param/fancy/8080.do , 這次是重定向了,注意留意地址欄地址,這回不再是偽地址了,而是真實(shí)的地址

           

          源碼:http://files.cnblogs.com/fancyzero/urlrewrite-maven-example.zip

          DTD: http://files.cnblogs.com/fancyzero/urlrewrite3.2.dtd.zip



            
          posted on 2012-06-10 07:24 fancydeepin 閱讀(2775) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 始兴县| 寿光市| 来宾市| 宝山区| 屏山县| 温州市| 三江| 阳原县| 江孜县| 青龙| 通化市| 绥棱县| 云南省| 阳原县| 民乐县| 娄烦县| 门头沟区| 宕昌县| 浪卡子县| 达州市| 永康市| 都安| 临朐县| 古交市| 惠水县| 武汉市| 江阴市| 色达县| 普兰店市| 安龙县| 灌南县| 桃源县| 措勤县| 北辰区| 宜黄县| 利川市| 威信县| 石阡县| 区。| 噶尔县| 玉溪市|