`
gerrard_ok
  • 浏览: 146818 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2拦截器解决乱码问题

阅读更多

  之前使用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"。如果页面是其它编码,将拦截器中重编码部分改一下即可。

分享到:
评论
1 楼 赵武艺 2012-03-22  
我使用了这个方法还是不行,我我所有的编码都是采用utf-8编码,表单提交的时候中文还是变成乱码了。

相关推荐

    struts2拦截器解决请求乱码和输出乱码.txt

    struts2 拦截器 解决 请求乱码 和 输出乱码 java

    Struts2编码拦截器

    解决Struts2中的中文乱码。该代码是用作Struts2的拦截器中

    struts2拦截器

    Struts2拦截器可以帮助我们解决这个问题。例如,我们可以自定义一个拦截器,专门处理字符编码转换,确保请求参数正确解码。通常,这可以通过在拦截器中设置HttpServletRequest的字符编码实现,如`request.set...

    使用拦截器解决中文乱码

    为了解决Struts2中的中文乱码问题,本文将详细介绍如何通过编写自定义拦截器来处理这一难题。我们将分步骤介绍拦截器的编写、配置以及如何确保正确设置字符编码。 #### 步骤一:创建自定义拦截器 首先,我们需要...

    Struts2乱码终极解决办法

    本文将详细介绍如何彻底解决Struts2中的乱码问题,并提供实际可行的解决方案。 #### 二、乱码产生的原因 在Struts2框架中,中文乱码主要由以下几个方面的原因造成: 1. **请求编码问题**:客户端发送请求时未指定...

    使用拦截器解决中文乱码问题.pdf

    本文将详细讲解如何使用拦截器(Interceptor)来有效解决Struts2中的中文乱码问题。 首先,我们需要了解为什么在Struts2中直接使用Filter无法解决乱码。在Struts1中,我们通常会自定义一个Filter,设置字符编码,...

    使用拦截器解决中文乱码问题.docx

    本文将详细介绍如何使用Struts2的拦截器(Interceptor)来解决中文乱码问题。 首先,我们要理解Struts2的拦截器工作原理。Struts2的拦截器是基于拦截器栈(Interceptor Stack)的概念,它允许开发者在Action执行...

    struts2获取参数,解决乱码,跳转

    在这个主题中,我们将深入探讨Struts2如何获取参数、解决乱码问题以及实现页面跳转。 首先,让我们来看看Struts2如何获取HTTP请求中的参数。在Struts2中,我们可以使用Action类来接收和处理请求参数。Action类是...

    struts2上传下载 解决中文文件名乱码

    1. **配置Struts2拦截器**:Struts2的文件上传拦截器(`org.apache.struts2.interceptor.FileUploadInterceptor`)需要配置以支持UTF-8编码。在你的`struts.xml`配置文件中,可以添加以下配置: ```xml ...

    struts2文件上传(解决中文乱码)

    Struts2是一个强大的Java Web...总之,解决Struts2中的中文乱码问题,关键在于配置正确的字符编码,并在文件上传和下载过程中处理好编码转换。通过以上步骤,你可以有效地在Struts2项目中实现对中文URL和文件名的支持。

    java web hibernate struts spring 全方位解决乱码

    对于`Struts2`框架,其Action类中的`params`拦截器默认不会自动设置字符编码。我们需要在配置文件`struts-default.xml`或自定义配置文件中添加拦截器配置,指定请求编码: ```xml &lt;param name="encoding"&gt;UTF-8 ...

    struts2技巧,笔记.zip指定404,500页面 utf-8过滤器 防SQL注入 解决乱码

    当数据传递到后台时,Struts2的拦截器会进行一些基本的数据验证和清理,减少SQL注入的风险。此外,使用预编译的SQL语句(如PreparedStatement)也是防止SQL注入的有效手段。 4. **Struts2的utf-8过滤器**: Struts...

    struts2配置文件传值中文乱码

    Struts2通过拦截器(Interceptor)和配置文件实现了灵活的功能扩展,其中配置文件用于定义控制器、拦截器、结果类型等组件,是框架运行的核心。 ### 问题背景:中文乱码成因分析 在Struts2框架中,中文乱码问题...

    Struts的乱码问题

    ### Struts框架中的乱码问题解析与解决方案 #### 背景介绍 在Web开发过程中,尤其是使用Java Web框架如Struts进行项目开发时,经常遇到的一个问题是中文字符的乱码问题。这个问题主要体现在中文字符在Web页面上的...

    java web开发解决乱码问题

    - 或者在`&lt;package&gt;`标签内设置`&lt;interceptors&gt;`拦截器,加入`encoding`拦截器并设置参数`input="UTF-8"`。 #### 四、其他相关知识点 ##### 4.1 Servlet生命周期与乱码问题的关系 - **初始化阶段**:首次请求时...

    struts-hibernate-sprint开发详解 乱码问题 连接池

    总结来说,SSH框架的集成涉及到数据库连接、Hibernate配置、Spring容器设置、Struts2拦截器配置以及处理乱码和连接池问题。通过这些步骤,开发者可以构建一个完整的Java Web应用程序,实现MVC架构,有效地管理数据...

    struts2乱码与json插件(1)

    Struts2提供了多种方式来解决乱码问题,其中就包括通过配置过滤器和XML配置文件。 `TextFilter.java` 文件可能是一个自定义过滤器,用于处理HTTP请求中的编码问题。在Java Web应用中,过滤器是拦截请求并进行预处理...

    处理struts乱码

    Struts2的核心拦截器Stack默认使用ISO-8859-1编码处理请求参数,这可能导致非英文字符乱码。可以通过自定义拦截器或者修改全局配置来改变这个行为。例如,在`struts-default.xml`或自定义的配置文件中添加以下代码...

    STRUTS2国际化的问题

    这可以通过Struts2的拦截器或者自定义Action来实现。 3. **动态设置视图**:在渲染视图之前,可以根据当前用户的`Locale`信息动态设置视图的语言环境。 #### 四、前端实现国际化 1. **页面元素的国际化**:可以...

    过滤器/拦截器

    拦截器更多是框架级别的概念,如Spring MVC、Struts2等提供了拦截器功能。相比于过滤器,拦截器更具有面向对象的特性,它可以更灵活地处理请求和响应。拦截器的主要任务包括: 1. **权限验证**:在请求被处理前检查...

Global site tag (gtag.js) - Google Analytics