Urlrewrite

UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址。

主要优点
一:提高安全性,可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多
二:美化URL,去除了那些比如*.do之类的后缀名、长长的参数串等,可以自己组织精简更能反映访问模块内容的URL
三:更有利于搜索引擎的收入,通过对URL的一些优化,可以使搜索引擎更好的识别与收录网站的信息

使用范围

地址重写一般是用于将动态地址伪静态。如果本身就是静态就没必要了。地址重写后网站制作者可以通过输入地址名直接访问。

具体操作:

1.下载urlrewritefilter-4.0.3.jar包
普通web项目的话直接百度下载就可以了(我的上传里就有)
如果是maven项目:

<dependency>  
<groupId>org.tuckey</groupId>
<artifactId>urlrewritefilter</artifactId>
<version>4.0.3</version>
</dependency>

2.修改web.xml及在WEB-INF里添加urlrewrite.xml
web.xml里添加如下代码(放在所有servlet拦截之前):

<filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
        <!-- 因为urlrewrite.xml只能在web-inf下,所以我们这里可以省略掉urlrewrite.xml的路径配置。 -->
    </filter>
    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>

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">

<!-- Configuration file for UrlRewriteFilter http://www.tuckey.org/urlrewrite/ -->
<urlrewrite>

    <rule>
       <from>/index.html</from>
       <to type="forward">/down/trade?sourceType=pc&amp;pageType=A</to>
    </rule>

</urlrewrite>

forward和redirect都可以用,但forward访问完后还是不会显示真实访问地址,个人感觉好一些
3.前台访问
现在就可以用http://localhost:8080/datasystem/index.html访问所配置的相应后台地址了

注意
rule结点中form的规则默认使用的是正则表达式来匹配的,当用户访问服务器时的URL会与该配置相比较,如果符合规则就会按照下面to结点中的配置对其进行跳转,其默认是forward跳转,还可以是type=redirect ,当然这两者是有区别的

forward: 默认. 请求匹配这个的所有,并且URL使用内部跳转到”to”指定的地址(注意, 这里forward 到的URL 必须和UrlRewriteFilter 位于同一个容器中)。状态码302。临时重定向。

redirect :用Response.Redirect实现,请求匹配所有和这个的, 通知客户端跳转到指定地址,状态码应该是302。

使用urlrewrite时需要注意
1.如果要用&符号,需要用&代替
2.简单起见, 给的配置前面和后面分别加上^, $, 这两个是正则表达式中的强制开始和结尾标志;

  1. 如果使用要记得代码中的url都是编码过的;

  2. contex 是非常重要的, 如果有一个应用的context 是”/myapp”,并且你的请求是”/myapp/somefolder/somepage.jsp”, 容器交给UrlRewriteFilter 的url会是”/somefolder/somepage.jsp”, 这可能难以理解,但是在你的和中不要包含context path, 它是容器负责处理的.

  3. 正则表达式非常复杂灵活, 请阅读java.util.regex.Pattern中的java正则介绍。如果觉得正则难以理解,可以使用通配符方式。

  4. 应用通配符,通配符匹配引擎可以替代正则表达式, 在和中设置match-type是wildcard用以开启支持通配符.(或者设置default-match-type)
    例如:
    /big/url/*匹配/big/url/abc.html但是不匹配/big/url/abc/dir/或/big/url/abc/
    /big/url/**匹配/big/url/abc.html,/big/url/abc/dir/和/big/url/abc/
    也可以和正则的替换一样, 每个*代表一个参数,在和中用$N的方式使用

  5. 可以是null, 意义为: 如果匹配请求不再继续, 相当于没有调用chain.doFilter

补 充:大家可能看到我上面的配置中有个11为^/blog/(\w+)中(\w+)所匹配的内容,如果 有多个根据顺序2...6获取就可以了,需要注意的是在from中需要用()把要匹配的内容括起来才能获取,不然java会抛出异常

参考:https://blog.csdn.net/shandian534/article/details/50059221

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页