struts2 中文乱码问题,自定义过滤器通用解决方法
问题描述
在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 中文乱码问题,自定义过滤器通用解决方法相关推荐
- Tomcat中文乱码问题的原理和解决方法
为什么80%的码农都做不了架构师?>>> Tomcat中文乱码问题的原理和解决方法 自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决 ...
- bs4 乱码_Python BeautifulSoup中文乱码问题的2种解决方法
解决方法一: 使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输出的总是乱码,找了好久找到解决办法,下面分享给大家 首先是代码 复制代码 代码如下: from bs4 im ...
- 彻底搞懂 python 中文乱码问题_Python BeautifulSoup中文乱码问题的2种解决方法
解决方法一: 使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输出的总是乱码,找了好久找到解决办法,下面分享给大家 首先是代码 from bs4 import Beauti ...
- mysql 中文 phpmyadmin_mysql中文乱码问题,phpmyadmin操作解决方法
mysql中文乱码问题一直每次迁移一次数据库就要从头解决一遍,因为数据库建好以后就不会怎么动了,一直没当回事儿,反正就麻烦一次吗.最近服务器遇到了点问题,重装了几次,结果每次都要重新配置这个问题,索性 ...
- Java学习中遇到的中文乱码问题的整理和解决方法
目录 前言 1. 学习SpringMVC框架的时候遇到的中文乱码(一) 2. 学习SpringMVC框架的时候遇到的中文乱码(二) 3. 学习Servlet的时候可能会遇到的中文乱码(一) 4. ...
- Code:Blocks 中文乱码问题原因分析和解决方法!
这里以Code::Blocks 10.5版本为蓝本进行说明. 首先,请在Code::Blocks里面输入标准的一个C程序: #include<stdio.h> #include<st ...
- linux ftp中文乱码方块,Ubuntu下NetBeans中文乱码及方框问题的解决方法
当我在ubuntu 11.04中安装netbeans 7.0的时候,出现一个奇怪的现象,启动netbeans中,发现很多中文字无法显示,直接显示一个方框.很显然是没有找到某些字的显示数据,但是奇怪的是 ...
- struts2 国际化资源文件自定义的路径解决方法
struts2 的版本2.3.4 <!-- 配置国际化资源路径 --> <constant name="struts.custom.i18n.resources" ...
- 微信公众号回复、接收消息中中文乱码问题的分析及解决
微信公众号回复.接收消息中文乱码问题的分析及解决 为了方便,我们把接收时用的编码记为A.把处理时用的编码记为B.把返回时用的编码记为C 文章目录 微信公众号回复.接收消息中文乱码问题的分析及解决 中文 ...
最新文章
- vmware的三种网络模式讲解
- 【荐】如何规划 Nginx 网站目录的权限(用户,用户组,ssh,sftp)
- Vb 与 Vc 的区别
- Dozer 使用总结
- 电商网站攻防,三个制胜锦囊
- Jmeter中的几种协议
- docker 启动mysql_两行命令安装MySQL,Docker就是效率的化身
- java字符流输出流_JAVA语言之IO流字符串输入输出流
- C/C++中static与const的区别与联系
- 使用Dockerfile构建镜像-Docker for Web Developers(5)
- 超微服务器主板型号,Supermicro超微主板X10SRL-FLGA-2011,单路入门级服务器主板
- ffmpeg快速剪辑
- vnc远程桌面精灵,七款让人爱不释手的vnc远程桌面精灵
- MFC中模拟按钮控件BN_CLICKED消息事件
- 单例模式有几种写法?
- 实现一个简单的Database1
- BookKeeper源码解析之Bookie启动流程(一)
- 电动车电池放电口能冲电吗充电口和放电口是同一个吗
- 福州大学计算机基础教学与等级考试暂行规定,福州大学计算机基础教学与等级考试暂行规定...
- 多行溢出隐藏的解决办法