使用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之前就产生乱码

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

最后我删除了之前在读取数据库操作的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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值