web访问中Urlrewritefilter 对url进行替换配置

1.Urlrewritefilter说明

Urlrewritefilter,通过java的Filter过滤器对URL进行重写,用户得到的全部都是经过处理后的URL地址,本质上通过伪地址进行页面跳转,隐藏真实地址,是Java Web开发中地址隐藏的不二选择。

有以下优势:

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

2.网络资源

1、下载地址 官网:http://tuckey.org/urlrewrite/
2、文档使用说明:http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/4.0/index.html

3.使用步骤

(1)web.xml的配置

导入urlrewrite-2.6.0.jar ,配置web.xml

      <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
        <init-param>
            <param-name>confReloadCheckInterval</param-name>
            <param-value>60</param-value>
        </init-param>
        <init-param>
            <param-name>confPath</param-name>
            <param-value>/WEB-INF/urlrewrite.xml</param-value>
        </init-param>
     </filter>
     
     <filter-mapping>
         <filter-name>UrlRewriteFilter</filter-name>
         <dispatcher>REQUEST</dispatcher>
         <dispatcher>FORWARD</dispatcher>
         <url-pattern>/*</url-pattern>
     </filter-mapping>

注意,要在struts的mapping里面加上,要不然会出错的!这个花了我半天才搞定。还有一点:UrlRewriteFilter要放在struts Filter之前。web.xml里面过滤器需要讲究顺序,一般是这样子的顺序:字符编码过滤器,hibernate open session in view 过滤器,Urlrewrite过滤器,struts过滤器。

eg:

	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
		<init-param>
			<param-name>config</param-name>
			<param-value>struts_config/struts.xml</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>

(2)urlrewrite.xml文件配置

在WEB-INF里面新建urlrewrite.xml文件,该文件为UrlRewriteFilter的配置文件,通过在里面定义rule规则对URL进行更替。

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN" 
        "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">
<urlrewrite>
	<!-- 配置映射规则 rule是url重写规则,from是显示出来的地址, 
	     to是映射的实际地址,$1是重写参数,可以为多个,()里是匹配的正则表达式. -->
	<rule>
        <!-- 地址栏显示的地址 -->
        <from>/anything</from>
        <!-- 真实的请求地址 -->
        <to>/url/test.action</to>
    </rule>
</urlrewrite> 
以上只是简单的实现,具体的替换需要用到正则表达式。
如下例:

    <rule>  
        <from>^/newsInfo-list-([0-9]+).shtml$</from>  
        <to>/NewsInfo.do?method=list&mod_id=$1</to>  
    </rule>  
    <outbound-rule>  
        <from>/NewsInfo.do\?method=list&mod_id=([0-9]+)$</from>  
        <to>/newsInfo-list-$1.shtml</to>  
    </outbound-rule> 
再如下例:
	<rule >
		<from>^/(.*!\w*)$</from>
		<to>$1.action</to>
	</rule>

需要注意的地方是:用括号括起来的正则表达式为变量,如to标签里面的$1表示的是上面from里面的第一个括号内容。url里面的参数间隔符 ‘&’应该写为‘&amp;’。

值得注意的是<outbound-rule>标签,可以使用该标签替换页面里面的url。

简单的正则表达式:

. 匹配除换行符以外的任意字符
      \w 匹配字母或数字或下划线或汉字
      \s 匹配任意的空白符
      \d 匹配数字
      \b 匹配单词的开始或结束
      ^ 匹配字符串的开始
      $ 匹配字符串的结束

(3)JSP中使用如下地址

 <c:url var="url_1001001000" value="/NewsInfo.do?method=list&mod_id=1001001000" />
    <li><a href="${url_1001001000}">测试地址</a></li>
官网文档中提供如下使用方式:
Using the example above JSP's with the code 
<a href="<%= response.encodeURL("/world.jsp?country=usa&city=nyc") %>">nyc</a> 
will output 
<a href="/world/usa/nyc">nyc</a>

Or JSTL 
<a href="<c:url value="/world.jsp?country=${country}&city=${city}" />">nyc</a> 
will output 
<a href="/world/usa/nyc">nyc</a>

Note, If you are using JSTL (ie, <c:url) this will work also.

(4)基本原理

jsp页面地址--> 服务器filter过滤 --> 调用urlrewrite.xml映射规则  --> 服务器响应 --> 转换成伪地址  


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值