HttpServletRequest объект получает переопределение после запуска потока - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь выполнить метод асинхронно, где я передаю объект httpServletRequest в качестве параметра. Но переданный запрос переопределяется после запуска потока.

Вот пример кода

class sampleServlet extends servlet{
        doPost(req,res){
        method1(req);
    }
}

method1(httpservletrequest){
new Thread(new Runnable() {
        public void run() {
            method2(httpservletrequest)
    }).start();
}

method2(httpSservletRequest){
//The request object here is different from the passed object
}

Спасибо.

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете создать другой класс, скажем ThreadSample, реализующий интерфейс Runnable, и иметь HttpServletRequest в качестве члена класса. Когда вы создаете объект класса ThreadSample, передайте свой httpServletRequest в качестве аргумента конструктора, а затем в методе run используйте член экземпляра httpServletRequest при вызове method2.

Код будет выглядеть примерно так:

public class ThreadSample implements Runnable
{

    private final HttpServletRequest httpServletRequest;



    public ThreadSample(final HttpServletRequest httpServletRequest)
    {
        this.httpServletRequest = httpServletRequest;
    }



    public void run()
    {
        method2(this.httpServletRequest);
    }

}

В вашем методе doPost класса Servlet вы можете использовать ThreadSample, например:

Thread thread = new Thread(new ThreadSample(httpServletRequest));
thread.start();

Надеюсь, это решит вашу проблему.

...