网站URL重写(Java UrlRewrite 的使用)

现在大部分的网站和商城都会使用到URL重写,接触到这个,也是因为正在做的电子商务商城。URL重写,是将原有的URL采用另一种规则来显示,使得用户方便访问同时也屏蔽一些信息。

在此说下它的好处,在开发过程中,经常会遇到一些带了一大堆参数的URL,这样子,一方面显得烦乱,另一方面,一些信息直接显示在URL上,会有些安全性问题。使用URL重写,可以使带有参数的URL以一种较规则的方式体现,如:

/demoAction?id=1            ==>            /demo1.html

它也将本该在URL上显示出来的传参给隐蔽起来,隐藏了技术实现和敏感信息。另外,URL重写,也有利于搜索引擎的访问。

最近项目接触到的URL重写采用的是UrlRewrite,它主要是采用Filter技术在用户请求的时候对访问的URL进行处理,来实现重写的作用。

以下是UrlRewrite的使用实例(个人认为,UrlRewrite的官方文档写的还是比较全面易懂的)

UrlRewrite的导入:

UrlRewrite的导入非常简单,首先需在项目的lib文件夹中加入urlrewrite-3.2.0.jar包,然后,在web.xml中声明Filter

 1 <filter>
 2         <filter-name>UrlRewriteFilter</filter-name>
 3         <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
 4     </filter>
 5     <filter-mapping>
 6         <filter-name>UrlRewriteFilter</filter-name>
 7         <url-pattern>/*</url-pattern>
 8         <dispatcher>REQUEST</dispatcher>
 9         <dispatcher>FORWARD</dispatcher>
10     </filter-mapping>
11     

声明完filter后,需要在WEB-INF目录下新建一个urlrewrite.xml文件

1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE urlrewrite
3 PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
4 "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
5 <urlrewrite>
6
7
8 </urlrewrite>

该文件是UrlRewrite的规则制定文件,后续主要通过配置它来进行URL的重写。

至此,UrlRewrite的导入就完成了

UrlRewrite 导入成功后,接下来主要通过在urlrewrite.xml添加规则,就能实现URL的重写了。在此列举一些常用的规则。

1 <rule>
2         <from>^/demo/(\w+).html$</from>
3         <to type="redirect">/Struts/$1</to>
4 </rule>

rule 是urlrewrite下的子节点,是urlrewrite的主要规则节点,在它里面包含from 和to两个子节点,from表示请求的URL,to表示将转到的真实的URL。关于from,UrlRewrite有两种匹配的模式,一种是正则表达式匹配,一种的通配符匹配,如上就是正则表达式匹配。当进行匹配的时候,匹配部分的正则可以被提取为参数进行传递

如上规则设置,当客户端访问的网址是http://127.0.0.1:8080/Struts/demo/hello.html  的时候,因为匹配部分是hello,所以它跳转到的是http://127.0.0.1:8080/Struts/hello 上。当网址规则中有多个正则的时候,匹配的参数也会随之增加。如:

1 <rule>
2         <from>^/demo1/(\w+)/(\w+).html$</from>
3         <to type="redirect" >/Struts/$1.action?age=$2</to>
4 </rule>

rule 的默认匹配方式是正则表达式,但是,有时候也可以以通配符的形式进行匹配。在编写规则的时候,只需要在rule添加一个match-type="wildcard" 的属性即可。

1 <rule match-type="wildcard">
2         <from>/demo2/*/*</from>
3         <to type="redirect">/Struts/$1.action?age=$2</to>
4 </rule>

关于to节点,UrlRewrite提供了多种网址跳转方式,如forward和redirect,这两种方式,和大部分MVC框架提供的功能一样,在此不再赘述。

除了支持指定规则的跳转外,UrlRewrite还支持当匹配规则的时候执行某个对象的某个函数

1 <rule>
2         <from>^/demo3/(\w+)/(\w+).html$</from>
3         <run class="com.sean.action.Demo" method="log" />
4         <to type="redirect" >/Struts/$1.action?age=$2</to>
5 </rule>

如上述设置,要实现匹配规则是执行某个函数,需要添加多一个run节点,在节点上面添加对应的类属性和方法属性。同时,对应的类必须继承RewriteRule类,执行的方法必须传入两个参数,分别是HttpServletRequest 和HttpServletResponse

 1 public class Demo extends RewriteRule{
 2
 3     public void log(HttpServletRequest request,HttpServletResponse response){
 4         System.out.println("haha1");
 5     }
 6
 7     public void log2(HttpServletRequest request,HttpServletResponse response){
 8         System.out.println("haha2");
 9     }
10 }

这样,当客户端输入的网址第一次匹配到指定规则的时候,UrlRewrite就会执行对应的函数,该函数只在第一次匹配成功的时候执行。

如果想要每次匹配规则都执行某函数,可以在urlrewrite添加class-rule子节点,该节点设置后,每次匹配规则后,指定的函数都会执行一次。

1 <class-rule class="com.sean.action.Demo" method="log2"/>

除了对请求的URL进行处理外,UrlRewrite还提供了对返回页面中的地址进行重写的功能。使用rule是对用户输入的url进行处理,但是开发过程中,经常需要在页面中也添加一些网址请求,UrlRewrite可以通过规则,对页面中的网址也进行重写。如:

1 <outbound-rule match-type="regex">
2         <from>/(\w+).action\?id=(\w+)$</from>
3         <to>/$1.html</to>
4 </outbound-rule>

