`
wls981
  • 浏览: 135893 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

Tomcat 乱码之request.setCharacterEncoding

阅读更多

通常情况下Tomcat中遇到乱码问题,解决的思路都是保证数据库+程序+页面编码三码一致就能解决,今天遇到乱码,奔着同样的思路去解决,可不灵光了。

 

问题描述:jforum开源论坛,官方下载下来安装后一切正常,没有乱码问题。现在jforum中增加了一个filter做自动登录,filter功能很简单,判断当前请求中有没有某个参数,有的话就执行自动登录,代码如下:

public void doFilter(ServletRequest req, ServletResponse res,
		FilterChain chain) throws IOException, ServletException {
	String pal = req.getParameter("_PAL");
	if(pal != null) {
		//do autologin...
	}
	chain.doFilter(req, res);
}

 

可在web.xml中加了这个filter以后,所有post的中文全乱码了(不管有没有"_PAL"参数),去掉filter又好了,凌乱了,百思不得骑姐。

 

正常情况下就是想到在filter中增加request.setCharacterEncoding("UTF-8")之类的调用(其实在我的filter后面jforum进行类似这样的调用的,所以要搞明白为啥还要在我的filter里加),加了之后确实是好的。但明眼一看filter里没干啥呀,为啥filter就影响了这个呢?于是乎tomcat源码出动了,经过观看tomcat源码一番,终于明白,原来当request.getParameter方法执行的时候,tomcat就已经去解析整个请求中所有参数了(解析的时候就会应用上编码),而这之后的所有request.setCharacterEncoding调用对参数来说不再起作用(因为所有参数已经被解析过了),所以结论就是:如果要调用request.setCharacterEncoding进行编码设置,一定要在任何参数被访问之前调用。

分享到:
评论
1 楼 redcoatjk 2015-11-09  
yes
我想这就是struts action中调用request.setCharacterEncoding 设置post 格式无效的原因.

相关推荐

Global site tag (gtag.js) - Google Analytics