![](/img/trans.png)
[英]RxJava: How can I wrap a multi-step operation, returning the step complete to observers?
[英]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語言不利於此類模型),但是有兩個眾所周知的通用原理示例:
希望這是有用的。
您可以保存/更新請求之間的會話狀態,當下一個請求到來時,您可以還原並繼續執行您的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.