`

java中urlrewrite的配置和使用

 
阅读更多

官方最新包: http://tuckey.org/urlrewrite/
<dependency>
    <groupId>org.tuckey</groupId>
    <artifactId>urlrewritefilter</artifactId>
    <version>4.0.3</version>
</dependency>




一个简明的教程:
http://www.cnblogs.com/stream1/archive/2012/06/14/2549986.html

http://www.chenzongyong.cn/article-detail-article_id-78.html
urlrewrite顾名思义,就是对URL进行重写,用户得到的全部都是经过处理后的URL地址,这样做我觉得好处有三:
一:提高安全性,可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多
二:美化URL,去除了那些比如*.do之类的后缀名、长长的参数串等,可以自己组织精简更能反映访问模块内容的URL
三:更有利于搜索引擎的收入,通过对URL的一些优化,可以使搜索引擎更好的识别与收录网站的信息

首先我们在web.xml中加入如下配置
<!-- url地址重写 -->
    <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>/blog/*</url-pattern>
    <!--
    可以省略
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    -->
    </filter-mapping>

  
    这里我是要做用户博客的功能,用户博客的地址格式为:http://www.xxx.com/blog/+用户自定义的个性地址,而我实际要做的是通过用户的个性地址来查询用户博客的相关信息后转到用户的博客主页,实际要调用的地址为http://www.xxx.com/cblog.do?action=forwardIndex&hostUrl=用户自定义的地址,为了给用户好的体验所有我们需要用到urlrewrite来对地址栏的:http://www.xxx.com/blog/+用户自定义的个性地址 进行转换,已达到请求真实地址的目的。
下面我们需要在WEB-INF下建立一个xml文件来配置urlrewrite的规则,建立的xml的文件名建议为:urlrewrite.xml,全部小写,因为urlrewrite.xml实现时就全部是小写,如果定义的是别的名字的话,需要在web.xml中进行加载,不然不会自动加载
我定义的xml的文件的内容如下
<?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>
    <from>^/blog/(\w+)</from>
        <to type="forward">/cblog.do?action=forwardIndex&amp;hostUrl=$1</to>
    </rule>
</urlrewrite>


启动项目,如果我在地址栏输入http://localhost:8080/test/blog/czykeith
那么我实际请求的地址是:http://localhost:880/test/cblog.do?action=forwardIndex&hosturl=czykeith

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

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

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

permanent-redirect: 永久重定向。状态码301。相当于做了以下事情

      response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);.

      response.setHeader(“Location”, [<to />指定的值]);



passthrough: 和forward 相同,具体区别我也不清楚。



temporary-redirect:临时重定向。状态码302。 相当于做了以下事情
response.setStatus(HttpServletResponse. SC_MOVED_TEMPORARILY);
response.setHeader(“Location”, [<to />指定的值]);


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

3. 如果使用<outbound-rule>要记得代码中的url都是编码过的;

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

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

6. 应用通配符,通配符匹配引擎可以替代正则表达式, 在<condition>和<rule>中设置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/
也可以和正则的替换一样, 每个*代表一个参数,在<set>和<to>中用$N的方式使用

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


补充:大家可能看到我上面的配置中有个$1 ,还不明白是什么意思,我说明一下,$1为<from>^/blog/(\w+)</from>中(\w+)所匹配的内容,如果有多个根据顺序$2...$6获取就可以了,需要注意的是在from中需要用()把要匹配的内容括起来才能获取,不然java会抛出异常
分享到:
评论

相关推荐

    java urlrewrite jar及简单配置

    Java URLRewrite是一个非常有用的库,它主要...总之,Java URLRewrite是一个强大的工具,可以帮助开发者实现URL重写和管理,提高网站的可维护性和用户体验。正确理解和使用它可以为你的Java Web应用带来极大的便利。

    java urlrewrite解决默认页问题

    在J2EE项目中使用URL重写(URL Rewrite)来优化URL结构,使其更加简洁、友好是常见的做法。然而,在实施过程中可能会遇到一些问题,比如默认页面的处理。本文将详细介绍如何通过Java URL Rewrite解决默认页面问题。 ...

    urlrewrite 3.2.0 java包

    URLRewrite 提供了一个调试模式,通过在配置文件中启用`debug="true"`,可以在服务器日志中看到详细的重写过程,方便调试和优化规则。 ### 6. 注意事项 - 配置文件的改动需要重启Web应用服务器才能生效。 - 正确...

    URLRewrite配置和使用[借鉴].pdf

    在本文中,我们将深入探讨URLRewrite的配置和使用方法。 首先,为什么要使用URLRewrite?通常有三个主要原因: 1. **搜索引擎友好**:搜索引擎更倾向于抓取简洁、有意义的URL,URL重写可以使得动态参数化的URL变得...

    urlrewrite 支持自定义多配置文件(*通配符)

    现在对urlrewrite-3.2的源码进行了修改,使它能够支持多文件和通配符的形式加载自定义配置文件,即可以进行如下的配置: &lt;param-name&gt;confPath &lt;param-value&gt;/WEB-INF/urlrewrite/urlrewrite.xml /urlrewrite_*....

    urlrewrite包和配置文件

    在web.xml中配置UrlRewriteFilter,意味着我们需要声明一个过滤器条目,指定它的类名(`org.tuckey.web.filters.urlrewrite.UrlRewriteFilter`)以及配置文件的位置(通常是在&lt;context-param&gt;`中指定的`urlrewrite....

    urlrewrite地址重写实例配置说明

    以上只是URLRewrite配置的一些基本示例,实际上它的规则配置非常灵活,可以满足各种复杂的URL处理需求。在实践中,可以根据实际项目需求编写更具体的规则,以达到理想的效果。 在提供的压缩包文件中,"urlrewrite...

    urlrewrite-maven-example.zip

    **URLRewrite配置** 在`urlrewrite.xml`中,规则通常由以下部分组成: 1. **Condition**:条件语句,如`&lt;when&gt;`标签,可以基于HTTP请求的各种属性(如请求方法、请求参数、请求URI等)进行匹配。 2. **Rule**:...

    urlrewrite3.04的demo

    `urlrewrite`框架是Java Web开发中强大的URL管理工具,它提供了灵活的URL重写和重定向能力,有助于提升网站的用户体验和SEO效果。通过Eclipse工程的示例,开发者可以直观地学习和实践URL重写技术,进一步提升项目的...

    URLrewrite-实例

    集成`URLrewrite`到Java Web应用中,通常需要在web.xml中配置Filter,指定`urlrewrite.xml`的位置,然后在Servlet容器启动时加载配置: ```xml &lt;filter-name&gt;UrlRewriteFilter &lt;filter-class&gt;org.tuckey.web....

    网站安全urlrewrite教程和jar包

    `urlrewrite`是一个流行的开源Java过滤器,它基于Apache的`Tuckey URLRewriteFilter`,用于在Servlet容器(如Tomcat)中实现URL重写规则。这个jar包提供了强大的配置灵活性,使得开发者能够轻松地定义各种重写规则。...

    urlrewrite

    下面是一个简单的URLRewrite配置示例: ```xml ^/oldpath/(.*)$ &lt;to type="redirect"&gt;/newpath/$1 ``` 这个规则会将所有以`/oldpath/`开头的请求重定向到`/newpath/`下对应的部分。 总结 URLRewrite作为Java ...

    java urlrewrite 实现伪静态化 demo源码

    在这个"java urlrewrite 实现伪静态化 demo源码"中,我们可以深入理解如何使用URLRewrite框架来转化动态URL为更加友好的静态形式。 URLRewrite的核心概念是规则配置,通过定义一系列规则,可以将带有参数的动态URL...

    URLRewrite帮助文档

    ### URLRewrite使用帮助文档 #### 一、URLRewriteFilter简介 URLRewriteFilter是一个功能强大的Web过滤器,主要用于实现URL的改写操作。它能够帮助开发者将动态URL转换成静态URL,这对于提高用户体验、优化SEO...

    urlrewrite_demo

    在`urlrewrite_demo`项目中,可能包含了示例代码、配置文件和其他辅助资源,你可以通过查看这些文件来学习如何在实际项目中使用`URLRewriteFilter`。例如,项目可能包含了一个简单的Java控制器,展示了如何配合过滤...

    UrlRewrite例子

    UrlRewrite是一个强大的URL重写工具,常用于Java Web应用中,尤其是与Struts2框架结合使用时,能够帮助开发者优化URL结构,提高网站的SEO友好性和用户体验。在这个"UrlRewrite例子"中,我们将深入探讨UrlRewrite的...

    urlrewrite静态页面的使用例子

    在本文中,我们将深入探讨如何使用`urlrewrite`框架来实现静态页面的转换,这是一个在J2EE环境中常用于URL重写和管理的工具。`urlrewrite`框架可以帮助开发者优化URL结构,使其更加用户友好,同时也便于搜索引擎优化...

    UrlRewrite实现伪静态

    4. **UrlRewrite配置**: - **添加依赖**:首先,需要在项目中引入UrlRewriteFilter的依赖,如果是Maven项目,可以在pom.xml中添加对应的dependency。 ```xml &lt;groupId&gt;org.tuckey &lt;artifactId&gt;...

    urlrewrite 4.0.3 jar包.rar

    总结起来,`URLRewrite 4.0.3`是一个强大的URL管理工具,它通过灵活的配置,可以帮助Java Web开发者优化URL结构,提高应用的可用性和安全性。理解并熟练运用其配置规则,将对Web应用的开发和维护带来极大的便利。

Global site tag (gtag.js) - Google Analytics