<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dev Zone
    偏執狂才能生存,人生/事業的路上需要再堅持一下
    但是又怎么說得清堅持的結果,道得盡堅持的含義

    2006年3月3日

         發現一個問題,使用struts進行文件上傳,如果有些參數沒有完全定義在ActionForm中,需要從request.getParameter獲取,在表單提交并且validate失敗返回input頁面時,這部分需要從request.getPrameter獲取的參數數據都丟失了,即使再對request進行multipart解析也不能得到。

         經過分析,發現struts的ActionServlet在接收到multipart請求之后,在RequestProcessor中會對request進行封裝:MultiRequestWrapper,然后在Action執行完之后,又將已經封裝的request重新還原。以下是部分代碼,截直RequestProcessor:

    封裝:
        protected HttpServletRequest processMultipart(HttpServletRequest request) {

            
    if (!"POST".equalsIgnoreCase(request.getMethod())) {
                
    return (request);
            }

            
            String contentType 
    = request.getContentType();
            
    if ((contentType != null&&
                contentType.startsWith(
    "multipart/form-data")) {
                
    return (new MultipartRequestWrapper(request));
            }
     else {
                
    return (request);
            }


        }

    還原:
       在doForward和doInclude中在forward和include之前都執行了下面的代碼:
            if (request instanceof MultipartRequestWrapper) {
                request 
    = ((MultipartRequestWrapper) request).getRequest();
            }


         問題就出現在這兒。在經過測試之后,發現request只能進行一次multipart解析,這或許和解析request的時候調用了request.inputStream有關,第一次調用之后再調用就不能獲取其中的有效內容了。因此發現request在調用CommonsMultipartRequestHandler.handleRequest進行解析后并還原后,調用common-upload對request進行解析已經得不到任何得提交內容了,因此當Form驗證失敗,返回input頁面時,即使再進行multpart解析,也不能通過request.getPrameter取到你想要的數據。而此時,表單中的數據卻不會丟失(定義在ActionForm中的表單域),這是因為struts的html系列tag在redisplay時值都是從ActionForm獲取的。

           在將RequestProcessor.doForward和doInclude中還原request的語句注釋后,問題得到了解決。到目前還不清楚為什么struts要還原request,難道是因為chain的原因?

           webwork中應該不會出現這個問題,因為webwork中無論ServletDispatcher還是FilterDispatcher在對request wrap之后都沒有再還原。
    posted @ 2006-03-15 06:10 dev 閱讀(3933) | 評論 (1)編輯 收藏
     
    tomcat、jdk1.4下出現The output format must have a '{http://xml.apache.org/xalan}content-handler' property!的原因:
        這是因為系統、tomcat或者jdk使用了老版本的xalan.jar。系統如果本身沒有使用,而tomcat/common/lib、tomcat/common/endorsed/lib、tomcat/shared/lib下又沒有xalan.jar的話,那就是jdk使用了老版本的xalan.jar——在jre\lib\rt.jar里面。下載最新的xalan.jar然后放到tomcat/common/endorsed下即可解決這一問題。
    posted @ 2006-03-03 19:46 dev 閱讀(1049) | 評論 (1)編輯 收藏
     
    主站蜘蛛池模板: 国产片免费福利片永久| 免费在线观看h片| 亚洲成AV人在线观看网址| 亚洲精品一卡2卡3卡四卡乱码| 国语成本人片免费av无码| 亚洲色精品VR一区区三区| 毛片网站免费在线观看| 亚洲JIZZJIZZ妇女| 免费a级毛片18以上观看精品| 美女无遮挡免费视频网站| 日韩精品电影一区亚洲| 一级片在线免费看| 国产亚洲精品资源在线26u| 久久免费福利视频| 亚洲成人免费网址| 蜜桃精品免费久久久久影院| 特级aaaaaaaaa毛片免费视频| 亚洲精品乱码久久久久久蜜桃 | 无码国产精品一区二区免费式直播 | 久久亚洲AV无码精品色午夜麻豆 | 男女啪啪永久免费观看网站| 国产亚洲情侣久久精品| 亚洲色婷婷综合开心网| 日韩免费无码一区二区三区| 亚洲一区二区三区免费观看| 免费A级毛片无码A∨男男| 日韩精品无码免费专区午夜不卡| 777亚洲精品乱码久久久久久 | 黄色免费在线观看网址| 亚洲精品你懂的在线观看| 99久久国产热无码精品免费| 国产精品亚洲一区二区无码| 亚洲色精品aⅴ一区区三区| 国产精品成人观看视频免费| 直接进入免费看黄的网站| 亚洲男人天堂2017| 国产午夜影视大全免费观看| 日韩在线不卡免费视频一区| 亚洲人成色99999在线观看| 亚洲精品国产精品乱码视色| 成年轻人网站色免费看|