struts2 使用 jakarta 上传文件时commons fileupload的异常捕捉
问题:
??????? struts2 使用jakarta 上传文件时,如果上传文件的大小超出commons fileupload(jakarta上传文件还是依赖commons-fileupload)设置的大小就会在进入action以前抛出异常.
??????? 如果想返回用户的输入界面(input),那么页面原来的参数会丢失。
首先看一下struts2 执行一个action的过程
1.? 将用户请求发给org.apache.struts2.dispatcher.Dispatcher,
???? wrapRequest(HttpServletRequest request, ServletContext servletContext)? 方法会判断是否"multipart/form-data",如果是建立一个multiPartRequest 的实例,并且建立MultiPartRequestWrapper
?4.这之后才开始逐个进入interceptor,见DefaultActionInvocation.invoke()
?7.copy org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest,只是import上面自己的ServletFileUpload.这样就可以保存页面的所有参数了。
8.更改struts配置文件加入你自己的JakartaMultiReques
?9.更改struts.properties
struts.multipart.parser=jakarta_yourself
10.就OK啦
?
?
1 楼 netfork 2008-12-04 时间变化真快,楼主08年5月份发的贴,现在再看涉及到的源代码,已经变化不小了。
不过说实在的,FileUploadBase这个类写的真得不怎么样,把错误信息直接throw了,struts2的JakartaMultiPartRequest类也不怎么样,把异常的错误信息直接加到errors中就算完事了,太不负责任了吧,国际化在哪里啊?
commons-fileupload组件抛异常有他的道理,楼主的作法会引发一个大的漏洞,我作了个上传文件的完整分析,大家可以看下面的文章。
http://www.iteye.com/topic/287800 2 楼 xtpgyaps 2008-12-16 楼主,问下,,怎么我重构了JakartaMultiPartRequest这个类后,好像struts2不走我重构的这个类,怎么回事呢