`
gerrard_ok
  • 浏览: 143202 次
  • 性别: 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的拦截器中

    SpringBoot 自定义拦截器 的 源代码

    我们对拦截器并不陌生,无论是 Struts 2 还是 Spring MVC 中都提供了拦截器功能,它可以根据 URL 对请求进行拦截,主要应用于登陆校验、权限验证、乱码解决、性能监控和异常处理等功能上。Spring Boot 同样提供了...

    STRUTS+AJAX+JSP 请求到后台乱码问题解决方法

    在AJAX请求URL之前 把参数进行encodeURI()转码。 如: 代码如下: var fileName=... 您可能感兴趣的文章:JSP struts2 url传参中文乱码解决办法JSP 开发之Struts2内建自定义拦截器java+jsp+struts2实现发送邮件功

    解决Struts2.1.6中文问题

    解决Struts2.1.6中文乱码问题,在用STRUTS2.1.6时,中文问题不好解决,写拦截器是不管用,对不熟悉Spring的人来说用SPRING来转化也不容易进行,经过自己的学习发现,其实在有中文提交的时候,服务器接收的是有规律的...

    struts2.1宝典

    3、创建拦截器: 2 4.标签中引用资源文件内容 3 5.创建资源文件 3 6.Action中访问servlet API 3 7.Action访问资源文件 3 8.资源文件_各国代码 4 9.将struts.xml分开 4 10全局结果result 4 11模型驱动 4 12.创建...

    一些常用框架模板代码

    一些常用框架源码,包括struts2拦截器解决请求乱码和输出乱码 Struts2图片文件上传,判断图片格式和图片大小 springmvc+spring+mybatis集成框架的环境搭建 配置 log4j.....等

    从J2SE到J2EE知识点介绍

    1. struts2的拦截器定义以及使用 153 2. struts标签 160 3. Struts 2 标签库说明及使用 160 4. set 描述 169 5. text 描述 170 6. property 描述 170 7. Struts的异常处理 171 8. Struts的上传与下载 178 五、 ...

    SSH简单三大框架项目事例

    一个简单的SSH项目,包括注册登录拦截器、中文乱码拦截器栈、全局返回值、全局异常、Spring的一些配置等等

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    -- 下面定义BeanNameAutoProxyCreator所需的事务拦截器--&gt; &lt;value&gt;transactionInterceptor &lt;!-- 此处可增加其他新的Interceptor --&gt; &lt;!--定义DAO Bean ,由于BeanNameAutoProxyCreator自动...

    《MyEclipse 6 Java 开发中文教程》前10章

    10.3.3 装配拦截器和Bean 212 10.3.4 测试和运行 214 10.3.5 AOP简介和相关概念 214 10.3.6 关于java.lang.ClassCastException: $Proxy0错误的解决方法 216 10.4 开发 Spring 2.0 AOP 应用 219 10.4.1 使用aop 标签...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    Java面试宝典2020修订版V1.0.1.doc

    7、简述ajax中Js脚本缓存问题该如何解决? 26 8、同步和异步怎么理解?分别在什么情况下使用。 26 9、java后台如何接收ajax数据? 26 10、为什么要有jquery? 26 11、jQuery选择器有多少种? 27 13、你是如何使用...

Global site tag (gtag.js) - Google Analytics