Java servlet可以进行多步骤交互吗?
有没有办法开始执行JavaServlet代码(特别是在WebSphereApplicationServer中)(一个会话,Servlet上的一个线程),然后在各个点暂停以从调用客户端获取更多信息?我要求当前会话和正在进行的Servlet线程在指定之前不会消亡,而是保持等待(打开)来自客户端的信息Java servlet可以进行多步骤交互吗?,java,servlets,Java,Servlets,有没有办法开始执行JavaServlet代码(特别是在WebSphereApplicationServer中)(一个会话,Servlet上的一个线程),然后在各个点暂停以从调用客户端获取更多信息?我要求当前会话和正在进行的Servlet线程在指定之前不会消亡,而是保持等待(打开)来自客户端的信息 这种持续的对话可能吗?或者只能启动对“doPost”的Servlet调用,然后Servlet忽略客户机直到它完成吗?我没有直接这样做,但是底层支持与和有一定的关系 与post描述类似的Web框架(实际上
这种持续的对话可能吗?或者只能启动对“doPost”的Servlet调用,然后Servlet忽略客户机直到它完成吗?我没有直接这样做,但是底层支持与和有一定的关系 与post描述类似的Web框架(实际上,它们是跨不同连接恢复的)有时称为框架。我不确定Java中是否有这样的框架(因为Java语言不利于这样的模型),但有两个相当著名的例子说明了一般原则:
希望这有点有用。您可以在请求之间保存/更新会话状态,当下一个请求出现时,您可以恢复并继续您正在执行的操作。如建议,我将使用存储在会话中的对象来维护所需的状态。如果需要使用
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进行另一个查询,并且事务对象已经建立(它存储在会话中),则会从会话中检索并继续。