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 閱讀(4005) 評論(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的風險更小一些 :)
            回復  更多評論   

          My Links

          Blog Stats

          常用鏈接

          留言簿(9)

          隨筆分類(94)

          隨筆檔案(93)

          tech

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 镇雄县| 天峨县| 怀来县| 宝清县| 修水县| 新乡市| 富宁县| 登封市| 红河县| 金塔县| 襄汾县| 微博| 镶黄旗| 庐江县| 江西省| 武宣县| 怀远县| 滁州市| 临沂市| 慈利县| 奈曼旗| 临潭县| 亳州市| 延安市| 湖州市| 宜川县| 绥芬河市| 隆回县| 类乌齐县| 惠东县| 克什克腾旗| 阜新市| 紫金县| 民丰县| 固镇县| 楚雄市| 蓬溪县| 石河子市| 曲阳县| 门源| 阿克苏市|