簡體   English   中英

將 Session 參數傳遞給 Thread

[英]Passing Session parameters to Thread

一旦用戶單擊提交按鈕,我想在 Servlet 的 web 項目中同時執行兩個任務
1. 運行代碼來觸發一些后端活動
2. 向用戶顯示網頁。
在這里嘗試使用代碼示例

由於我設置的會話屬性很少,因此我需要在其中一個線程中進行設置。 我嘗試將第一個點放在一個線程中,將第二個點放在第二個線程中,但是變量沒有從 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);

}

您可以為作業 1 創建一個匿名線程(如果您不需要專用的Thread類)。

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開始

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM