使用了struts2框架后,使用commons-fileupload进行文件上传操作时会出现upload.parseRequest(request)为null的现象。以下提供两种解决方法:
1 修改struts2配置文件
在struts2配置文件中添加以下配置:
<constant name="struts.multipart.handler" value="myRequestParser" />
<bean type= "org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name= "myRequestParser" class= "com.MyRequestParser"
scope= "default" optional= "true" />
并新建一个类:
package com;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest;
public class MyRequestParser extends JakartaMultiPartRequest {
public void parse(HttpServletRequest servletRequest, String saveDir) throws IOException { }
}
这个类的方法内部是空的。
这种方法可以解决以上问题,但是,我发现这个方法有一个弊端,使用了这个方法后,在使用ajax进行异步文件上传时会出现空指针异常的错误。
function ajaxFileUpload() {
$.ajaxFileUpload({
url : 'upload_upload.action',//请求路径
secureuri : false,
fileElementId : 'file',// 上传控件的id
dataType : 'json',
data : {myid :myid}, // 其它请求参数
success : function(data, status) {
},
error : function(data, status, e) {
}
});
}
用上边的代码进行异步文件上传,在后台获取参数会出现NullPointException。
别着急,下面第二个方法可以完美避免以上问题。
2 修改web.xml文件
<filter-mapping>
<filter-name>struts2filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
改为:
<filter-mapping>
<filter-name>struts2filter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
问题完美解决。