问题描述

在JSP中使用form表单向后台action中传递中文参数,后台action接收到参数出现中文乱码。JSP页面统一采用了utf-8编码格式。由于struts2默认采用的编码为utf-8,根据官方文档的提示,编码格式改为GBK,就能解决中文乱码。遂改之。但是,改为GBK后仍然出现中文乱码。很是不解(后来去官网查了一下,发现这是个BUG)。

环境描述

服务器采用tomcat6.0,struts的版本为2.3.12,spring的版本为2.5.6

解决办法

1.如果你的项目采用了spring,那么请用spring的自带的过滤器来解决这个问题,你只要在web.xml添加如下代码(不推荐):

<!-- 利用Spring的Filter解决中文乱码问题 --><filter>     <filter-name>Set Character Encoding</filter-name>     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>     <init-param>     <param-name>encoding</param-name>     <param-value>utf8</param-value>     </init-param>     </filter>     <filter-mapping>     <filter-name>Set Character Encoding</filter-name>     <url-pattern>/*</url-pattern>     </filter-mapping>

但是spring3.x之后的版本这个方法就失效了。所以最好的办法就是自己写一个过滤器。一个简单的字符过滤器实现如下(推荐):

package org.felix.common;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class CharacterEncodingFilter implements Filter {protected FilterConfig filterConfig = null;protected String encoding = "";public void destroy() {filterConfig = null;encoding = null;}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {if(encoding != null && !"".equals(encoding))servletRequest.setCharacterEncoding(encoding);filterChain.doFilter(servletRequest, servletResponse);}public void init(FilterConfig filterConfig) throws ServletException {this.filterConfig = filterConfig;this.encoding = filterConfig.getInitParameter("encoding");}}

注意,上面import的javax.servlet 需要你设置好tomcat的lib库才能生效,Project->Properties->Java Build Path->Libraries->Add Libraries -> Server Runtime 找到你的Tomcat服务器确定。

然后你在web.xml中添加下面代码:

<filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.felix.common.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

2.如果你表单提交采用的是get请求.那么请在tomcat的server.xml中添加URIEncoding="utf-8".(注意添加完后清理掉tomcat的缓存)

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>

3.不建议采用的办法,在接收参数的时候进行转码(虽然能解决问题,但坚决抵制),例如:

String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8");

转载于:https://www.cnblogs.com/aleafo/p/4264211.html

struts2 中文乱码问题,自定义过滤器通用解决方法相关推荐

  1. Tomcat中文乱码问题的原理和解决方法

    为什么80%的码农都做不了架构师?>>>    Tomcat中文乱码问题的原理和解决方法 自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决 ...

  2. bs4 乱码_Python BeautifulSoup中文乱码问题的2种解决方法

    解决方法一: 使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输出的总是乱码,找了好久找到解决办法,下面分享给大家 首先是代码 复制代码 代码如下: from bs4 im ...

  3. 彻底搞懂 python 中文乱码问题_Python BeautifulSoup中文乱码问题的2种解决方法

    解决方法一: 使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输出的总是乱码,找了好久找到解决办法,下面分享给大家 首先是代码 from bs4 import Beauti ...

  4. mysql 中文 phpmyadmin_mysql中文乱码问题,phpmyadmin操作解决方法

    mysql中文乱码问题一直每次迁移一次数据库就要从头解决一遍,因为数据库建好以后就不会怎么动了,一直没当回事儿,反正就麻烦一次吗.最近服务器遇到了点问题,重装了几次,结果每次都要重新配置这个问题,索性 ...

  5. Java学习中遇到的中文乱码问题的整理和解决方法

    目录 前言 1. 学习SpringMVC框架的时候遇到的中文乱码(一)  2. 学习SpringMVC框架的时候遇到的中文乱码(二)  3. 学习Servlet的时候可能会遇到的中文乱码(一)  4. ...

  6. Code:Blocks 中文乱码问题原因分析和解决方法!

    这里以Code::Blocks 10.5版本为蓝本进行说明. 首先,请在Code::Blocks里面输入标准的一个C程序: #include<stdio.h> #include<st ...

  7. linux ftp中文乱码方块,Ubuntu下NetBeans中文乱码及方框问题的解决方法

    当我在ubuntu 11.04中安装netbeans 7.0的时候,出现一个奇怪的现象,启动netbeans中,发现很多中文字无法显示,直接显示一个方框.很显然是没有找到某些字的显示数据,但是奇怪的是 ...

  8. struts2 国际化资源文件自定义的路径解决方法

    struts2 的版本2.3.4 <!-- 配置国际化资源路径 --> <constant name="struts.custom.i18n.resources" ...

  9. 微信公众号回复、接收消息中中文乱码问题的分析及解决

    微信公众号回复.接收消息中文乱码问题的分析及解决 为了方便,我们把接收时用的编码记为A.把处理时用的编码记为B.把返回时用的编码记为C 文章目录 微信公众号回复.接收消息中文乱码问题的分析及解决 中文 ...

最新文章

  1. vmware的三种网络模式讲解
  2. 【荐】如何规划 Nginx 网站目录的权限(用户,用户组,ssh,sftp)
  3. Vb 与 Vc 的区别
  4. Dozer 使用总结
  5. 电商网站攻防,三个制胜锦囊
  6. Jmeter中的几种协议
  7. docker 启动mysql_两行命令安装MySQL,Docker就是效率的化身
  8. java字符流输出流_JAVA语言之IO流字符串输入输出流
  9. C/C++中static与const的区别与联系
  10. 使用Dockerfile构建镜像-Docker for Web Developers(5)
  11. 超微服务器主板型号,Supermicro超微主板X10SRL-FLGA-2011,单路入门级服务器主板
  12. ffmpeg快速剪辑
  13. vnc远程桌面精灵,七款让人爱不释手的vnc远程桌面精灵
  14. MFC中模拟按钮控件BN_CLICKED消息事件
  15. 单例模式有几种写法?
  16. 实现一个简单的Database1
  17. BookKeeper源码解析之Bookie启动流程(一)
  18. 电动车电池放电口能冲电吗充电口和放电口是同一个吗
  19. 福州大学计算机基础教学与等级考试暂行规定,福州大学计算机基础教学与等级考试暂行规定...
  20. 多行溢出隐藏的解决办法

热门文章

  1. nhibernate学习之集合组合依赖
  2. 基于java的数据结构学习——数组实现的栈以及简单应用
  3. #pragma once 与 #ifndef比较分析
  4. Qt之QProcess(一)运行cmd命令
  5. Linux 文件系统编程之系统调用和标准I/O库
  6. 推荐一个配置linux服务的网站
  7. ASM 判定一个类,实现了指定接口
  8. Java高级应用开发之Servlet
  9. vue使用render渲染jsx
  10. java: cannot execute binary file 如果遇到这个错,一般是操作系统位数出问题了。