2016-11-08 74 views
0

我想在Java中的doPost方法結束之前獲取HTTP狀態代碼。例如在Python中有self.send_response(200),它以異步方式發送狀態?以異步方式獲取HTTP狀態代碼

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
* response) 
* 
*/ 
@SuppressWarnings("unchecked") 
@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    //Final result object 


    //I want to send a http status code 200 before the task running 

    myThreadPool = Executors.newFixedThreadPool(2); 
    Future taskOne = myThreadPool.submit(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       try { 
        // My first task 
       } catch (ServletException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

    }); 

    // Task two 
    . 
    . 
+1

莫非你到目前爲止向我們展示你的代碼,並告訴你正在使用哪個框架? – Erik

+0

你的問題確實不清楚。你想異步檢索一個int? http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletResponse.html#getStatus-- – Taylor

+0

您好@Taylor,我希望我的API以異步方式工作,所以,首先,我會發送我的請求並且服務器應該以一個http代碼200響應,並且在後臺繼續執行我的doPost,並且在所有任務完成後它將發送響應。 – user3773203

回答

0

我不完全知道什麼是你貼的代碼的意圖,但我能猜到你想要某種異步處理的,這樣就可以請求完成之前的一些數據發送到客戶端?

對於參考異步的servlet,例如這裏描述的:https://blogs.oracle.com/enterprisetechtips/entry/asynchronous_support_in_servlet_3

甚至還有這似乎是服務什麼的,我認爲很好的例子,你想實現:

@WebServlet("/foo" asyncSupported=true) 
    public class MyServlet extends HttpServlet { 
     public void doGet(HttpServletRequest req, HttpServletResponse res) { 
      ... 
      AsyncContext aCtx = request.startAsync(req, res); 
      ScheduledThreadPoolExecutor executor = new ThreadPoolExecutor(10); 
      executor.execute(new AsyncWebService(aCtx)); 
     } 
    } 

    public class AsyncWebService implements Runnable { 
     AsyncContext ctx; 
     public AsyncWebService(AsyncContext ctx) { 
      this.ctx = ctx; 
     } 
     public void run() { 
      // Invoke web service and save result in request attribute 
      // Dispatch the request to render the result to a JSP. 
      ctx.dispatch("/render.jsp"); 
    } 
} 
+0

謝謝!有用 。 – user3773203