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)是在RequestProcessorprocessPopulate方法中被调用,而action的逻辑处理要在RequestProcessorprocessActionPerform方法中。如果真要把processPopulate中的异常带到processActionPerform中也是有办法的,比如把异常设在requestattribute中,在action处理的时候先去检查一下有没有出现这些异常等,但这就需要稍微改动一下struts的框架了。

 

<controller>中设置以下这些不是必需的:

<set-property value="true" property="inputForward" />
<set-property value="text/html; charset=UTF-8" property="contentType" />

 

struts在处理异常请求的时候将出现的ServletExceptionIOExcepton都交给了上层去处理了,根本不会抛出来。所以这两种异常是抓不到的。

//描述不准确,exception的配置处理是在processActionPerform中的processException函数中,而这发生在processPopulate方法之前,当然是抓不到的。

 

 

猜你喜欢

转载自strength-java.iteye.com/blog/1694455