簡體   English   中英

Servlet可以有多步交互嗎?

[英]Can Servlets have multi-step interactions?

有什么方法可以開始執行Java Servlet代碼(特別是在Websphere Application Server中)(一個會話,該Servlet上有一個線程),然后暫停以從各個點從調用客戶端獲取更多信息? 我要求當前會話和進行中的Servlet線程在指定之前都不會消失,而應一直等待(打開)來自客戶端的信息。

這種正在進行的對話可能嗎? 還是只能啟動對“ doPost”的Servlet調用-然后Servlet忽略客戶端,直到它完成?

如建議的那樣,我將使用存儲在會話中的對象來維護所需的狀態。 如果您需要采取某些措施來將會話超時時間延長到Webapp默認值之外,還可以使用HttpSession API中的以下方法來逐個Servlet修改會話:

public void setMaxInactiveInterval(int interval)指定客戶端請求之間servlet容器使該會話無效之前的時間(以秒為單位)。 時間為負數表示會話永不超時。

您只需要為會話中的對象設置/檢索建立邏輯。 通常是這樣的:

HttpSession session = req.getSession();
MyBeanClass bean;
Object temp = null;

temp = session.getAttribute("myBean");
if(temp !=null) {
    bean = (MyBeanClass) temp;
} else {
    bean = new MyBeanClass();
}

// Logic

session.setAttribute("myBean", bean);

我沒有直接這樣做,但底層支持具有一定的相關碼頭的延續模型Servlet的3.0掛起/恢復支持

像帖子描述一樣工作的Web框架(實際上,它們是通過不同的連接恢復的)有時也稱為基於Continuation-Based的框架 我不確定Java中是否有這樣的框架(因為Java語言不利於此類模型),但是有兩個眾所周知的通用原理示例:

  1. 海邊 (用於Smalltalk)和;
  2. 提升 (對於Scala)。

希望這是有用的。

您可以保存/更新請求之間的會話狀態,當下一個請求到來時,您可以還原並繼續執行您的操作。

暫無
暫無

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

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