【问题标题】:Passing Session parameters to Thread将会话参数传递给线程
【发布时间】:2015-10-03 09:36:33
【问题描述】:

一旦用户单击提交按钮,我想在 Servlet 的 Web 项目中同时执行两项任务
1. 运行代码来触发一些后端活动
2. 向用户显示网页。
我尝试了代码示例here

由于我设置的会话属性很少,我需要在其中一个线程中进行设置。我尝试将第一个点放在一个线程中,第二个点放在第二个线程中,但变量没有从 doPost() 方法解析到线程。

小服务程序:

public class JOBRUN extends HttpServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse     response) throws ServletException, IOException {
     AESASNewOpenPeriod=request.getParameter("AESASNewOpenPeriod");
     ScriptRunOption = Integer.parseInt(request.getParameter("AESASJOBRUNOPTION"));
     HttpSession session=request.getSession();
     String Stream="aaaa";
     session.setAttribute("AEStream", Stream);
     //Do Job 1 (Update table)
     //Do Job 2 (Display webpage to user)
        }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);

}

【问题讨论】:

  • 你能显示代码吗:你尝试了什么?
  • 您不需要将会话参数传递给线程。线程可以自己获取它们。不清楚你在问什么。
  • @a3.14_Infinity: 用 servlet 代码更新
  • @EJP:参考上面的代码,我想同时执行“Job 1”和“Job 2”。
  • 你想在请求的范围内做这些任务吗?即,您希望它作为阻塞 - 意味着只有在完成 2 个任务后,才应该发回响应?

标签: java multithreading servlets


【解决方案1】:

您可以创建一个匿名线程(如果您不想要一个专用的 Thread 类)作业 1。

new Thread(new Runnable() {
    Session localSession = session;// assign the session object to thread variable.
    public void run() {
        // you can access localSession here. and do the JOB 1
    }
}).start();// this will run asynchrously(non blocking).

此外,如果您只想传递一些属性来执行作业 1(即,如果您不想更改会话),您可以只传递相关属性。例如

String threadStream = session.setAttribute("AEStream");//local memeber variable  inside anonymous thread

然后从线程的下一行开始,您可以执行作业 2。

注意:如果你的意思是别的——使用 request 运行异步工作线程,你可以从 Servlet 3.x AsyncContext

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2015-03-08
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多