struts2 中文乱码的解决办法分享
适合情况 -> 从jsp传入到action时的乱码情况,这里以gbk为例
1.建立一个用于转换编码的filter
文件位置举例:src.util.setcharacterencodingfilter.java
package util;
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;
import javax.servlet.unavailableexception;
/**
* example filter that sets the character encoding to be used in parsing the
* incoming request
*/
public class setcharacterencodingfilter implements filter {
/**
* take this filter out of service.
*/
public void destroy() {
}
/**
* select and set (if specified) the character encoding to be used to
* interpret request parameters for this request.
*/
public void dofilter(servletrequest request, servletresponse response,
filterchain chain)throws ioexception, servletexception {
request.setcharacterencoding("gbk");
// 传递控制到下一个过滤器
chain.dofilter(request, response);
}
public void init(filterconfig filterconfig) throws servletexception {
}
}
2.修改web.xml,在struts的filterdispatcher映射之前添加2个filter
<?xml version="1.0" encoding="utf-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>org.springframework.web.context.contextloaderlistener</listener-class>
</listener>
<filter>
<filter-name>set character encoding</filter-name>
<filter-class>util.setcharacterencodingfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>set character encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.actioncontextcleanup</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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>
</web-app>
3.你的jsp头应该有
<%@ page language="java" pageencoding="gbk"%>
4.在struts.xml中修改默认的编码设定
<struts>
<constant name="struts.i18n.encoding" value="gbk"></constant>
...
...
...
</struts>
基本上就这样可以解决大多传入的字符乱码问题
ps:如果是数据库提取字符乱码,比如mysql,确认你的数据库内字符是gbk,并且连接字符串指定了字符编码
<property name="url" value="jdbc:mysql://localhost/database?useunicode=true&characterencoding=gbk"></property>
上一篇: JAVA算法起步之堆排序实例