Struts2.x项目中文乱码,需要注意的几处
1、页面
2、配置文件struts.xml
3、过滤器
4、服务器(这里指定的是TomCat)
5、数据库
比如统一使用GBK
一、JSP页面
一般JSP页面乱码,需要注意该句(注:原来这里写的感觉不够准确,2011-1-26修改)
<%@ page language="java" contentType="text/html; charset=GBK"%>
//一般下边的两项可以不用写
<%request.setCharacterEncoding("GBK");%>
在页面head标签里写
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
(2011-1-26补充)
如果在页面中有引入页面
动态引入:<jsp:include... 和 静态引入:<%@ include file...
除了在本页面写上 <%@ page language="java" contentType="text/html; charset=GBK"%>,被引入的页面也要写上,而且两页面必须一致
二、struts.xml配置文件
从web.xml的配置可以知道Struts2.x是一个Filter
所以struts.xml要写上
<constant name="struts.i18n.encoding" value="GBK"/>
需要注意的是,曾经听说在Struts2.1.6,加入了该项设置也无法解决中文的乱码问题。但本人没试过
三、过滤器
如果项目中写了并配置了Filter(过滤器),就需要看看Filter的doFilter方法中
request.setCharacterEncoding(...);
response.setCharacterEncoding(...);
这两个方法是否写成了其他的编码,如果是,要改成
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
filterChain.doFilter(request, response);
四、TomCat服务器
打开 TomCat_Home/conf/server.xml
找到设置端口号的那项,检查一下,是否写了 URIEncoding="GBK" 这项
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>
五、数据库
如果数据库是MySql,并且是JDBC直接链接数据库,在数据库的数据库URL中加上
useUnicode=true&characterEncoding=GBK
注:5.0以上的可以不加