JSP URL重写-urlrewrite

10 篇文章 0 订阅

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>  
<?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">
	<display-name></display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

	<!-- URL重写配置 -->
	<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><!-- 拦截所有URL -->
	</filter-mapping>
</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>     
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
        "http://tuckey.org/res/dtds/urlrewrite3.2.dtd">

<!--

    Configuration file for UrlRewriteFilter
    http://tuckey.org/urlrewrite/

-->
<urlrewrite>
     <!--自定义匹配-->
     <rule>   
        <!--  <from>^/admin/(.*)(.*)</from>   -->
        <from>admin/([0-9]+)/(.*).shtml/(.*)</from>
        <to>/admin_login.jsp?id=$1&name=$2&keyword=$3</to>  
    </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>  
    <!-- 官方示例-->
    <rule>
        <note>
            The rule means that requests to /test/status/ will be redirected to /rewrite-status
            the url will be rewritten.
        </note>
        <from>/test/status/</from>
        <to type="redirect">%{context-path}/rewrite-status</to>
    </rule>


    <outbound-rule>
        <note>
            The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)
            the url /rewrite-status will be rewritten to /test/status/.

            The above rule and this outbound-rule means that end users should never see the
            url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks
            in your pages.
        </note>
        <from>/rewrite-status</from>
        <to>/test/status/</to>
    </outbound-rule>


    <!--

    INSTALLATION

        in your web.xml add...

        <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>
        </filter-mapping>


     EXAMPLES

     Redirect one url
        <rule>
            <from>/some/old/page.html</from>
            <to type="redirect">/very/new/page.html</to>
        </rule>

    Redirect a directory
        <rule>
            <from>/some/olddir/(.*)</from>
            <to type="redirect">/very/newdir/$1</to>
        </rule>

    Clean a url
        <rule>
            <from>/products/([0-9]+)</from>
            <to>/products/index.jsp?product_id=$1</to>
        </rule>
    eg, /products/1234 will be passed on to /products/index.jsp?product_id=1234 without the user noticing.

    Browser detection//浏览器检测
        <rule>
            <condition name="user-agent">Mozilla/[1-4]</condition>
            <from>/some/page.html</from>
            <to>/some/page-for-old-browsers.html</to>
        </rule>
    eg, will pass the request for /some/page.html on to /some/page-for-old-browsers.html only for older
    browsers whose user agent srtings match Mozilla/1, Mozilla/2, Mozilla/3 or Mozilla/4.

    Centralised browser detection
        <rule>
            <condition name="user-agent">Mozilla/[1-4]</condition>
            <set type="request" name="browser">moz</set>
        </rule>
    eg, all requests will be checked against the condition and if matched
    request.setAttribute("browser", "moz") will be called.

    -->

</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>  
<body>
	Admin Login Page.
	<br>
	<%=request.getParameter("id")%><br>
	<%=request.getParameter("name")%><br>
	<%=request.getParameter("keyword")%>
</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。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值