stone2083

          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):
          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);
                  }
              }
          看到?jīng)]?
          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

          Feedback

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

          確實(shí)是如此。
          之前我也是碰到了這個(gè)問題。
          我切換回了org.apache.struts2.dispatcher.FilterDispatcher。
          等待官方修復(fù)的發(fā)布。  回復(fù)  更多評(píng)論   

          # re: Struts2.1.6 StrutsPrepareAndExecuteFilter bug[未登錄] 2009-06-11 23:04 阿風(fēng)

          我用spring的CharacterEncodingFilter  回復(fù)  更多評(píng)論   

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

          個(gè)人不希望僅僅因?yàn)殁嵔鉀Q這個(gè)bug,而引入對spring-web的依賴。
          手寫一個(gè)CharacterEncodingFilter也是比較方便的事情。

          當(dāng)然,切會(huì)org.apache.struts2.dispatcher.FilterDispatcher,也是一個(gè)可選方案。
          當(dāng)時(shí)自己不選擇FilterDispatcher的原因是:
          在應(yīng)用測試的時(shí)候,順帶測試struts2 StrutsPrepareAndExecuteFilter(官方推薦)方案.免得等2.1.7發(fā)布后,在換回StrutsPrepareAndExecuteFilter時(shí),又發(fā)現(xiàn)其他問題。
          相對來說,刪除一個(gè)Filter的風(fēng)險(xiǎn)更小一些 :)
            回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 元谋县| 澄迈县| 海原县| 黑山县| 额敏县| 南康市| 凤山市| 抚顺县| 四子王旗| 肇庆市| 万山特区| 长子县| 鄂托克旗| 昔阳县| 和林格尔县| 肇庆市| 泌阳县| 德化县| 京山县| 克东县| 永寿县| 榕江县| 上杭县| 平顺县| 丘北县| 宜丰县| 彭水| 宕昌县| 文登市| 安西县| 巨鹿县| 新安县| 苍溪县| 泊头市| 吴江市| 灌云县| 辰溪县| 永顺县| 来凤县| 万宁市| 昂仁县|