一般在java项目开发中,我们采用struts或者spring作为MVC框架,这两种框架在使用上都是通过配置文件或注解或约定规则来根据url匹配到相应的java类方法,一般情况下,我们采用包名+类名+方法名的形式访问java文件,这样使得我们在查找问题时,能够快速通过url地址找到对应的java类文件,而参数则通过get或者post方式进行传递处理,这种实现方式在一般的后台系统中,特别是业务非常复杂,代码量很大的时候,给我们带来了很大的方便。但如果是面向普通大众客户的web界面,这种实现方式则有比较大的问题。因为页面内容是根据访问参数动态生成,这样则搜索引擎不能抓取,而且也不能进行缓存,那该如何做呢?我们引入了 URLRewrite组件,进行页面的伪静态化,当然也可以更进一步实现真正静态化。
通过URLRewrite实现伪静态化,其实就是对很多大量用户经常访问某些页面,并且页面内容对所有人显示基本上一样的页面进行处理,如一个新闻网站,新闻内容是后台人员不断进行录入的,但前台界面展示时一般采用/20130104/0001.html这样的形式,可以想象的到,不可能每个新闻编辑人员会去直接编写这个html文件,也就是说0001.html文件其实是根据编辑人员录入的内容动态生成的,好了,现在来介绍下如何使用URLRewrite。
1、 下载jar包,或者直接配置POM文件,我这里选择的是4.0.3版本。
<dependency>
<groupId>org.tuckey</groupId>
<artifactId>urlrewritefilter</artifactId>
<version>4.0.3</version>
</dependency>
2、 在WebRoot/WEB-INF/目录下,新建urlrewrite.xml配置文件,该文件用于定义url转换的链接。
3、 在web.xml文件中加入以下:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>WARN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<!-- 拦截所有url -->
<url-pattern>/*</url-pattern>
</filter-mapping>
完成了以上配置,及完成了urlrewrite的主体配置,但这个时候我们还没有配置映射关系,所有请求的url和原来还未发生任何变化,下面就来具体的url转换。
1、普通url转换,如访问user/list.html实际上需要访问的是/user/list.jsp即在urlrewrite.xml中这样配置:
1 <rule>
2 <from>^/user/list.html</from>
3 <to>/user/list.jsp</to>
4 </rule>
当请求/user/list.html这个页面时,实际上相当于请求/user/list.jsp页面
2、带参数的url静态化
例如:要把http://localhost/prjtest/user/view.jsp?cid=1&cname=admin转换成
http://localhost/prjtest/user/view/1_admin.html
在urlrewrite.xml中这样配置:
1 <rule>
2 <from>^/user/view/([0-9]+)_([a-z]+).html$</from>
3 <to>/user/view.jsp?cid=$1&cname=$2</to>
4 </rule>
当请求/user/view/1_admin.html这个页面时,实际上相当于请求/user/list.jsp?cid=1&cname=admin页面