`

java中urlrewrite的配置和使用

阅读更多
这几天因为要做网站中的博客功能,需要对博客的地址进行处理,用到了urlrewrite,逸风在此也给大家简单介绍一下

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 所用的jar包及简单配置.

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

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

    urlrewrite3.2(支持自定义配置文件) 附带修改后的源码

    对上一篇资源的补充(http://download.csdn.net/detail/cbai0722/5217430),有同学提到需要源码,现在打包一并发上来.ant-1.9.1.jar,slf4j-api-1.5.2.jar,slf4j-simple-1.5.2是使用源码的时候的用到的三个包,这三个...

    url rewrite的例子

    每个网页或请求都是一个url...so如果使用apache,则直接在apache中配置Rewrite即可。但是对于没有使用代理,或者不完全要在代理服务器配置Rewrite的web应用,通过第三方Jar包也是可以实现很perfect的rewrite技术的。

    weixin-robot-java:微信公共平台机器人Java SDK

    微信Robot Java借鉴了url rewrite的思想,url rewrite是根据url进行路由,而微信Robot则是根据消息类型和内容进行路由。 整理的流程如下: WexinRobotServlet负责认证和微信消息接收 接收后进行XML解析,构建出 ...

    JessMA Java Web 应用开发框架 (v3.2.2-20130815).pdf

    本开发手册会详细阐述如何在JessMA中整合FreeMarker、Velocity、UrlRewrite、EHCache-Web、Spring、Hibernate和MyBaits等常用框架和组件。 4) 高性能:性能要求是JessMA的硬性指标,从每个模块的设计到每行代码的...

    JavaWeb框架Wint.zip

    wint 是一个基于mvc易用的 java web框架,抛开了struts2 繁琐的配置,结合django,RoR,webx,play等框架的特点,使用约定优于配置的原则,使开发者能快速的搭建web和进行快速开发。 wint提供的主要功能有: 模板与...

    urlrewritefilter-4.0.3.jar

    软件简介 这是urlrewritefilter-...rule结点中from的规则默认使用的是正则表达式来匹配的,当用户访问服务器时的URL会与该配置相比较,如果符合规则就会按照下面to结点中的配置对其进行跳转,其默认是forward跳转。

    UrlRewriter Java v2.0 RC1

    UrlRewriter.NET提供地址重写的功能,它类似于Apache服务器中使用.htaccecc进行地址重写。而且使用本组件,您无需安装任何类似于ISAPI Rewrite filter的ISAPI组件。本组件是免费开源的,遵循MIT-style licence开源...

    hibernate3+struts2+spring2+freemarker 主流技术架构 实例

    包括: +----doc +-----jeecms基础概念.txt ...• 采用伪静态结合页面缓存技术,可自定义路径结构,无需urlrewrite • 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录

    重写:OCPsoft URL重写框架

    一个高度可配置的URL重写工具,适用于Java EE 6+和Servlet 2.5+应用程序,支持与以下组件的集成: CDI 弹簧DI JodaTime配置 Tuckey.org URLRewriteFilter配置 JavaServer Faces(JSF) JavaServer页面(JSP) ...

    一款基于JScript的ASP开源MVC框架

    &gt; 支持多种路由方式,包括404、URL、isapi_URLRewrite,完全自定义的路由配置。URLRoute is Supported(404 Error Page, URL Route,ISAPI_URIRewrite). &gt; &gt; 路由支持REST。REST is Supported. &gt; &gt; 支持类库缓存,...

    ZendFramework中文文档

    7.5.5. 基本 URL 和子目录 7.5.6. Route Types 7.5.6.1. Zend_Controller_Router_Route 7.5.6.1.1. 变量缺省 7.5.6.1.2. 变量请求 7.5.6.2. Zend_Controller_Router_Route_Static 7.5.6.3. Zend_Controller_...

    UrlRewriter.NET-开源

    UrlRewriter.NET是一个用于ASP.NET 1.1-2.0和Java的开源,轻量级,高度可配置的URL重写组件。 它提供了与Apache Web服务器通过mod_rewrite和.htaccess提供的类似的IIS Rewrite功能。

    webx3框架指南PDF教程附学习Demo

    因此,当你使用Webx的时候,你会觉得在很多方面,它和其它开源的框架非常类似。我并不是说所有的框架都一样好,而是说只要假以时日,所有的框架在发展过程中,必然会积聚好的方面,淘汰坏的方面,从而变得足够好。从...

Global site tag (gtag.js) - Google Analytics