将HttpServletRequest对象作为参数传递
通常,我需要通过调用servlet的html表单上传大文件,然后用繁重的算法处理该文件,并返回一个xml文档作为响应。 这整个过程需要很长时间,所以为了避免浏览器超时连接,我决定创建一个对象(扩展Thread
),这个对象将执行耗时的过程(上载文件并操作它)在不同的线程中这将能够表明过程的进展。为此,我需要将HttpServletRequest
请求作为参数传递给对象。 当我试图解析请求参数(我使用Apache的百科全书文件上传),我得到了以下异常:将HttpServletRequest对象作为参数传递
"the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null" .
是否有可能一个HttpServletRequest
对象传递给一个对象扩展Thread?如果是这样,安全地做到这一点的正确做法是什么?
你不应该。当请求对象在线程中使用时,请求可能不再有效,并且Tomcat可能已经清除了它(因此,您的例外)(当然,假设您的表单确实是enctype="multipart/form-data"
)
所以,为了处理这适当地从请求中提取数据并将其传递给新线程。因此,您不会依赖于请求对象 - 仅限于其内容。
请注意,Servlet 3.0为异步服务器端处理添加了一个选项,这对您来说似乎是一个不错的选择 - check it out。
您收到的错误表明客户端的表单可能没有正确设置。请确保您的表单是这样定义的:
<FORM action="YOUR_SERVLET"
enctype="multipart/form-data"
method="post">
它的确如此。我在doPost方法中很容易做到这一点,问题是当我将请求作为参数传递时。 – ElChe 2011-05-29 17:50:13
您的html表单是否包含值为'multipart/form-data'的enctype属性? – asgs 2011-05-29 17:30:25
是的。我可以在doPost方法中轻松完成,问题是当我将请求作为参数传递时。 – ElChe 2011-05-29 17:37:55