JavaWeb开发分享:urlrewriter

52 篇文章 0 订阅
在Java Web开发中,有时候为了提高安全性(隐藏技术的实现,我们可以通过Url重写可以实现技术的隐藏,可以有效的避免一些参数名、ID等完全暴露在用户面前)或者提高网站的移植性和方便用户使用(用户不用关心你网站的页面的地址变更,后台方法改动的话,可以保证前台的页面地址部分不用改)会采用地址重写功能,将动态地址伪静态。这样还可以优化搜索引擎的抓取。
在Java中实现地址重写是通过过滤器常用的forward()和sendRedirect()来实现url重写。实现细节可以参考官方文档: URLRewrite。现在说说最简单的基本实践:简单的三步走。

第一歩:在web应用中导入需要的jar包,使用Maven就是在Maven配置pom.xml加入urlrewrite包依赖。

        <dependency>
            <groupId>org.tuckey</groupId>
            <artifactId>urlrewritefilter</artifactId>
        </dependency>
        <dependency>
            <groupId>ro.isdc.wro4j</groupId>
            <artifactId>wro4j-core</artifactId>
        </dependency>
第二步,使用过滤器自然要在 web.xml中加入filter的配置,filter-mapping的位置要考虑好,通常应该是在比较前面的位置,只在编码和本地化之类的过滤器格式之后。

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

第三步:在WEB-INF目录下建一个urlrewrite.xml文件,通过正则表达式编写地址重写的规则。urlrewrite.xml简单来说就是配置rule和outbound-rule。当用户访问服务器时的URL会与rule结点比较。rule中form的规则默认使用的是正则表达式来匹配的,如果符合规则就会按照下面to结点中的配置对其进行跳转,其默认是forward跳转。当服务器需要给用户返回的页面中的url重写是通过outbound-rule来实现的(页面中必须使用<%= response.encodeURL或者<c:url ),配置规则和rule大致相同。下面给个简单配置例子。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
        "http://www.tuckey.org/res/dtds/urlrewrite3.0.dtd">

<urlrewrite default-match-type="wildcard">
    <!-- 定义struts无关规则 -->
    <rule>
        <from>/</from>
        <to type="redirect" last="true">home</to>
    </rule>
    <rule>
        <from>/j_security_check</from>
        <to>/j_security_check</to>
    </rule>
    <rule>
        <from>/images/**</from>
        <to>/images/$1</to>
    </rule>
    <rule>
        <from>/scripts/**</from>
        <to>/scripts/$1</to>
    </rule>
    <rule>
        <from>/styles/**</from>
        <to>/styles/$1</to>
    </rule>
    <rule>
        <from>/login*</from>
        <to>/login.jsp</to>
    </rule>
    <rule>
        <from>/logout*</from>
        <to>/logout.jsp</to>
    </rule>

    <!-- Struts 去除,加上actino-->
    <rule match-type="regex">
        <from>^([^?]*)/([^?/\.]+)(\?.*)?$</from>
        <to last="true">$1/$2.action$3</to>
    </rule>
    <outbound-rule match-type="regex">
        <from>^(.*)\.action(\?.*)?$</from>
        <to last="<span style="color:#333333;"><span style="font-size:14px;"><span style="font-family:Helvetica,Tahoma,Arial,sans-serif;">true</span></span></span>">$1$2</to>
    </outbound-rule>
</urlrewrite>
大功告成!开发过程中有问题可以把filter的debug level打开,查看更多debug的log分析。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值