Servlet可以进行多步交互吗?

时间:2011-09-22 00:39:07

标签: java servlets

有没有办法开始执行java Servlet代码(具体来说,在Websphere Application Server中)(一个会话,Servlet上的一个线程),然后暂停以从各个点的调用客户端获取更多信息?我要求当前会话和正在进行的Servlet线程在指定之前不会死亡,而是等待(打开)来自客户端的信息。

这种持续的对话是否可行?或者只能启动Servlet调用“doPost” - 然后Servlet会忽略客户端直到它完成?

3 个答案:

答案 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 modelServlet 3.0 Suspend/Resume support相关。

像帖子描述一样工作的Web框架(实际上,它们在不同的连接中恢复)有时被称为 Continuation-Based框架。我不确定Java中的任何这样的框架(因为Java语言不利于这样的模型)但是有两个相当众所周知的一般原则的例子:

  1. Seaside(适用于Smalltalk)和;
  2. Lift(适用于Scala)。
  3. 希望这有点用处。

答案 2 :(得分:1)

您可以在请求之间保存/更新会话状态,当下一个请求到来时,您可以恢复并继续执行任何操作。