作为一个程序员,我们对action访问路径非常敏感,但是在开发或者在使用其它系统的时候,发现这些系统中的URL地址是静态的,并不会显示出真正的URL路径,对于刚开始跨入程序员这个领域的人,可能会感觉很苦恼,因为这样就不能根据URL去找到对应的ACTION了,片面的说这只是对一些程序带来的问题,但是对于工作两年程序员来说,影响并不但是,我们先先简单的了解一下使用Url重写能给你网站带来哪些好处:
第一:有利于搜索引擎的抓取,因为现在大部分的搜索引擎对动态页面的抓取还比较弱,它们更喜欢抓取一些静态的页面。而我们现在的页面大部分的数据都是动态的显示的。这就需要我们把动态页面变成静态的页面,有利于搜索引擎的抓取。
第二:让用户更容易理解,很少有用户去关心你网站的页面的地址,但对一般的大中型网站增强可读性还是必须的。这样会让你的网站更加完美。
第三:也是本人认为最重要的,隐藏技术的实现,我们可以通过Url重写可以实现技术的隐藏。不至于暴露你所采用的技术,给一些想攻击你网站的爱好者提供方便。
第四:可以很方便的重用,提高网站的移植性。如果我们后台方法改动的话,可以保证前台的页面部分不用改。这样就提高了网站的移植性。
它虽然有这么多的优点,但是也有一点缺点的,因为它是通过过滤器原理来实现的,就以为着又多了一道访问,会多少影响点访问速度的,不过这个这个可以忽略不计的。
现在UrlRewriter技术有两个技术平台的,一个就是在Java方向的,另一个就是.NET方向的。今天我们讲的是Java方向的应用。
首先让我们了解它的工作原理,说白了它就是一个简单的过滤器(Filter),看看源码你就会很快的明白,它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect()。
下面我们就Url重写技术进行简单应用:
1:下载urlrewrite-3.2.0beta.ja包,并把urlrewrite-3.2.0beta.jar(http://tuckey.org/urlrewrite/) 拷到classpath下。
2:在WEB-INF目录下建一个urlrewrite.xml配置文件。
3:在web.xml配置文件中初始化配置UrlRewriteFilter。在配置文件中加上下面的代码:
1 <!-- 在配置文件中设置 URL Rewrite-->
2 <filter>
3 <filter-name>UrlRewriteFilter</filter-name>
4 <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
5 <init-param>
6 <param-name>logLevel</param-name>
7 <param-value>WARN</param-value>
8 </init-param>
9 </filter>
10 <filter-mapping>
11 <filter-name>UrlRewriteFilter</filter-name>
12 <url-pattern>/*</url-pattern>
13 </filter-mapping>
14 <listener>
15 <context-param>
16 <param-name>contextConfigLocation</param-name>
17 <param-value>/WEB-INF/urlrewrite.xml </param-value>
18 </context-param>
然后就是配置urlrewrite.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>/(.*)/login.htm</from>
<to type="forward">/yui/login.htm?name=$1</to>
</rule>
</urlrewrite>
对于上面的配置,表示在host:port/app之后开始的/(.*)/login.htm都以/yui/login.htm?name=$1的形式请求服务器。
如http://localhost:8080/app/ddd/login.htm其实际请求的url为http://localhost:8080/app/yui/login.htm?name=ddd
在这里需要注意的是,因为程序员在命名的时候容易把单词首字母大写,一定不要把文件名写成urlRewrite.xml,这样即使你加上在启动的服务器的时候还是会报错的,因为源码中必须是全小写的(urlrewrite.xml)且只能放到WEB-INF下面。
<from></from>写上你自己定义的访问地址,通常采用正则表达式的写法;
<to type="forward></to>就是实际的访问地址。
比如我们实际的访问地址是: http://www.phome.asia/forum/list.action?id=16931&page=2而我们想把它重写为http://www.phome.asia/forum/thread/16931.html?page=2。这样看起来比我们实际的要好看的多。我们就应该这样的写:
<rule>
<from></from>^/forum/thread/([0-9]+).html?page=([0-9]+)$
<to type="forward"></to>/forum/list.action?id=$1&page=$2
</rule>
到现在可以看到,项目已经可以使用了,是不是很简单,可能让读者不明白的就是一些正则表达式的配置,那么我先简单的介绍一下常用的正规表示式:
. 匹配除换行符以外的任意字符 \w匹配字母或数字或下划线或汉字
\s匹配任意的空白符 \d匹配数字
\b匹配单词的开始或结束 ^匹配字符串的开始
$匹配字符串的结束
常用的&要用 &来表示。$1,$2代表与你配置正规表达式>/(\w+)/(\w+)/相对应的参数。<to type="forward">默认的是 type="forward"。
另一个常用的规则就是连接外部的网站。就要用到<to type="redirect">。
Java代码
<rule>
<from>^/rss/yahoo\.html$</from>
<to type="redirect">http://add.my.yahoo.com/rss?url= http://feed.feedsky.com/ MySiteFeed
</to>
</rule>
常用的也就这两种方式(forward,redirect)。
这篇文章就写到这里了,希望能给大家带来方便,希望大家以后多多来此博客抢沙发。