最近写项目要完成访问地址的功能,后台使用的是struts2,本来以为struts2应该会提供这样的功能的,但是找了很久都没有找到,结果就看到有人使用urlrewriter来完成这个功能,所以自己就试了下,结果还真的可以,而且还很简单:
1. 我使用的是maven项目,所以直接加上
<dependency> <groupId>org.tuckey</groupId> <artifactId>urlrewritefilter</artifactId> <version>4.0.3</version> </dependency>若是不是使用maven的项目,可以自己去下载这个jar包,而且是可以从svn上检出源码: http://code.google.com/p/urlrewritefilter/downloads/list
2. 在web.xml中加入一个拦截器,放在struts2拦截器的前面,若还加入了字符编码的拦截器的话就要放到最前面:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>j2ee_ttzh</display-name> <!-- url重写start --> <filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> <init-param> <param-name>confPath</param-name> <param-value>/WEB-INF/classes/urlrewrite.xml</param-value> </init-param> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping> <!-- url重写end --> <!-- struts2 拦截器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping> </web-app>3. 新建一个urlrewrite.xml,通过上面web.xml中的配置可以看出这个文件是放在classpath下面的,若是不配置放置的位置,那么就默认在web-inf,可以查看源码验证。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" "http://tuckey.org/res/dtds/urlrewrite3.0.dtd"> <urlrewrite> <rule> <from>/register.html</from> <to type="forward">register!test</to> </rule></urlrewrite>4. 接下来就是访问 register.html 那么就会去访问register这个action里面的test方法