谈谈有关jsp乱码问题以及解决方法。(jsp+mysql+tomcat)
(1) 乱码产生的原因:编码方式不一致。
(2)常见的编码方式:gb2312(简体中文) big5(繁体中文) gbk(中文【简,繁】) utf-8(国际编码) iso-8859-1(拉丁字符)
(3) 乱码问题的详细解决方法:
1.首先,设置mysql数据库支持gbk/gb2312.
具体方法:打开mysql文件夹,找到my . ini文件,修改my.ini配置文件。
[client]
port=3306
default-character-set=gb2312
以及
[mysqld]下的
default-character-set=gb2312
修改,保存,重启。若设为System服务,可以在控制面板-管理工具-服务中找到mySQL服务,重启。
2.设置tomcat支持中文。具体方法如下:
找到tomcat安装目录下server.xml配置文件,然后修改
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
reloadable="true" redirectPort="8443" reloadable="true" URIEncoding="gb2312" />
其中rereloadable=“true”是设置热启动,这样设置的好处是当你在调试项目的时候可以不用手动重新部 署,tomcat会自动识别自动重新部署;URIEnocding="gb2312"是设置tomcat支持gb2312编码。
3.确保jsp页面是统一编码。
<%@ page language="java" pageEncoding="gb2312"%> 或者是gbk 如果要支持国际化, 编码要改为utf- 8。
4.前面的三个方面往往还不能从根本上解决问题,要从根本上解决问题必须加一个filter。
具体方法如下:
建一个java filter类:
packag com.iesgroup.crm.filter.EncodingFilter
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 EncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
然后我们在web.xml文件中作一些配置,配置如下:
<filter>
<filter-name>filter</filter-name>
<filter-class>com.iesgroup.crm.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>/*jsp页面编码如果是gbk的话,这里则改为gbk,gb2312也一样*/
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- <filter-mapping> 注释掉的过滤方式也行
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> -->
<filter-mapping>
<filter-name>filter</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>filter</filter-name>
<servlet-name>*.jsp</servlet-name>
</filter-mapping>
最后,你的jsp页面跟mysql数据库的都能够正常显示中文了!