浏览 3356 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-23
最后修改:2009-03-05
具体表现是: 1. 表单提交之后,就会出现乱码,数据到action里面的时候已经是乱码,存入数据库也是乱码, 最后在页面显示的时候,当然也是乱码! 2. 对于本来在数据库里面不是乱码的数据,在页面上显示一切正常. 3. 对于url 问号后面的参数,因为我有对这些参数做了编码处理,所以这种类型的参数没有乱码现象. 解决过程以及思路: 1. 由于该项目开始编码的时候,就已经统一了开发环境, 编辑器的编码也都统一为gb2312,页面编码也统一为gb2312; 但是后来新加进了两位开发人员,大家由于比较忙,没有跟新来人员约定好编辑器编码模式. 起初以为是因为编辑器编码不同,导致出现乱码问题,所以去查看了myeclipse对jsp的编码,发现没有任何问题. 2. 由于该项目采用框架是 webwork2.1.6 + hibernate2 ,表单提交的时候用的是model-driven模式,页面上的form提交方式为"post",表单提交后,封装成vo对象时出现了乱码. 这时就怀疑是webwork的 webwork.properties文件的区域和编码设置可能和编码过滤器encodingFilter冲突了, 因为webwork2.1.6 的编码过滤器对于webwork的自动封装不起作用,所以把编码过滤器注释掉,再次运行,结果问题依旧. 于是又反过来,把webwork.properties的编码设置注释掉,甚至webwork.properties的编码设置和编码过滤器同时注释掉,都不能解决问题..但并没有引发其他编码问题,问题依旧是表单提交,webwork把页面数据封装成数据实体的时候出现乱码. 3. 于是上网搜了下资料,无非是修改webwork.properties文件,编码过滤器, 还有就是在tomcat的server.xml文件里面加上URIEncoding="gb2312" 之类的,几乎所有方法都试过,问题还是不能解决. 再也想不出别的方法了,于是决定自己写一个ServletDispatcher,在这里面设置request编码,结果还是问题依旧.(这个方法在事后想了下,发现其实这里做的和编码过滤器做的是一样的,多此一举了) 4. 然后抱着尝试的心态在某个form页面的method改为"get" , 提交后竟然没乱码了..这时候傻眼了,这样得改好多jsp文件..而且get方式没怎么用过,以前的参数传递不知道会不会出问题. 虽然看似问题好像解决了,但是糊里糊涂的,心里总是不踏实,而且如果真得靠这个方法解决的话..也很不甘心. 5. 最后在无意中看了下 web.xml 文件 , 这时候发现问题了, 原来 cas的认证过滤器比字符过滤器先加载了: <!--cas认证:--> <filter-mapping> <filter-name>CASFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--字符过滤器--> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 根据servlet2.3规范filter执行是按照web.xml配置的filter-mapping先后顺序进行执行,所以上面的配置会导致url请求先进行CASFilter的过滤器处理,这时候没有做编码处理,已经是乱码,到下面的encodingFilter处理时已经时乱码,再做编码处理已经没有用处。 总结: 因为这项目开发进度紧,每次从cvs更新的更新量都挺大,具体更新了些什么内容也没空去看,都只知道加了cas认证,但没有仔细看更新了哪些文件,所以一直忽略了web.xml文件. 大家以后做项目的时候,如果要加cas认证或者是别的安全检验的时候,记得留意这个filter的加载顺序呀! 最后: 感谢周进大虾~~~~~~~~ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-07-30
很好的一个分享.
看来以后还是得编码处理的filter放在配置文件的最前面保险点 |
|
返回顶楼 | |
发表时间:2008-11-17
学习了,还真是没想到是filter顺序的问题。
谢谢楼主,以后遇到同类型问题,就有个参照了~ |
|
返回顶楼 | |
发表时间:2008-12-11
楼主好文章,我也出现了一模一样的情况。多谢楼主
|
|
返回顶楼 | |