Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlet可以进行多步骤交互吗?_Java_Servlets - Fatal编程技术网

Java servlet可以进行多步骤交互吗?

Java servlet可以进行多步骤交互吗?,java,servlets,Java,Servlets,有没有办法开始执行JavaServlet代码(特别是在WebSphereApplicationServer中)(一个会话,Servlet上的一个线程),然后在各个点暂停以从调用客户端获取更多信息?我要求当前会话和正在进行的Servlet线程在指定之前不会消亡,而是保持等待(打开)来自客户端的信息 这种持续的对话可能吗?或者只能启动对“doPost”的Servlet调用,然后Servlet忽略客户机直到它完成吗?我没有直接这样做,但是底层支持与和有一定的关系 与post描述类似的Web框架(实际上

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


这种持续的对话可能吗?或者只能启动对“doPost”的Servlet调用,然后Servlet忽略客户机直到它完成吗?

我没有直接这样做,但是底层支持与和有一定的关系

与post描述类似的Web框架(实际上,它们是跨不同连接恢复的)有时称为框架。我不确定Java中是否有这样的框架(因为Java语言不利于这样的模型),但有两个相当著名的例子说明了一般原则:

  • (用于Smalltalk)和
  • (对于Scala)

  • 希望这有点有用。

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

    如建议,我将使用存储在会话中的对象来维护所需的状态。如果需要使用
    HttpSession
    API中的以下方法将会话超时延长到webapp默认值之外,您还可以逐个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);
    

    也许您正在寻找的是AJAX?不过,在我的例子中,对象是一个用户事务,由服务器在每个线程的基础上分配,并通过查找检索,而不是由我自己构造。因此,如果调用Servlet的线程完成并启动新的Servlet调用(新线程),我将失去对原始用户事务的访问权,这仅仅是因为线程已更改且我的查找不同。您需要将事务与Servlet解耦。用户操作调用servlet,servlet调用事务对象,并将其存储在会话中。如果用户对servlet进行另一个查询,并且事务对象已经建立(它存储在会话中),则会从会话中检索并继续。