1、struts2的版本要高于2.1.8.1
2、需要的jar包有:struts.jar,struts2-convention-plugin-2.1.8.1.jar,struts2-core-2.1.8.1.jar,struts2-dojo-plugin-2.1.8.1.jar,struts2-embeddedjsp-plugin-2.1.8.1.jar,struts2-spring-plugin-2.1.8.1.jar,xwork-core-2.1.6.jar,urlrewrite-3.2.0.jar,aspectjweaver.jar,aspectjrt.jar,aspectjlib.jar,asm-util-2.2.3.jar,asm-commons-2.2.3.jar
3、需要替换struts2 listener:org.apache.struts2.dispatcher.FilterDispatcher 为:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
并为其添加如下参数:
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping>
4、web.xml的编写:
a,请保持与struts2对web.xml的配置建议,即:servlet,filter,listener,..
b,其中listener:
1、org.apache.struts2.dispatcher.ActionContextCleanUp
2、其他listener,如:SiteMesh,apache titles,CharacterEncodingFilter,UrlRewriteFilter......
3、org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
5、完整的web.xml配置内容如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value> WEB-INF/applicationContext.xml </param-value> </context-param> <session-config> <session-timeout>30</session-timeout> </session-config> <servlet> <servlet-name>LoginGame</servlet-name> <servlet-class>com.xz.LoginValidationServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginGame</servlet-name> <url-pattern>/loginGame</url-pattern> </servlet-mapping> <filter> <filter-name>struts-cleanup</filter-name> <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class> </filter> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <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> <filter-name>UrlFilter</filter-name> <filter-class>com.xz.UrlFilter</filter-class> </filter> <filter> <filter-name>GameFilter</filter-name> <filter-class>com.xz.GameFilter</filter-class> </filter> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- mappings --> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts-cleanup</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping> <filter-mapping> <filter-name>UrlFilter</filter-name> <url-pattern>/member/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>GameFilter</filter-name> <url-pattern>/game/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping> <!-- contextConfigLocation param loaded class --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>com.xz.listener.OfficeListener</listener-class> </listener> <!-- welcome list --> <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>DepositsServlet</servlet-name> <url-pattern>/deposits</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- exception pages --> <error-page> <error-code>404</error-code> <location>/404.jsp</location> </error-page> <error-page> <error-code>403</error-code> <location>/403.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/500.jsp</location> </error-page> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/500.jsp</location> </error-page> </web-app>
6、urlrewrite.xml的编写示例:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN" "http://tuckey.org/res/dtds/urlrewrite3.2.dtd"> <!-- Configuration file for UrlRewriteFilter http://tuckey.org/urlrewrite/ --> <urlrewrite decode-using="utf-8"> <rule> <from>^/message-u-(.*)\.html$</from> <to>/testAction.do?username=$1</to> </rule> <rule> <from>^(.*)/a-([0-9]+)\.html$</from> <to>/index.jsp?fid=$2</to> </rule> <rule> <from>^/b-(username|fid)-([0-9]+)\.html</from> <to>/index2.jsp?$1=$2</to> </rule> <rule> <from>^(.*)/forum-([0-9]+)-([0-9]+)\.html</from> <to>/forumdisplay.jsp?fid=$2&page=$3</to> </rule> <rule> <from>^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html</from> <to>/viewthread.jsp?tid=$2&extra=page\%3D$3&page=$4</to> </rule> <rule> <from>^(.*)/tag-(.+)\.html</from> <to>/tag.jsp?name=$2</to> </rule> <rule> <from>^(.*)/space-(username|uid)-(.+)\.html$</from> <to>/space.jsp?$2=$3</to> </rule> <rule> <from>^/archiver/fid-([0-9]+)\.html$</from> <to>/archiver/index.jsp?fid=$1</to> </rule> <outbound-rule> <note> The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url) the url /rewrite-status will be rewritten to /test/status/. The above rule and this outbound-rule means that end users should never see the url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks in your pages. </note> <from>/rewrite-status</from> <to>/test/status/</to> </outbound-rule> </urlrewrite>