传递HttpServletRequest对象作为参数

时间:2011-05-29 17:27:59

标签: java multithreading servlets

通常,我需要通过调用servlet的html表单上传大文件,然后使用繁重的算法操作该文件并返回xml文档作为响应。 整个过程需要花费很多时间,所以为了避免浏览器超时连接,我决定创建一个对象(扩展Thread)来执行耗时的过程(上传文件并对其进行操作)一个不同的线程,它将能够指示进程的进度。为此,我需要将HttpServletRequest请求作为参数传递给对象。 当我试图解析请求参数(我使用apache commons FileUpload)时,我得到以下异常:

"the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null" .

是否可以将HttpServletRequest对象传递给扩展Thread的对象?如果是这样,安全地做这件事的正确做法是什么?

2 个答案:

答案 0 :(得分:3)

你不应该。当在线程中使用请求对象时,请求可能不再有效,并且Tomcat可能已经清除它(因此您的例外)(当然,假设您的表单确实是enctype="multipart/form-data"

因此,为了正确处理此问题,请从请求中提取数据并将其传递给新线程。因此,您不会依赖于请求对象 - 仅限于其内容。

请注意,Servlet 3.0为异步服务器端处理添加了一个选项,这似乎是一个不错的选择 - check it out

答案 1 :(得分:0)

您收到的错误表示客户端上的表单可能未正确设置。确保您的表单定义如下:

   <FORM action="YOUR_SERVLET"
   enctype="multipart/form-data"
   method="post">