struts中enctype="multipart/form-data",request.getParameter("file") 是null的问题分
2008-06-26 08:54
996 查看
struts中enctype="multipart/form-data",request.getParameter("file") 是null的问题分
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"/> 以上是我现在知道的解决方案,不知道能不能暂时解决大家的问题。 转自:http://blog.csdn.net/luyang1016/archive/2007/06/18/1656770.aspx |
相关文章推荐
- struts中post方式上传文件,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问题的解决
- FORM的ENCTYPE="multipart/form-data" 时request.getParameter()值为null问题的解决
- 当FORM的ENCTYPE=&quot;multipart/form-data&quot; 时request.getParameter()获取不到
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
- struts2开发环境中,enctype="multipart/form-data"上传文件时,request.getInputStream()为null的原因
- 关于enctype="multipart/form-data" ,后台request.getParameterMap()
- struts2开发环境中,enctype="multipart/form-data"上传文件时,request.getInputStream()为null的原因(转http://topic.csdn.net/u/20101210/11/78454a19-7
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
- (转)struts2开发环境中,enctype="multipart/form-data"上传文件时,request.getInputStream()为null
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 ?
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
- request.getParameterValues()与enctype="multipart/form-data"不能共用
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
- [置顶] 利用form从Jsp到Servlet传值为NULL问题(enctype="multipart/form-data")(fileupload)