您的位置:首页 > 编程语言 > Java开发

Struts+mysql解决显示中文乱码

2009-08-13 12:35 295 查看
    这几天被MySQL乱码问题搞死了,我检查了所有页面的编码都没问题,然后在dos里改,改了之后,还是显示character_set_server和character_set_database都是Latin1.然后重新装过,才发现原来在MySql server  instance config wizard导向了有一个选项character set里要选utf8。这才把问题解决掉。

    今天又用struts做,又是乱码问题,上网查了一下。原来解决方法也挺简单的。就是写一个过滤器,然后在web.xml里配置一下就搞掂了。

过滤器如下:

package com.strutsLogin.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;

/**

* 中文过滤器

*/

public class SetCharacterEncodingFilter 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);

}

// Pass control on to the next filter

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);

}

}//EOC

 

然后我们在web.xml中加一些配置,就可以了,配置如下:

<filter>

<filter-name>Set Character Encoding</filter-name>

<filter-class>javawebstudio.struts_db.SetCharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>GBK</param-value>

</init-param>

<init-param>

<param-name>ignore</param-name>

<param-value>true</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>Set Character Encoding</filter-name>

<servlet-name>action</servlet-name>

</filter-mapping>

MySQL乱码问题终于算是搞定了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息