struts 1.2 文件上传部分剖析
参见《struts1.2 文件上传处理(引自javablog)》一文:
http://blog.163.com/old_tiger@126/blog/static/55145766200861425941381/
?
文中有一些解释错误之处,纠正如下:
?
//?从session中清空maxUploadSize???? ? ? ? ??
request.getSession().removeAttribute("maxUploadSize");?
//不需要清空maxUploadSize, 因为每次请求到来时是由RequestProcessor中的processPopulate方法->RequestUtils.populate()->从而触发multipartHandler.handleRequest(request); 如果从session 中清空了这一自定义的参数,那么下次请求来时这个设置就没有了。
?
?//?请求数据的size超出了规定的大小.
request.getSession().setAttribute(BasicConstants.baseSizeLimitExceededException,?e);
//按照文中的描述,exception应该都保存在request范围内而不是session。
?
Struts根本没有把上传过程中出的超出最大值的异常带到Action,因为那是不可能的
//不是说不可能,而是因为multipartHandler.handleRequest(request)是在RequestProcessor的processPopulate方法中被调用,而action的逻辑处理要在RequestProcessor的processActionPerform方法中。如果真要把processPopulate中的异常带到processActionPerform中也是有办法的,比如把异常设在request的attribute中,在action处理的时候先去检查一下有没有出现这些异常等,但这就需要稍微改动一下struts的框架了。
?
<controller>中设置以下这些不是必需的:
<set-property?value="true"?property="inputForward"?/>
<set-property?value="text/html;?charset=UTF-8"?property="contentType"?/>
?
struts在处理异常请求的时候将出现的ServletException和IOExcepton都交给了上层去处理了,根本不会抛出来。所以这两种异常是抓不到的。
//描述不准确,exception的配置处理是在processActionPerform中的processException函数中,而这发生在processPopulate方法之前,当然是抓不到的。
?
?