Struts2.1.6 StrutsPrepareAndExecuteFilter bug

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吧 :)


你可能感兴趣的:(Struts2.1.6 StrutsPrepareAndExecuteFilter bug)