struts中post方式上传文件,enctype="multipart/form-data",request.getParameter("file") 是null的问题分析
来源:互联网 发布:springmvc json date 编辑:程序博客网 时间:2024/05/20 17:07
struts中post方式上传文件,enctype="multipart/form-data",request.getParameter("file") 是null的问题分析
这两天连续看到有人提到:struts中post方式上传文件,enctype="multipart/form-data",request.getParameter("file")时候,得到一个Null,或者直接得到 java.lang.IllegalArgumentException 这样一个异常。
结合到自己以前也遇到过这个问题,于是上网搜索了一些资料,下面这位网友的说法我觉得有些道理,因此摘抄下来。(红色自己为别人的分析,我觉得有道理)
使用struts进行文件上传,如果有些参数没有完全定义在ActionForm中,需要从request.getParameter获取,在表单提交并且validate失败返回input页面时,这部分需要从request.getPrameter获取的参数数据都丢失了,即使再对request进行multipart解析也不能得到。
经过分析,发现struts的ActionServlet在接收到multipart请求之后,在RequestProcessor中会对request进行封装:MultiRequestWrapper,然后在Action执行完之后,又将已经封装的request重新还原。以下是部分代码,截直RequestProcessor:
封装: 下面是struts的源代码:
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);
}
}
接下来我们需要作的就是将已经封装成MultipartRequestWrapper的HttpServletRequest进行还原。
解决方法:
① 写一个类,继承org.apache.struts.action.RequestProcessor ,并且override其中的doForward方法来进行解析。
package org.luyang;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.upload.MultipartRequestWrapper;
public class RequestProcessor extends org.apache.struts.action.RequestProcessor {
protected void doForward(String uri, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
HttpServletRequest myRequest = request;
if (request instanceof MultipartRequestWrapper) {
myRequest = ((MultipartRequestWrapper) request).getRequest();
}
super.doForward(uri, myRequest, response);
}
}
②在自己的struts-config.xml的<struts-config></struts-config>之间加入下面这句话
<controller processorClass="org.luyang.RequestProcessor" />
<message-resources parameter="ApplicationResources"/>
以上是我现在知道的解决方案,不知道能不能暂时解决大家的问题。
- struts中post方式上传文件,enctype="multipart/form-data",request.getParameter("file") 是null的问题分析
- struts中enctype="multipart/form-data",request.getParameter("file") 是null的问题分
- struts中enctype="multipart/form-data",request.getParameter("file") 是null的问题分
- FORM的ENCTYPE="multipart/form-data" 时request.getParameter()值为null问题的解决
- FORM的ENCTYPE="multipart/form-data" 时request.getParameter()值为null问题的解决
- FORM的ENCTYPE="multipart/form-data" 时request.getParameter()值为null问题的解决
- struts2开发环境中,enctype="multipart/form-data"上传文件时,request.getInputStream()为null的原因
- (转)struts2开发环境中,enctype="multipart/form-data"上传文件时,request.getInputStream()为null
- 文件上传 form 表单 enctype="multipart/form-data" 分析
- 表单中存在上传文件时设置enctype="multipart/form-data"的问题
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的问题
- 当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到
- FORM的ENCTYPE="multipart/form-data" request.getParameter()获取不到值
- JSP使用ENCTYPE="multipart/form-data"后request.getParameter无效问题Common-FileUpload组件解决方法
- 表单提交 enctype="multipart/form-data"的时候 request.getparameter取值为空的问题
- enctype="multipart/form-data" 文件上传,获取form 表单参数的问题
- 在form中上传文件与Enctype=multipart/form-data 的作用
- Multipart/form-data POST文件上传分析
- 用CodeSmith及DNNProjectTemplates进行DNN模块开发(2)
- UML学习-------类图(2)
- Magic Library 1.7.4提供下载
- C#.net常用函数和办法集
- 通过分析SQL语句的执行计划优化SQL
- struts中post方式上传文件,enctype="multipart/form-data",request.getParameter("file") 是null的问题分析
- UML学习-------类图(3)
- 死锁 阻塞的sql server处理
- webservices 生成验证码
- Numeric 数据类型
- c++ 与java引用比较
- 正规表达式
- 关于scanf()中加/n的一个情况的分析
- Locale 详解