url rewrite和struts2整合
- 格式:docx
- 大小:37.94 KB
- 文档页数:3
修改struts2显示的URL后缀为.action为.jsp正在用SSH(struts2.0+spring3.0+hibernate2.0)开发一个项目,但是struts2.0 请求action 后转到的页面的后缀都成了XXX_XXXX.action (我用的通配符设置的action).看着很是不习惯,需要修改(前台的页面显示需要数据库中的数据,所以显示之前必须访问数据库!!)解决方案:1,开始想用Ajax技术。
来取得数据库的数据。
但一旦数据量过大或过于凌乱,则是个大问题!2,由于struts2.0 访问数据库之后,页面显示的url 都是访问的action 的名字。
现在考虑修改struts2.0的拦截器的拦截后缀。
(默认为.action,现想修改为.jsp)如此以来,则前台的URL 就不会出现XXX_XXXX.action ,而是XXX.jsp.查阅资料:得到:可以在 struts.xml 配置文件中修改拦截器的拦截属性:修改struts.xml文件,在<struts></struts>中加入下面这句话。
Xml代码1.<constant name="struts.action.extension"value="action, jsp"/>view plaincopy to clipboardprint?1.<constant name="struts.action.extension"value="action, jsp"/>如此以来,strtus2.0 就开始拦截后缀为 .action 和 .jsp 的请求。
例:如果访问的页面为 index.jspstruts.xml 代码为Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<!DOCTYPE struts PUBLIC3."-//Apache Software Foundation//DTD Struts Configuration 2.0//E N"4."/dtds/struts-2.0.dtd">5.<struts>6.<!-- 程序国际化指定国际化资源文件 -->7.<constant name="struts.custom.i18n.resources"8.value="ApplicationResources" />9.<constant name="struts.i18n.encoding" value="gb2312" />10.<constant name="struts.i18n.reload" value="false">< /constant>11.<constant name="struts.action.extension" value="acti on,jsp" />12.<!-- 设置上传文件时不要T omcat的临时路径,使用设置的值 -->13.<constant name="struts.multipart.saveDir" value="/te mp" />14.<!-- 设置上传文件大小 -->15.<constant name="struts.multipart.maxSize" value="52 4280" />16.<package name="outlook"extends="struts-default">17.<global-results>18.<!-- 下面定义的结果对所有的Action都有效 -->19.<result name="exception">/error.jsp</result>20.</global-results>21.<global-exception-mappings>22.<!-- 指Action抛出Exception异常时,转入名为exception的结果。
一.struts 2 与spring2struts2 本身就采用了类似于spring的IOC容器机制,可以利用struts2官方提供的插件struts2-spring-plugin-2.0.11.1.jar,直接与spring进行整合,配置文件中只需要设置struts.objectFactory=spring这样,就将struts2的对象管理交给了spring2的IOC容器。
在struts.xml中配置的action<package name="maintaince" extends="struts-default"><action name="serverInfoList" class="serverInfoService" method="getAllServersInfo"><result name="list">/jsp/server_info/server_info_list.jsp</result></action>在spring的配置文件中配置的bean<bean id="serverInfoService" class="com.wod.service.impl.ServerInfoServiceImpl"><property name="serverInfoDao" ref="serverInfoDao"/><property name="sib" ref="serverInfoBean"/></bean>可以看出,struts2可以直接只用在spring2中配置的bean,引用过来作为action。
Spring 和struts 整合的三种方式。
1,使用Spring 的ActionSupport2, 使用Spring 的DelegatingRequestProcessor 类。
3,全权委托。
无论用那种方法来整合第一步就是要为struts来装载spring的应用环境。
就是在struts 中加入一个插件。
struts-config.xml中<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/> </plug-in>spring 的配置文件被作为参数配置进来。
这样可以省略对web.xml 文件中的配置。
确保你的applicationContext.xml 在WEB-INF目录下面1,使用Spring的ActionSupport .Spring 的ActionSupport 继承至org.apache.struts.action.ActionActionSupport的子类可以或得WebApplicationContext类型的全局变量。
通过getWebApplicationContext()可以获得这个变量。
这是一个servlet 的代码:public class LoginAction extends org.springframework.web.struts.ActionSupport {public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub//获得WebApplicationContext 对象WebApplicationContext ctx = this.getWebApplicationContext();LoginDao dao = (LoginDao) ctx.getBean("loginDao");User u = new User();u.setName(loginForm.getName());u.setPwd(loginForm.getPwd());if(dao.checkLogin(u)){return mapping.findForward("success");}else{return mapping.findForward("error");}}}applicationContext.xml 中的配置<beans><bean id="loginDao" class="com.cao.dao.LoginDao"/></beans>这种配置方式同直接在web.xml文件配置差别不大。
Spring学习之Spring与Sturts2的整合●单个Struts2操作:通常web客户端访问web服务器要经过拦截器到达action,然后在action中进行一系列的操作,比如访问数据库,转发到目标页面:例如:定义一个TestAction extends ActionSourpport{}⏹需要在struts.xml文件中配置:<action name=”test” class=”TestAction的全限定名称”><result name=”success”>/test.jsp</result></action>⏹在web.xml文件中需要配置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></filter-mapping>●单个Spring操作Spring和Struts2整合操作:由Spring定义TestAction:<bean id=”test”class=”TestAction类的全限定没名称”></bean>当然,在测试的时候,在Spring容器中获取一个对象需要先获取Spirng的IOC容器,然后在容器中获取目标对象首先获取Spring的IOC容器ApplicationContext ac = new ClassPathXmlApplicationContext(“applicationContext.xml”);//然后获取TestAction对象TestAction ta = (TestAction) ac.getBean(“test”);然后就可以使用这个对象了,但是,在一个web应用中,只能使用一个Spring的IOC 容器,如何才能使web的多个业务层使用同一个IOC容器呢,这就需要在web.xml文件中配置Spring的初始化IOC容器的监听器:是在整个web应用中都可以使用<listener><listener-class>org.springframework.web.context.ContextLoaderListener></listener-class> </listener><context-param><param-name>contextConfigLoaction></param-name><param-value>/WEB-INF/classes/applicationContext.xml</param-value>这里是applicationContext.xml位置</context-param>在web.xml文件中配置Spring的初始化IOC容器的监听器,就可以使整个web应用中都共享一个Spring的IOC容器,这样使用注解就可以定义一个bean,如果一个对象需要属性,就使用@Resource给对象注入属性这样,如果需要属性的时候,就可以拿来直接使用:当然也可以这样使用:配置web.xml文件:<?xml version="1.0"encoding="UTF-8"?><web-app version="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><!-- 配置Spring的IOC初始化容器配置IOC初始化容器就是为了是整个web应用共用一个Sprig的IOC容器,因为整个容器只能有一个,并且可以在整个web应用中使用--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param>采用注解,在applicationContext.xml文件中只要配置组件扫描在TestAction中属于控制层:使用@Controller(“prototype”)多例形式package com.workit.acton;import javax.annotation.Resource;import javax.servlet.ServletContext;import org.apache.struts2.ServletActionContext;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import org.springframework.web.context.support.WebApplicationContextUtils;import com.opensymphony.xwork2.ActionSupport;import erService;@SuppressWarnings("serial")@Controller("testAction")@Scope("prototype")public class TestAction extends ActionSupport{@Resource //给TestAction注入userService属性private UserService userService; //前提是这个UserService类要交给Spring容器管理@Overridepublic String execute() throws Exception {System.out.println("TestAction.execute()");System.out.println("\n============================\n");System.out.println(userService);userService.printInfo();//获取ServletContextServletContext application = ServletActionContext.getServletContext();//获取Spring的ioc容器ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(application);System.out.println("在整个应用中使用Spring的IOC的容器");UserService us = (UserService) ac.getBean("userService");System.out.println(us);return "success";}}因为TestAction这个类已经交给Spring的ioc容器管理,所以在<action >中的class中不需要写类的全限定名。
1,整合Struts2a)导入struts的jar包struts2-core-2.1.6.jar xwork-2.1.2.jar ognl-2.6.11.jar freemarker-2.3.13.jar commons-logging-1.1.jar commons-fileupload-1.2.1.jarb)将struts.xml文件拷贝到src目录下c)在web.xml里配置struts的核心过滤器<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></filter-mapping>2,整个Springa)导入Spring的jar包spring.jar commons-logging.jarb)将applicationContext.xml文件拷贝到WEB-INF目录下c)在web.xml里配置spring的监听器< !-- 配置spring监听器--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener -class></listener>d)添加spring与struts2整合的插件struts2-spring-plugin-2.1.6.jar3,编写代码测试登录页面login.jsp< body><form action="login" method="post">USERNAME:<input type="text" name="username" /><br>PASSWORD:<input type="password" name="password" /><br><input type="submit" value="登录"></form></body>登录成功页面success.jsp< body>登录成功!</body>LoginDao业务接口package com.itmyhome.actioin;interface LoginDao {public boolean login(String username,String password);}LoginDaoImpl业务接口实现package com.itmyhome.actioin;public class LoginDaoImpl implements LoginDao {public boolean login(String username, String password) {// TODO Auto-generated method stubif("zhangsan".equals(username)&&"123".equals(password)){ return true;}else{return false;}}}LoginActionpackage com.itmyhome.actioin;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport { private String username;private String password;private LoginDao loginDao; //此DAO交给spring来处理public String execute(){if(loginDao.login(username, password)){return "success";}else{return "input";}}public String getUsername() {return username;}public void setUsername(String username) { ername = username;}public String getPassword() {return password;}public void setPassword(String password) { this.password = password;}public LoginDao getLoginDao() {return loginDao;}public void setLoginDao(LoginDao loginDao) {this.loginDao = loginDao;}}struts.xml配置文件< ?xml version="1.0" encoding="UTF-8" ?>< !DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd">< struts><package name="default" namespace="/" extends="struts-default"> <action name="login" class="com.itmyhome.actioin.LoginAction"> <result name="success">/success.jsp</result><result name="input">/login.jsp</result></action></package><!-- Add packages here -->< /struts>applicationContext.xml配置文件<bean id="loginDao" class="com.itmyhome.actioin.LoginDaoImpl" />< !-- 可注释--><bean id="loginAction" class="com.itmyhome.actioin.LoginAction"> <property name="loginDao" ref="loginDao" />< /bean>部署,启动tomcat 输入"zhangsan","123" 跳转到success.jsp 整合成功摘自itmyhome的专栏。
Struts-Hibernate-Spring的整合1. Struts2的配置(struts2.1.6 其他版本不同):A:加入包:B:在web.xml中加入Struts的监听:<!-- Struts2过滤器 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-clas s></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>C:在src目录下加入:struts.xml文件;2. Spring的配置;A:加入包:还要:struts2-spring-plugin.jar;具体aspectjrt.jar和aspectjweaver.jar可以到:B:在web.xml中加入Spring的监听:<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>更多具体配置:/2.x/docs/spring-plugin.htmlC:在WEB-INF/添加:applicationContext.xml文件:(介绍两个相关工具:1. Ant :下载地址A:下载完后,解压.B:配置环境变量:和配置java环境大体相同ANT_HOME:具体路径path=%ANT_HOME%/libC:测试是否成功!2. Xdoclet:xdoclet-plugins-1.0.3.rarA:下载完后解压;3. 应用这两个工具;A:在项目中建立一build.xml内容:<?xml version="1.0" encoding="GBK"?><project name="OA系统构建脚本" default="生成Hibernate配置文件" basedir="."><property name="src.dir" value="${basedir}/src" /><property name="xdoclet.home" value="E:/xdoclet[i1]-1.2.3" /><!-- build classpath 加载xdoclet所需的所有jar包 --><path id="xdoclet.task.classpath"><fileset dir="${xdoclet.home}/lib"><include name="**/*.jar" /></fileset></path><!—制定一个任务 ---><taskdef name="xdoclet" classname="org.xdoclet.ant.XDocletTask"classpathref="xdoclet.task.classpath" /><target name="生成Hibernate配置文件"><xdoclet><fileset dir="${src.dir}/com/oa/model"[i2]><include name="**/*.java" /></fileset><componentclassname="org.xdoclet.plugin.hibernate.HibernateConfigPlugin"destdir="${src.dir}" version="3.0" hbm2ddlauto="update"jdbcurl="jdbc:mysql://localhost:3306/oa" jdbcdriver="com.mysql.jdbc.Driver"jdbcusername="root" jdbcpassword="liaogaohua"dialect="org.hibernate.dialect.MySQLDialect" showsql="true" />[i3]</xdoclet></target><target name="生成Hibernate映射文件"><xdoclet><fileset dir="${src.dir}/com/oa/model"><include name="**/*.java" /></fileset><componentclassname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin" version="3.0"destdir="${src.dir}" /></xdoclet></target>[i4]</project>B:在项目中使用ant工具,生成文件,刷新;4. 加入Hibernate支持;A:导入所需的包.B:配置web.xml在原有基础;1. <!-- 配置Spring的配置文件的路径--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext-*.xml[i5]</param-value></context-param>2. <!-- 用于自动管理Hibernate中的session的关/闭,不用人为去管理--><filter><filter-name>hibernateFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </filter-class></filter><filter-mapping><filter-name>hibernateFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>3. <!-- 字符编码过滤--><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>GBK</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>C:在applicationContext-commons.xml中配置;<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd /schema/aop/schema/aop/spring-aop-2.5.xsd/schema/tx/schema/tx/spring-tx-2.5.xsd"><!-- 配置SessionFactory --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"><value>classpath:hibernate.cfg.xml</value></property></bean>[i6]<!-- 配置事物管理器 --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"><ref bean="sessionFactory"/></property></bean>[i7]<!-- 配置事物的传播性 --><tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes><tx:method name="add*" propagation="REQUIRED" /><tx:method name="delete*" propagation="REQUIRED" /><tx:method name="modify*" propagation="REQUIRED" /><tx:method name="*" read-only="true" /></tx:attributes></tx:advice>[i8] <!-- 那些类的哪些方法参与事物 --><aop:config><aop:pointcut id="allManagerMethod" expression="execution(*org.test.*.*(..))[i9]" /><aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" /> </aop:config></beans>5. 测试,能够把表建立,则Hibernat---Spring成功!能够访问action,则Spring---Struts成功![i1]Xdoclet路径[i2]所要生产*.hbm.xml文件的java文件[i3]hibernate.nbm.xml文件的生成信息[i4]把生成的*.hbm.xml文件添加到hibernate.nhm.xml[i5]Spring的配置文件在src目录下.并且为多个时.若为一个且在WEB-INF下时则:/WEB-INF/applicationContext-*.xml;[i6]用于取得session对象;[i7]创建session对象实例化;用于管理session对象的开关,不用人为去控制;[i8]对象session的可执行的方法;[i9]Dao,DaoImpl类5:测试,经测试成功!。
struts2 整合例子下面是一个简单的 Struts2 整合例子:1. 创建一个 Maven Web 项目,并在 pom.xml 文件中添加以下依赖:```。
<dependency>。
<groupId>org.apache.struts</groupId>。
<artifactId>struts2-core</artifactId>。
<version>2.5.22</version>。
</dependency>。
```。
2. 在 web.xml 文件中添加 Struts2 过滤器和拦截器的配置:```。
<filter>。
<filter-name>struts2</filter-name>。
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>。
</filter>。
<filter-mapping>。
<filter-name>struts2</filter-name>。
<url-pattern>/*</url-pattern>。
</filter-mapping>。
<listener>。
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>。
</listener>。
```。
3. 创建 Action 类和页面,并配置 action 的访问路径:```java。
public class HelloWorldAction extends ActionSupport 。
nginx url 重写转发拼接
在使用 Nginx 进行 URL 重写转发时,可以使用 rewrite 模块
和 proxy_pass 模块来实现。
具体步骤如下:
1. 配置 rewrite 规则:
使用 rewrite 规则可以将请求的 URL 进行修改和重写。
例如,
可以将原始 URL 中的 /oldpath 改写为 /newpath,并将参数拼接到URL 中。
重写规则如下:
```
rewrite ^/oldpath(.*)$ /newpath$1$is_args$args;
```
其中,^/oldpath(.*)$ 表示匹配以 /oldpath 开头的所有 URL;/newpath$1$is_args$args 表示重写后的 URL,其中 $1 表示拼接上
原始 URL 中除了 /oldpath 后的部分,$is_args 表示是否携带参数,$args 表示原始 URL 中的参数。
2. 配置 proxy_pass 转发:
使用 proxy_pass 模块可以将请求转发到指定的服务器。
例如,
将 /newpath 转发到 10.0.0.1 上的 8080 端口,转发配置如下:```
location /newpath {
proxy_pass http://10.0.0.1:8080;
}
```
其中,location /newpath 表示匹配以 /newpath 开头的所有URL;proxy_pass http://10.0.0.1:8080 表示将请求转发到
10.0.0.1 上的 8080 端口。
通过以上两个步骤的配置,就可以实现 URL 重写后的转发。
整合Spring与Struts2(java私塾)15.2 整合Spring与Struts215.2.1概述以上面的示例来说明整合Spring和Struts2的基本方式:∙SampleAction与SampleService的生命周期和依赖关系都由Spring去管理。
∙Struts2需要SampleAction实例的时候,不是自己新建实例,而是向Spring去请求获取一个实例,也就是SampleAction实例的生命周期也由Spring来管理接下来就来具体看看怎么整合Spring与Struts2。
15.2.2拷入jar包要整合Spring和Struts2,需要先要拷入Spring需要的jar包,既包括Spring本身的jar包,也包括Struts2的Spring插件。
找到下载的Struts2的资源包中的lib文件夹,也就是struts-2.1.8.1\lib,将以下几个jar 包拷入到我们的web工程的WEB-INF\lib中:spring-beans-2.5.6.jar、spring-context-2.5.6.jar、spring-core-2.5.6.jar、spring-test-2.5.6.jar、spring-web-2.5.6.jar、struts2-spring-plugin-2.1.8.1.jar、commons-logging-1.0.4.jar、struts2-spring-plugin-2.1.8.1.jar。
15.2.3改写SampleAction由于现在和Spring结合了,可以由Spring为Action注入Action需要的SampleService 的实例,也就是SampleAction引用SampleService的方式需要改变,其他的没有变化,示例代码如下:java代码:查看复制到剪贴板打印1.public class SampleAction extends ActionSupport{2.//通过setter方式,由Spring来注入SampleService实例3.private SampleService service;4.public void setService(SampleService service) {5.this.service = service;6. }7.private String name;8.private String userId;9.public String getName() {10.return name;11. }12.public void setName(String name) { = name;14. }15.public String getUserId() {16.return userId;17. }18.public void setUserId(String userId) {erId = userId;20. }21.22.public String execute() throws Exception {23. name = this.service.getNameById(userId);24.return SUCCESS;25. }26.}在execute方法中不再直接新建SampleServiceImpl的实例了,而是声明了一个SampleSerivce 类型的属性,并提供对应的setter方法,这个setter方法是留给Spring注入对象实例的时候调用的,可以不用提供getter方法。
url rewrite和struts2整合
发现了一个好东西,但按照他这里在项目里配置发现不成功
今天在把之前在网上收集的资料找了下,找到答案
在struts的filter-mapping中加入以下就可以了
<filter-mapping>
<filter-name>struts2 </filter-name>
<url-pattern>*.do </url-pattern>
<dispatcher>REQUEST </dispatcher>
<dispatcher>FORWARD </dispatcher>
<dispatcher>INCLUDE </dispatcher>
</filter-mapping>
如下:
<!-- Character Encoding 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>
</filter>
<!-- Hibernate Open Session In View filter-->
<filter>
<filter-name>osivFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewF ilter
</filter-class>
</filter>
<!--UrlRewriteFilter 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>
<!-- Struts2 filter -->
<filter>
<filter-name>struts2-cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher </filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>osivFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>struts2-cleanup</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>struts2 </filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
引用部分
/topic/70219
1、在web.xml中EncodingFilter的位置应该在Struts2的FilterDispatcher 之前,道理很简单,要先调整字符集,再进入Action。
2、如果使用Urlrewrite,要指定filter-mapping的dispatcher方式,如下<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
3、在做上传文件的时候,要在web.xml中增加ActionContextCleanUp这个filter,如果不增加,会发生第一次上传取不到文件的情况
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</fil ter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
按照Struts2的API,filter的顺序是
struts-cleanup filter
SiteMesh filter
FilterDispatcher。