stone2083

Struts2.1.6 StrutsPrepareAndExecuteFilter bug

在用strust2.1.6做小项目,结果居然发现在post数据的时候,居然有乱码。
自认为对编码也算了解,立马check应用的content type,struts2配置的struts.locale,struts.i18n.encoding,没错,都是统一使用了UTF-8。
那是为什么呢?没办法,只能debug应用,结果发现:
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request 
= (HttpServletRequest) req;
        HttpServletResponse response 
= (HttpServletResponse) res;

        
try {
            prepare.createActionContext(request, response);
            prepare.assignDispatcherToThread();
            prepare.setEncodingAndLocale(request, response);
            request 
= prepare.wrapRequest(request);
            ActionMapping mapping 
= prepare.findActionMapping(request, response);
            
if (mapping == null) {
                
boolean handled = execute.executeStaticResourceRequest(request, response);
                
if (!handled) {
                    chain.doFilter(request, response);
                }
            } 
else {
                execute.executeAction(request, response, mapping);
            }
        } 
finally {
            prepare.cleanupRequest(request);
        }
    }
看到没?
1) prepare.createActionContext(request, response);
2)
prepare.setEncodingAndLocale(request, response);
setEncodingAndLocale居然在createActionContext之后,在没有设置正确的encoding之前,解析request中的parameters,能成吗?

无奈之下,只能暂时用
CharacterEncodingFilter这个filter设置request的character,猥琐地临时解决问题。

今天打算向Struts提交bug的时候,发现该bug在2.1.7版本中被修复,详见:https://issues.apache.org/struts/browse/WW-3075%3Bjsessionid=3EAC5B44A949CA77B4471AA0D45754E9?page=com.atlassian.jira.plugin.ext.subversion%3Asubversion-commits-tabpanel

哎,在使用2.1.7之前,先用CharacterEncodingFilter吧 :)


posted on 2009-06-08 20:37 stone2083 阅读(3861) 评论(3)  编辑  收藏 所属分类: java

Feedback

# re: Struts2.1.6 StrutsPrepareAndExecuteFilter bug 2009-06-10 09:16 leton2008

确实是如此。
之前我也是碰到了这个问题。
我切换回了org.apache.struts2.dispatcher.FilterDispatcher。
等待官方修复的发布。  回复  更多评论   

# re: Struts2.1.6 StrutsPrepareAndExecuteFilter bug[未登录] 2009-06-11 23:04 阿风

我用spring的CharacterEncodingFilter  回复  更多评论   

# re: Struts2.1.6 StrutsPrepareAndExecuteFilter bug 2009-06-13 11:02 stone2083

个人不希望仅仅因为猥琐解决这个bug,而引入对spring-web的依赖。
手写一个CharacterEncodingFilter也是比较方便的事情。

当然,切会org.apache.struts2.dispatcher.FilterDispatcher,也是一个可选方案。
当时自己不选择FilterDispatcher的原因是:
在应用测试的时候,顺带测试struts2 StrutsPrepareAndExecuteFilter(官方推荐)方案.免得等2.1.7发布后,在换回StrutsPrepareAndExecuteFilter时,又发现其他问题。
相对来说,删除一个Filter的风险更小一些 :)
  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: