gpt4 book ai didi

multithreading - 从 servlet 内的线程访问请求对象

转载 作者:行者123 更新时间:2023-12-04 04:30:10 24 4
gpt4 key购买 nike

我在 servlet 中运行此代码

public void doPost(HttpServletRequest request, HttpServletResponse response) {
final HttpServletRequest requestF = request;
Runnable runner = new Runnable() {
public void run() {
String something = requestF.getParameter("anything");
//do other things...
}
};
Thread thread = new Thread(runner);
thread.start();

但是当我尝试从请求对象中获取参数时它会抛出异常。
Exception in thread "Thread-25" java.lang.NullPointerException
at org.apache.catalina.connector.Request.parseParameters(Request.java:2560)
at org.apache.catalina.connector.Request.getParameter(Request.java:1086)
at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:355)
at javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:158)
at br.com.test.controller.ajax.MyServlet$1.run(MyServlet.java:54)
at java.lang.Thread.run(Thread.java:619)
requestF对象不为空,我已经检查过了。
有谁知道我是否可以访问新 Thread 中的请求对象?

最佳答案

事实上,请求不为空。
我怀疑发生的情况是,由于您有对请求对象的引用,GC 没有收集它。
但是,在处理响应后,执行了一些有关参数的清理代码(即删除请求参数的所有条目)。
我想这可能是为了释放内存资源,而不是等待 GC,这就是为什么您面临这个空指针异常的原因,这不是由于对请求对象的空访问,而是由于参数之一
我建议您获取参数集合,将其复制到新的数据结构(即 - map )并将其传递给您的线程。
此外,您应该考虑是否希望您的线程在响应发送到客户端之前运行,但这纯粹是一个设计问题。

关于multithreading - 从 servlet 内的线程访问请求对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11675121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com