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

2006年2月20日

     发现一个问题,使用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)编辑 收藏
     
  • XP
  • SCRUM
    需要并且应该持续关注、思考。

    一些共同点:
  • 快速迭代
  • 持续改进
  • 注重测试
  • 团队协作
  • posted @ 2006-02-20 02:10 dev 阅读(196) | 评论 (0)编辑 收藏
     
           很久没有来这儿了。其实我很喜欢BLOG,可以记下每天工作中的所思所想。我是一个喜欢思考的人,经常有一些想法,有这么一块地方,能够把自己的经验、想法、创造记录下来,沉积起来,对自己无疑是一种财富。

          不知道是不是有人会写项目经理日志,我觉得这是一个很好的事情。以前做项目管理的时候只是弄了一个“项目事件”,记录项目开发过程中发生的、自己觉得是重要的事情,比如某某人进入项目组、离开项目组了,某某模块版本发布了,发生了什么大的费用等等。写项目经理日志,或者开发日志、工作日志也行,把自己在工作中、项目开发过程中、项目管理过程中的零零碎碎的想法记录下来,会是一件很棒的事情。人不应该懒,再累心情再遭也应该坚持写这种日志。

          或许小笔记本、那种可以随身携带的那种是一件更好的日志记录工具,可惜容量不够,而且不能检索。掌上电脑?写起来似乎麻烦了,table-pc,好像又太大了,携带不方便,可惜,要是手写识别技术更智能一点、掌上电脑更薄一点,而且可以展开屏幕就棒了。可惜。

     
    posted @ 2006-02-20 01:19 dev 阅读(178) | 评论 (0)编辑 收藏