Struts2.1.6 StrutsPrepareAndExecuteFilter bug
在用strust2.1.6做小項(xiàng)目,結(jié)果居然發(fā)現(xiàn)在post數(shù)據(jù)的時(shí)候,居然有亂碼。自認(rèn)為對編碼也算了解,立馬check應(yīng)用的content type,struts2配置的struts.locale,struts.i18n.encoding,沒錯(cuò),都是統(tǒng)一使用了UTF-8。
那是為什么呢?沒辦法,只能debug應(yīng)用,結(jié)果發(fā)現(xiàn):
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之后,在沒有設(shè)置正確的encoding之前,解析request中的parameters,能成嗎?
無奈之下,只能暫時(shí)用CharacterEncodingFilter這個(gè)filter設(shè)置request的character,猥瑣地臨時(shí)解決問題。
今天打算向Struts提交bug的時(shí)候,發(fā)現(xiàn)該bug在2.1.7版本中被修復(fù),詳見: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 閱讀(4002) 評(píng)論(3) 編輯 收藏 所屬分類: java