将HttpServletRequest对象存储在队列中以便以后处理是危险的吗?

时间:2011-04-05 18:11:37

标签: java servlets

所以,我正处于一种情况,我想排队一堆HttpServletRequest对象进行异步处理。暂时搁置这是否是一个明智的策略 - 实际上就是在这种情况下,因为我正在尝试改造一个糟糕的遗留系统 - 这是一件危险的事情吗?

我在这里关心的是HttpServletRequest对象是否包含任何可能导致死锁或资源争用问题的宝贵资源或开放连接。

这里假设我正在使用doPost()方法实现一个简单的servlet,该方法接受HttpServletRequest对象,将其放入LinkedBlockingQueue,然后向用户发送某种股票响应(如301重定向到确认页面) )。

谢谢!

2 个答案:

答案 0 :(得分:6)

我已经看过码头的内部,我可以向你保证,将这个结构从当前的请求中移出会非常非常糟糕。有各种当前连接状态,不能在当前请求之外使用。我不禁想到,对于几乎任何servlet容器都是如此。

听起来您正计划响应原始请求,然后进行一些额外处理。我建议将原始请求中所需的信息复制到单独的数据结构中以进行离线处理。另外,如果您正在处理需要HttpServeletRequest的代码,您总是可以使用代码所需的数据来模拟您自己的代码。

答案 1 :(得分:1)

我做了一个非常相似的事情,我遇到的一个问题是,Jetty似乎在某个时刻清理了HttpServletRequest内的内容,从而留下了一些null的返回值getXYZ方法,甚至将NPE投给别人。

所以,是的,这很危险。

我现在在doPostdoGet中复制我需要的内容,并完全忘记该实例。