首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

使用struts时遇到中文乱码有关问题

2012-06-29 
使用struts时遇到中文乱码问题最近在学习Struts开发时遇到了中文乱码问题,现在终于解决了,呼。。。花了好三天

使用struts时遇到中文乱码问题
最近在学习Struts开发时遇到了中文乱码问题,现在终于解决了,呼。。。花了好三天才搞定,真没效率。。。

用Struts做了一个增加数据功能,查看数据库后发现有中文乱码

首先我以为是数据库的编码格式问题,于是修改了表的编码格式(原来是GBK),改为utf8,经过测试发现还是有中文乱码问题,后来做了一个测试表进行测试,不通过Struts进行数据库的操作,没有中文乱码的问题,所以由此判断不是数据库的编码格式,而问题锁定在程序中

Web开发时,我将jsp文件的编码格式都设置为utf-8(在Eclipse工具栏的window->preferences下可以进行编码设置),所以也不是jsp的问题

接下来就是查看页面填写数据后,数据的传递流程(其实也就是struts的操作过程,不过这里不是详细的过程了),页面post数据到相关url后,首先是找到ActionServlet,再找到对应的FormBean进行赋值操作,最后在相关Action进行Excute
我修改了连接数据库的URL,在URL后面加入了"?useUnicode=true&characterEncoding=utf8"
在这之前又在Tomcat配置文件server.xml中的Connector元素加入URIEncoding="UTF-8"
在dao中进行数据insert之前先将数据打印了一下,发现打印出了乱码,于是也判断是数据操作前就有了中文乱码问题;接下来在FormBean的setter方法中写了println(),再次打印数据,发现有中文乱码,于是终于明白是在页面传入到FormBean之前就产生乱码

终于找到了解决的方法,就是创建一个继承HttpServlet并且实现Filter接口的类,实现Filter接口的doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)方法,在web.xml文件中配进行配置
中文乱码问题就解决了

最后我删除了之前在读取数据库操作的URL后的"?useUnicode=true&characterEncoding=utf8"这段代码,也没有中文乱码问题,所以加这段也没什么用

代码如下:

package struts.utils;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.http.HttpServlet;public class EncodingFilter extends HttpServlet implements Filter {private static final long serialVersionUID = 8303042696511641966L;@SuppressWarnings("unused")private FilterConfig filterConfig;public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException {request.setCharacterEncoding("utf-8");             filterChain.doFilter(request, response);    }public void init(FilterConfig filterConfig) throws ServletException {this.filterConfig = filterConfig;}}


web.xml的配置如下
<filter>    <filter-name>encodingFilter</filter-name>    <filter-class>struts.utils.EncodingFilter</filter-class></filter><filter-mapping>    <filter-name>encodingFilter</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>

热点排行