从Servlet内部的线程访问请求对象 [英] Accessing the request object from a thread inside a servlet

查看:72
本文介绍了从Servlet内部的线程访问请求对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我让此代码在servlet中运行

I have this code running in a 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();

但是当我尝试从请求对象中获取参数时,它将引发异常.

But it throws an Exception when i try to get the parameter from the request object.

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对象不为null,我已经检查过. 有谁知道我是否可以在新的Thread中访问请求对象?

The requestF object is not null, I've checked. Does anyone know if i can access the request object inside a new Thread?

推荐答案

是的,Zaske是正确的. 您可以使用地图对象的新实例进行复制,如下所示:

Yes, Zaske is right. You may copy using a new instance of map object, like this:

final Map<String,String> mapParameters = new HashMap<String,String>();
mapParameters.putAll(request.getParameterMap());

并在运行"方法中使用mapParameters:

and use mapParameters inside your "run" method:

public void doPost(HttpServletRequest request, HttpServletResponse response) {
    final Map<String,String> mapParameters = new HashMap<String,String>();
    mapParameters.putAll(request.getParameterMap());
    Runnable runner  = new Runnable() {
       public void run() {
           String something = mapParameters.get("anything");
           //do other things...
       }
    };
    Thread thread = new Thread(runner);
    thread.start();
}

这篇关于从Servlet内部的线程访问请求对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