现在的位置: 首页 > 综合 > 正文

JSP URL重写-urlrewrite

2014年11月25日 ⁄ 综合 ⁄ 共 8435字 ⁄ 字号 评论关闭

http://blog.csdn.net/mr_tank_/article/details/11892965

URL重写的目的不言而喻,首先引入urlrewrite-4.0.0.jar【或者其他版本】包,可以从官方下载。

1、web.xml【官方配置】

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  6.     <display-name></display-name>  
  7.     <welcome-file-list>  
  8.         <welcome-file>index.jsp</welcome-file>  
  9.     </welcome-file-list>  
  10.   
  11.     <!-- URL重写配置 -->  
  12.     <filter>  
  13.         <filter-name>UrlRewriteFilter</filter-name>  
  14.         <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>  
  15.         <init-param>  
  16.             <param-name>logLevel</param-name>  
  17.             <param-value>WARN</param-value>  
  18.         </init-param>  
  19.     </filter>  
  20.     <filter-mapping>  
  21.         <filter-name>UrlRewriteFilter</filter-name>  
  22.         <url-pattern>/*</url-pattern><!-- 拦截所有URL -->  
  23.     </filter-mapping>  
  24. </web-app>  

2、urlrewrite.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"  
  3.         "http://tuckey.org/res/dtds/urlrewrite3.2.dtd">  
  4.   
  5. <!--  
  6.   
  7.     Configuration file for UrlRewriteFilter  
  8.     http://tuckey.org/urlrewrite/  
  9.   
  10. -->  
  11. <urlrewrite>  
  12.      <!--自定义匹配-->  
  13.      <rule>     
  14.         <!--  <from>^/admin/(.*)(.*)</from>   -->  
  15.         <from>admin/([0-9]+)/(.*).shtml/(.*)</from>  
  16.         <to>/admin_login.jsp?id=$1&name=$2&keyword=$3</to>    
  17.     </rule>     
  1.     <!-- 官方示例-->  
  2.     <rule>  
  3.         <note>  
  4.             The rule means that requests to /test/status/ will be redirected to /rewrite-status  
  5.             the url will be rewritten.  
  6.         </note>  
  7.         <from>/test/status/</from>  
  8.         <to type="redirect">%{context-path}/rewrite-status</to>  
  9.     </rule>  
  10.   
  11.   
  12.     <outbound-rule>  
  13.         <note>  
  14.             The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)  
  15.             the url /rewrite-status will be rewritten to /test/status/.  
  16.   
  17.             The above rule and this outbound-rule means that end users should never see the  
  18.             url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks  
  19.             in your pages.  
  20.         </note>  
  21.         <from>/rewrite-status</from>  
  22.         <to>/test/status/</to>  
  23.     </outbound-rule>  
  24.   
  25.   
  26.     <!--  
  27.   
  28.     INSTALLATION  
  29.   
  30.         in your web.xml add...  
  31.   
  32.         <filter>  
  33.             <filter-name>UrlRewriteFilter</filter-name>  
  34.             <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>  
  35.             <init-param>  
  36.                 <param-name>logLevel</param-name>  
  37.                 <param-value>WARN</param-value>  
  38.             </init-param>  
  39.         </filter>  
  40.         <filter-mapping>  
  41.             <filter-name>UrlRewriteFilter</filter-name>  
  42.             <url-pattern>/*</url-pattern>  
  43.         </filter-mapping>  
  44.   
  45.   
  46.      EXAMPLES  
  47.   
  48.      Redirect one url  
  49.         <rule>  
  50.             <from>/some/old/page.html</from>  
  51.             <to type="redirect">/very/new/page.html</to>  
  52.         </rule>  
  53.   
  54.     Redirect a directory  
  55.         <rule>  
  56.             <from>/some/olddir/(.*)</from>  
  57.             <to type="redirect">/very/newdir/$1</to>  
  58.         </rule>  
  59.   
  60.     Clean a url  
  61.         <rule>  
  62.             <from>/products/([0-9]+)</from>  
  63.             <to>/products/index.jsp?product_id=$1</to>  
  64.         </rule>  
  65.     eg, /products/1234 will be passed on to /products/index.jsp?product_id=1234 without the user noticing.  
  66.   
  67.     Browser detection//浏览器检测  
  68.         <rule>  
  69.             <condition name="user-agent">Mozilla/[1-4]</condition>  
  70.             <from>/some/page.html</from>  
  71.             <to>/some/page-for-old-browsers.html</to>  
  72.         </rule>  
  73.     eg, will pass the request for /some/page.html on to /some/page-for-old-browsers.html only for older  
  74.     browsers whose user agent srtings match Mozilla/1, Mozilla/2, Mozilla/3 or Mozilla/4.  
  75.   
  76.     Centralised browser detection  
  77.         <rule>  
  78.             <condition name="user-agent">Mozilla/[1-4]</condition>  
  79.             <set type="request" name="browser">moz</set>  
  80.         </rule>  
  81.     eg, all requests will be checked against the condition and if matched  
  82.     request.setAttribute("browser", "moz") will be called.  
  83.   
  84.     -->  
  85.   
  86. </urlrewrite>  

3、项目结构:

4、admin_login.jsp页面代码:

  1. <body>  
  2.     Admin Login Page.  
  3.     <br>  
  4.     <%=request.getParameter("id")%><br>  
  5.     <%=request.getParameter("name")%><br>  
  6.     <%=request.getParameter("keyword")%>  
  7. </body>  

测试结果:

http://123.125.115.53/view/1002788.html?fromTaglist

URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是“UserProfile.aspx?ID=1”那么它可以被重写成
“UserProfile/1.aspx”,这样的URL,这样的网址可以更好的被网站所阅读。
如果浏览器不支持Cookie或用户阻止了所有Cookie,可以把会话ID附加在HTML页面中所有的URL上,这些页面作为响应发送给客户。这样,当用户单击URL时,会话ID被自动作为请求行的一部分而不是作为头行发送回服务器。这种方法称为URL重写(URL rewriting)。
一般来说,URL重写是支持会话的非常健壮的方法。在不能确定浏览器是否支持Cookie的情况下应该使用这种方法。然而,使用URL重写应该注意下面几点:
1.如果使用URL重写,应该在应用程序的所有页面中,对所有的URL编码,包括所有的超链接和表单的action属性值。
2.应用程序的所有的页面都应该是动态的。因为不同的用户具有不同的会话ID,因此在静态HTML页面中无法在URL上附加会话ID。
3.所有静态的HTML页面必须通过Servlet运行,在它将页面发送给客户时会重写URL。

 

抱歉!评论已关闭.