之前使用struts1的时候是通过写filter来处理乱码,把写的filter搬到struts2,配置了WEB.XML发生没有效果,请求根本就没有通过filter。原因Struts2在web.html配置了处理action请求的filter:
<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>
通过这个sturts filter后,在这个struts filter之前或之后配置都是发现处理乱码的filter不起作用,所以编写拦截器还是个不错的解决乱码的方式。
1、编写自定义 EncodingIntereptor拦截器
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.StrutsStatics;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class EncodingInterceptor extends AbstractInterceptor {
/**
* Struts2编码拦截器
*/
@Override
public String intercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
ActionContext actionContext = arg0.getInvocationContext();
HttpServletRequest request= (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);
System.out.println("Encoding Intercept...");
/**
* 此方法体对GET 和 POST方法均可
*/
if( request.getMethod().compareToIgnoreCase("post")>=0){
try {
request.setCharacterEncoding("GBK");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
Iterator iter=request.getParameterMap().values().iterator();
while(iter.hasNext())
{
String[] parames=(String[])iter.next();
for (int i = 0; i < parames.length; i++) {
try {
parames[i]=new String(parames[i].getBytes("iso8859-1"),"GBK");//此处GBK与页面编码一样
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
return arg0.invoke();
}
}
2、Struts.xml配置
<package>下注册拦截器:
<interceptors>
<interceptor name="Encoding" class="com.disaster.util.EncodingInterceptor"></interceptor>
<interceptor-stack name="Encode">
<interceptor-ref name="Encoding"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref><!-- 必须引入这个,否则request不会再往下传-->
</interceptor-stack>
</interceptors>
3、使用拦截器,可将其设为默认的拦截器
<default-interceptor-ref name="Encode"></default-interceptor-ref>
4、页面编码和页面字符编码跟设为"UTF-8"。如果页面是其它编码,将拦截器中重编码部分改一下即可。
分享到:
相关推荐
struts2 拦截器 解决 请求乱码 和 输出乱码 java
解决Struts2中的中文乱码。该代码是用作Struts2的拦截器中
Struts2拦截器可以帮助我们解决这个问题。例如,我们可以自定义一个拦截器,专门处理字符编码转换,确保请求参数正确解码。通常,这可以通过在拦截器中设置HttpServletRequest的字符编码实现,如`request.set...
为了解决Struts2中的中文乱码问题,本文将详细介绍如何通过编写自定义拦截器来处理这一难题。我们将分步骤介绍拦截器的编写、配置以及如何确保正确设置字符编码。 #### 步骤一:创建自定义拦截器 首先,我们需要...
本文将详细介绍如何彻底解决Struts2中的乱码问题,并提供实际可行的解决方案。 #### 二、乱码产生的原因 在Struts2框架中,中文乱码主要由以下几个方面的原因造成: 1. **请求编码问题**:客户端发送请求时未指定...
本文将详细讲解如何使用拦截器(Interceptor)来有效解决Struts2中的中文乱码问题。 首先,我们需要了解为什么在Struts2中直接使用Filter无法解决乱码。在Struts1中,我们通常会自定义一个Filter,设置字符编码,...
本文将详细介绍如何使用Struts2的拦截器(Interceptor)来解决中文乱码问题。 首先,我们要理解Struts2的拦截器工作原理。Struts2的拦截器是基于拦截器栈(Interceptor Stack)的概念,它允许开发者在Action执行...
在这个主题中,我们将深入探讨Struts2如何获取参数、解决乱码问题以及实现页面跳转。 首先,让我们来看看Struts2如何获取HTTP请求中的参数。在Struts2中,我们可以使用Action类来接收和处理请求参数。Action类是...
1. **配置Struts2拦截器**:Struts2的文件上传拦截器(`org.apache.struts2.interceptor.FileUploadInterceptor`)需要配置以支持UTF-8编码。在你的`struts.xml`配置文件中,可以添加以下配置: ```xml ...
Struts2是一个强大的Java Web...总之,解决Struts2中的中文乱码问题,关键在于配置正确的字符编码,并在文件上传和下载过程中处理好编码转换。通过以上步骤,你可以有效地在Struts2项目中实现对中文URL和文件名的支持。
对于`Struts2`框架,其Action类中的`params`拦截器默认不会自动设置字符编码。我们需要在配置文件`struts-default.xml`或自定义配置文件中添加拦截器配置,指定请求编码: ```xml <param name="encoding">UTF-8 ...
当数据传递到后台时,Struts2的拦截器会进行一些基本的数据验证和清理,减少SQL注入的风险。此外,使用预编译的SQL语句(如PreparedStatement)也是防止SQL注入的有效手段。 4. **Struts2的utf-8过滤器**: Struts...
Struts2通过拦截器(Interceptor)和配置文件实现了灵活的功能扩展,其中配置文件用于定义控制器、拦截器、结果类型等组件,是框架运行的核心。 ### 问题背景:中文乱码成因分析 在Struts2框架中,中文乱码问题...
### Struts框架中的乱码问题解析与解决方案 #### 背景介绍 在Web开发过程中,尤其是使用Java Web框架如Struts进行项目开发时,经常遇到的一个问题是中文字符的乱码问题。这个问题主要体现在中文字符在Web页面上的...
- 或者在`<package>`标签内设置`<interceptors>`拦截器,加入`encoding`拦截器并设置参数`input="UTF-8"`。 #### 四、其他相关知识点 ##### 4.1 Servlet生命周期与乱码问题的关系 - **初始化阶段**:首次请求时...
总结来说,SSH框架的集成涉及到数据库连接、Hibernate配置、Spring容器设置、Struts2拦截器配置以及处理乱码和连接池问题。通过这些步骤,开发者可以构建一个完整的Java Web应用程序,实现MVC架构,有效地管理数据...
Struts2提供了多种方式来解决乱码问题,其中就包括通过配置过滤器和XML配置文件。 `TextFilter.java` 文件可能是一个自定义过滤器,用于处理HTTP请求中的编码问题。在Java Web应用中,过滤器是拦截请求并进行预处理...
Struts2的核心拦截器Stack默认使用ISO-8859-1编码处理请求参数,这可能导致非英文字符乱码。可以通过自定义拦截器或者修改全局配置来改变这个行为。例如,在`struts-default.xml`或自定义的配置文件中添加以下代码...
这可以通过Struts2的拦截器或者自定义Action来实现。 3. **动态设置视图**:在渲染视图之前,可以根据当前用户的`Locale`信息动态设置视图的语言环境。 #### 四、前端实现国际化 1. **页面元素的国际化**:可以...
拦截器更多是框架级别的概念,如Spring MVC、Struts2等提供了拦截器功能。相比于过滤器,拦截器更具有面向对象的特性,它可以更灵活地处理请求和响应。拦截器的主要任务包括: 1. **权限验证**:在请求被处理前检查...