现在大部分网站和商城都会用到URL重写,而我也是因为在做电商商城才接触到这个的。URL重写就是用另一种规则来显示原来的URL,方便用户访问,同时也屏蔽了一些信息。这里先说说它的好处吧。在开发过程中,我们经常会遇到一些参数很多的URL。这样,一方面,它看起来令人不安。另一方面,有些信息直接显示在URL上,多少有些安全。性问题。使用URL重写,可以将带参数的URL以更规则的方式体现出来,比如:/demoAction?id=1==>/demo1.html还将URL上应该显示的参数传递给Covert,隐藏技术实施和敏感信息。另外,URL重写也有利于搜索引擎的访问。最近项目接触到的URL改写使用了UrlRewrite,主要是利用Filter技术在用户请求时对访问的URL进行处理,从而实现改写功能。下面是UrlRewrite的使用示例(个人认为UrlRewrite的官方文档比较全面,容易理解)UrlRewrite的导入:UrlRewrite的导入非常简单。首先需要在项目包的lib文件夹下添加urlrewrite-3.2.0.jar,然后声明FilterUrlRewriteFilterorg.tuckey.web.filters.urlrewrite.UrlRewriteFilterUrlRewriteFilter/*REQUESTFORWARD声明过滤器后,需要在WEB-INF目录下新建urlrewrite.xml文件该文件是UrlRewrite的规则制定文件,后续主要通过配置URL重写来完成。至此,UrlRewrite的导入完成。UrlRewrite导入成功后,主要通过在urlrewrite.xml中添加规则来实现URL重写。下面是一些常用的规则。^/demo/(\w+).html$/Struts/$1rule是urlrewrite下的子节点,即urlrewrite的主规则节点,包含from和to两个子节点,from表示请求的URL,to表示要重定向的真实URL。对于from,UrlRewrite有两种匹配方式,一种是正则表达式匹配,一种是通配符匹配。以上是正则表达式匹配。匹配时,可以将匹配部分的正则提取为参数,作为上述规则设置传递,当客户端访问的URL为http://127.0.0.1:8080/Struts/demo/hello.html时,因为匹配的部分是hello,所以跳转到http://127.0.0.1:8080/Struts/hello。当URL规则中有多个正则时,匹配的参数也会相应增加。如:^/demo1/(\w+)/(\w+).html$/Struts/$1.action?age=$2rule默认的匹配方式是正则表达式,但有时也可以通过通配符的形式进行匹配。在编写规则时,只需要在规则中添加一个match-type="wildcard"属性即可。/demo2/*/*/Struts/$1.action?age=$2关于节点,UrlRewrite提供了多种URL跳转方式,例如forward和redirect。这两个方法与大多数MVC框架提供的方法相同,这里不再赘述。UrlRewrite除了支持指定规则的跳转,还支持在匹配规则时执行一个对象的函数^/demo3/(\w+)/(\w+).html$/Struts/$1.action?age=$2如上设置,要实现一个匹配规则是执行某个功能,需要多增加一个run节点,节点上要增加相应的class属性和method属性。同时,对应用的类必须继承RewriteRule类,执行的方法必须传入两个参数,分别是HttpServletRequest和HttpServletResponsepublicclassDemoextendsRewriteRule{publicvoidlog(HttpServletRequestrequest,HttpServletResponseresponse){System.out.println("haha1");}publicvoidlog2(HttpServletRequestrequest,HttpServletResponse}l);}publicvoidlog2(HttpServletRequestrequest,HttpServletResponse}l){out.response}l}方式,当客户端输入的URL第一次匹配指定的规则时,UrlRewrite会执行相应的函数。匹配成功时执行。如果想在每次匹配规则时执行某个功能,可以在urlrewrite中添加class-rule子节点。设置该节点后,每匹配到一条规则就执行一次指定的函数。UrlRewrite除了处理请求的URL外,还提供了在返回页面重写地址的功能。使用rule是对用户输入的url进行处理,但是在开发过程中,经常需要在页面中添加一些url请求。UrlRewrite也可以通过规则重写页面中的URL。如:/(\w+).action\?id=(\w+)$/$1.html/outbound-rule>在UrlRewrite中加入这条规则后,我们在页面中的原地址在页面中显示如下:这样可以隐藏很多开发技术,比较安全。以上是UrlRewrite的一些常见用法。关于UrlRewrite,网上有人说这样会影响性能,因为每次请求都需要重新过滤,不过这个还是见仁见智。毕竟,使用URL重写对URL还是有好处的。UrlRewrite帮助文档:http://pan.baidu.com/s/1c0fg0uc