有没有办法开始执行java Servlet代码(具体来说,在Websphere Application Server中)(一个会话,Servlet上的一个线程),然后暂停以从各个点的调用客户端获取更多信息?我要求当前会话和正在进行的Servlet线程在指定之前不会死亡,而是等待(打开)来自客户端的信息。
这种持续的对话是否可行?或者只能启动Servlet调用“doPost” - 然后Servlet会忽略客户端直到它完成?
答案 0 :(得分:2)
根据建议,我会使用会话中存储的对象来维护所需的状态。如果需要某些操作来使用HttpSession
API中的以下方法将会话超时扩展到webapp默认值之外,您还可以通过servlet修改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);
答案 1 :(得分:1)
我没有直接使用此功能,但基础支持有点与Jetty's continuation model和Servlet 3.0 Suspend/Resume support相关。
像帖子描述一样工作的Web框架(实际上,它们在不同的连接中恢复)有时被称为 Continuation-Based框架。我不确定Java中的任何这样的框架(因为Java语言不利于这样的模型)但是有两个相当众所周知的一般原则的例子:
答案 2 :(得分:1)
您可以在请求之间保存/更新会话状态,当下一个请求到来时,您可以恢复并继续执行任何操作。