在UrlRewrite中添加该规则后,我们在页面中原本的地址是

可是在页面中显示却成了如下:

这样可以隐藏了许多开发中的技术,较为安全。

以上,就是UrlRewrite的一些常见的用法。关于UrlRewrite,网上也有人说这个会影响性能,因为在每次请求的时候都需要经过换一次过滤,但是这个还是要见仁见智,毕竟,使用URL重写,对网址还是有好处的。

UrlRewrite的帮助文档:http://pan.baidu.com/s/1c0fg0uc

时间: 2024-11-08 05:24:28

网站URL重写(Java UrlRewrite 的使用)的相关文章

JAVA入门学习:网站的URL重写

本文来源:http://www.zretc.com/technologyDetail/462.html Java UrlRewrite 的使用实例 URL重写 现在大部分的网站和商城都会使用到URL重写,接触到这个,也是因为正在做的电子商务商城.URL重写,是将原有的URL采用另一种规则来显示,使得用户方便访问同时也屏蔽一些信息. 在此说下它的好处,在开发过程中,经常会遇到一些带了一大堆参数的URL,这样子,一方面显得烦乱,另一方面,一些信息直接显示在URL上,会有些安全性问题.使用URL重写,

ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置

核心提示:大 家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的 静态生成的文件么,静态文件的生成的优缺有好有坏,对于访问量很大的网站,利用静态文件可提高服务器的运行稳定和速度... 大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一 个一个的静态生成的文件么,静态文件的生成的优缺有好有坏,对于访问量很大的网站,利用

UrlRewrite(URL重写)--ASP.NET中的实现

概述 今天看了下URL重写的实现,主要看的是MS 的URL Rewrite. URL重写的优点有:更友好的URL,支持老版本的URL URL重写的缺点有:最主要的缺点是性能低下,因为如果要支持无后缀的URL(但更多的情况是我们要支持这种方式)就必须在IIS中配置所有的URL(包括js,css,image)都要转发到aspnet_isapi中,解决方法可以参见 慎用url重写:还有一个性能问题是,根据源代码,在匹配url时,用正则表达式尝试匹配每一个规则,直至有一个匹配成功,或都匹配不成功才结束.

URL重写 UrlRewrite

为什么要URL重写? 1.有利于SEO,带参数的URL权重较低:2.地址看起来更正规,推广uid 伪静态:看起来像普通页面,而非动态生成的页面. 原理:在Global.asax的Application_BeginRequest 中读取Request.Url 得到请求的URL(View-3.aspx)   然后用HttpContext.Current.RewritePath(ReWriteUrl)进行重写(也就是交由另外一个页面处理这个请求)(View.aspx?tid=3格式)http://ww

windows2008R2下iis7.5中的url重写(urlrewrite)

以前在windows2003里,使用的是iis6.0,那时常使用的URL重写组件是iisrewrite,当服务器升级到windows2008R2时,IIS成了64位的7.5,结果iisreite组件是32位的,虽然可以设置IIS支持32位程序,不过还是希望找个更好的方法,于是找到了:用于 IIS 7 (x64) 的 Microsoft URL 重写模块 2.0 ,下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=7435.

使用Apachmod_rewrit对URL重写来完成网站URL伪静态化

A pachMod_Rewrit对URL进行重写.linux系统途径通常为 /etc/httpd/conf/httpd.conf第二步首要必需得让服务器支撑mod_rewrit假如你使用的虚拟主机,完成网站伪静态化. 装备办法: 第一步找到apach装备文件httpd.conf文件在conf目录下.请事前问询你主机提供商.翻开httpd.conf找到#LoadModulrewrite_modulmodules/mod_rewrite.so把#去掉 找到A llowOverridNone 改成 A

Url Rewrite 再说Url 重写

前几天看到园子里一篇关于 Url 重写的文章<获取ISAPI_Rewrite重写后的URL>, URL-Rewrite 这项技术早已不是一项新技术了,这个话题也已经被很多人讨论过多次.搜索一下URL-Rewrite可以找到很多URL-Rewrite方面的文章和组件,自己以前也多次接触过这个东东,也来说说吧. ScottGu 有一篇非常经典的 URL-Rewrite Blog Tip/Trick: Url Rewriting with ASP.NET http://weblogs.asp.net

ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL

http://www.cnblogs.com/John-Connor/archive/2012/05/03/2478821.html 引言-- 在初级篇中,我们介绍了如何利用基于ASP.NET MVC的Web程序中的Global文件来简单的重写路由.也介绍了它本身的局限性-依赖于路由信息中的键值对: 如果键值对中没有的值,我们无法将其利用凑出我们想要的URL表达式. 初级篇传送门:使用Global路由表定制URL   在进阶篇中,我们将介绍ASP.NET 路由相关类的基类-抽象类RouteBas

地址重写--Java中urlrewriter的使用

最近公司以前的一个项目需要升级改版,其中的一个模块是使用Struts2做的不需要改动,但是需要将其从之前的项目里面剥离出来,看了看官网,发现所有的链接访问的静态地址,以为是FreeMarker实现的,仔细研究了会发现不是那么回事,原来是伪静态,程序使用了urlrewriter.其实urlrewriter的使用很简单,看看下面你就明白了. urlrewriter简介:url rewrite将我们的动态网页地址转化为静态的地址,如html.shtml,还可以隐藏网页的真正路径,比如:有时候需要将xx