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 閱讀(4003) 評論(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

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 长宁县| 玉山县| 墨脱县| 淮滨县| 聂拉木县| 葵青区| 桐城市| 麻阳| 龙泉市| 彩票| 海伦市| 保靖县| 白山市| 西盟| 界首市| 泾阳县| 呼图壁县| 前郭尔| 武清区| 洛南县| 华亭县| 昌宁县| 盐源县| 普宁市| 修水县| 克什克腾旗| 栖霞市| 当涂县| 新平| 周宁县| 库车县| 深圳市| 新竹市| 荥阳市| 乌兰察布市| 裕民县| 襄汾县| 卫辉市| 炉霍县| 建水县| 砚山县|