`

upload.parseRequest(request) 结果为null的一个恶心处理法

阅读更多
一、项目基本环境:struts2等

二、基本需求&问题:需要自己写程序调用common-fileupload来处理上传的文件,但在代码调用upload.parseRequest(request)来处理时,返回了空的items

三、处理方法
1、按照网上找到对该问题的相关处理方法:
<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

修改为
<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>*.action</url-pattern>
</filter-mapping>


这个处理方法的细节可以参考http://topic.csdn.net/u/20090514/10/ba62c761-e591-4c9e-859a-87907634ea13.html

2、我的处理方法
对于第1钟处理方式,网友们的意思应该是别让请求经过struts2,免得inputStream被提前读取了。虽然这样可以正常使用common-fileupload了,但这样就不经过struts2的拦截器了,而我又想让它拦一次,于是,我自己实现一个servlet.Filter,并且把它的filter次序放到struts2的filter次序之前。主要源码如下:
    public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
	chain.doFilter(new StrutsRequestWrapper((HttpServletRequest) request), response);
    }

这里先用StrutsRequestWrapper来给他wrapper一次,这样在经过struts2的filter的时候就不会有问题了。为啥呢?可以自己看看这个类
org.apache.struts2.dispatcher.Dispatcher里面的wrapRequest方法,有这么个判断:
    // don't wrap more than once
    if (request instanceof StrutsRequestWrapper) {
        return request;
    }


挺恶心的处理方式吧,我也觉得。因为暂时没想到更好的处理方式了,先这样做,把功能实现先。

如果以后有其他网友看到我这里的记录,而且有更好的建议,欢迎一起讨论。
分享到:
评论
12 楼 liuchao150 2015-10-17  
写个filter, 那struts2里的上传,File获取不到上传文件了  为null  怎么解决。  我要加那个filter 并且 Struts2上传不失效??
11 楼 星璇凌 2015-07-13  
这样改后,action中的set方法不起作用了,前台传到后台的参数都为Null了,是什么原因呢?
10 楼 l578682879 2015-05-05  
于是,我自己实现一个servlet.Filter,并且把它的filter次序放到struts2的filter次序之前
是怎么让自己写的servlet.filter 在前的啊
9 楼 花心菜 2015-01-19  
 
8 楼 menghuannvxia 2014-08-22  
如果用struts1怎么解决
7 楼 jeck001 2014-05-28  
我很少评论的 ,今天不得不评论下,高手,谢啦
6 楼 审判___ 2014-05-05  
  
5 楼 geely2317 2013-05-14  
这样就可以了。
4 楼 geely2317 2013-05-14  
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name="myRequestParser" class="com.upload.action.RequestParseWrapper"
scope="default" optional="true" />

<constant name="struts.multipart.handler" value="myRequestParser" />


--------------------------
public class RequestParseWrapper extends JakartaMultiPartRequest  {

@Override
public void parse(HttpServletRequest arg0, String arg1) throws IOException {
//super.parse(arg0, arg1);
}

}
3 楼 yehun111 2012-12-26  
得亏第二个方法,虽然恶心 但很管用,谢了
2 楼 xy_z487 2012-08-25  
这么久了,有更好的解决办法没了?
1 楼 xy_z487 2012-08-25  
发现这个东西,你是高手了
    if (request instanceof StrutsRequestWrapper) {
        return request;
    }

相关推荐

    Volley#Request(GsonRequest,MultiPartRequest)

    2. **Json参数和Gson解析**:`GsonRequest`是Volley中的一个扩展,用于处理JSON格式的数据。首先,你需要导入`com.google.gson.Gson`库。创建`GsonRequest`时,需要指定请求的URL、请求方法(GET或POST)、数据类型...

    使用fileupload组件实现文件上传功能

    List&lt;FileItem&gt; list = upload.parseRequest(request); 每个FileItem对象对应一个表单项,包含了表单项的详细信息,例如字段名、文件名、文件内容、文件类型等。FileItem对象提供了多种方法,例如: * ...

    fileupload上传代码与txt文件取值实例

    List&lt;FileItem&gt; items = upload.parseRequest(request); Iterator&lt;FileItem&gt; iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); String fileName = item.getName()...

    ajaxfileupload.js

    if (request.Files == null || request.Files.Count ) throw new ApplicationException("no file to be uploaded!"); var file = request.Files[0]; var filename = System.IO.Path.GetFileName(file.FileName);...

    Apache Commons fileUpload实现文件上传

    List&lt;FileItem&gt; items = upload.parseRequest(request); Iterator&lt;FileItem&gt; itr = items.iterator(); while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); if (item.isFormField()) { String ...

    fileupload

    文件的上传功能,只要自己构造一个servlet即可。 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException { response.setContentType(CONTENT_TYPE); // Set ...

    FileUploadAndDownLoad

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 保存文件到服务器 item.write(new File(...

    web页面导入csv文件

    本知识点主要探讨如何实现一个Web页面,允许用户上传CSV文件,并进行相关的处理。 首先,我们需要在Web页面上创建一个文件输入元素,让用户选择CSV文件。这通常通过HTML5的`&lt;input type="file"&gt;`标签实现。例如: ...

    java实现文件的上传.docx

    List&lt;FileItem&gt; items = upload.parseRequest(req); // 遍历 FileItem 列表 for (FileItem item : items) { // 获取上传的文件内容 InputStream in = item.getInputStream(); // 处理文件内容 // ... } } }...

    commons-fileupload-1.3.2jar包和commons-io-2.5jar包.zip

    items = upload.parseRequest(request); } catch (FileUploadException e) { // 处理异常 } for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 保存或处理...

    commons.jar

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { // 处理文件项 } } ``` 4. 遍历`FileItem`列表,处理每个上传的文件。 ```java String ...

    51CTO下载-FileUploadStruts

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 处理文件保存逻辑 item.write(new File("保存路径...

    Struts上传文件实现代码

    List&lt;FileItem&gt; items = upload.parseRequest(ActionContext.getContext().getServletRequest()); for (FileItem item : items) { if (!item.isFormField()) { file = item.getFile(); fileContentType = item....

    java上传图片.pdf

    `parseRequest()`方法解析请求并返回一个`FileItem`列表,然后我们可以遍历这个列表,将每个文件保存到服务器。 在实际应用中,还需要考虑以下几点: 1. 错误处理:确保捕获并处理可能出现的异常,如文件大小超出...

    struts框架文件上传

    items = upload.parseRequest(request); } catch (FileUploadException e) { log.error("Failed to parse upload request", e); return mapping.findForward("error"); } for (FileItem item : items) { if ...

    java servlet上传文件

    try { // 获取上传文件的列表 List&lt;FileItem&gt; items = upload.parseRequest(requestContext); Iterator&lt;FileItem&gt; iter = items.iterator(); // 遍历上传的文件,进行处理 while (iter.hasNext()) { FileItem item ...

    jsp实现向oracle中blob字段上传附件

    List&lt;FileItem&gt; items = upload.parseRequest(request); FileItem file = items.get(0); String fileName = file.getName(); byte[] content = file.get().getBytes(); ``` 4. **连接Oracle数据库** 使用JDBC...

    t2_JAVA系统_

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); item.write(new File("指定的...

    jsp 简单实现上传下载功能

    1. **创建下载链接**:在用户界面中,为每个可下载的文件创建一个链接,链接指向一个处理下载的JSP或Servlet。 ```html &lt;a href="download.jsp?fileName=文件名"&gt;下载文件 ``` 2. **JSP或Servlet处理下载**:在...

    JSP实训六student(JSP实现图片上传和读取显示).doc

    List pictureList = dfu.parseRequest(request); Iterator it = pictureList.iterator(); while (it.hasNext()) { FileItem item = (FileItem) it.next(); String pictureName = item.getName(); ...

Global site tag (gtag.js) - Google Analytics