Dev Zone
偏执狂才能生存,人生/事业的路上需要再坚持一下
但是又怎么说得清坚持的结果,道得尽坚持的含义

2006年2月21日

     发现一个问题,使用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 阅读(3919) | 评论 (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 阅读(1034) | 评论 (1)编辑 收藏
 
暂时记下,没想透彻,思考所得、个人见解以后再加入。

企业发展的4个阶段:
  • 产品阶段
  • 资产阶段
  • 资本阶段
  • 品牌阶段

    企业管理的4个阶段:
  • 人治,嘴上说
  • 法治,建立制度
  • 企业文化
  • 目标管理,充分发挥员工的积极主动型,自我管理
  •  

    posted @ 2006-02-21 02:13 dev 阅读(736) | 评论 (0)编辑 收藏
     

          blog很好,blogjava暂时感觉也很好,可是为什么不能写只允许自己看的日志呢?虽说blog就是为了大家能够分享彼此的观点感想,但是总有一些东西是不便公开或者暂时不能公开的。如果允许写只允许自己看的日志,blog的应用范围就会更大,价值也会被充分挖掘了。
         也可能是我愚昧,对blog了解还不深吧,上述所说的blog也许已经出现了(自己搞一个得了,笑谈)。

    posted @ 2006-02-21 02:02 dev 阅读(237) | 评论 (0)编辑 收藏