Java Servlet 和 GWT 服务在第一次请求时不共享 session

标签 java session gwt servlets

我有带有文件上传 Servlet 的 GWT 应用程序。 GWT 应用程序需要了解上传进度并使用 GWT 服务异步请求。

在第一次文件上传期间首次创建 HttpSession 对象。 在前端使用 GWT 服务请求上传状态之后,GWT 服务使用以下代码访问它:

public class ProgressServiceImpl extends RemoteServiceServlet implements ProgressService {
    private static final long serialVersionUID = 1L;

    @Override
    public List<ProgressChangeEvent> getProgressEvents(String progressName) {
        HttpSession session = getThreadLocalRequest().getSession(false);
        System.out.println("Session in ProgressService: " + String.valueOf(session != null ? session.getId() : null));
        return (session != null) ? Progress.getProgressEvents(session, progressName) : null;
    }
}

在整个上传过程中, session 为空。 但是,下次我上传文件时,正确的 session 就在那里。

如果我调用 getSession(true),第一次和下一次第一个对象丢失时都没有帮助,所以我相信在这种情况下 getSession(false) 是正确的调用方法,但它并没有很长一段时间没有同步 session 。

这是一个错误还是一个期望的行为?如果它是按设计这样做的,我该如何解决它以确保我始终以异步方式随时获取上传状态?

最佳答案

GWT 服务一个servlet。它的行为与任何其他 servlet 一样。

您的错误似乎在这一行中:

HttpSession session = getThreadLocalRequest().getSession(false);

根据 javadocs 指定 false ,您说过“如果 session 尚未启动,则不必启动 session ,而是返回 null”。相反,指定 true 表示您想要启动 session 。然后,应用程序发出的下一个请求将有一个 session ,该 session 是在此请求中发出的。

关于Java Servlet 和 GWT 服务在第一次请求时不共享 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20083145/

相关文章:

java - 将 DAY_OF_MONTH 或 DAY_OF_YEAR 添加到 Calendar 对象有什么区别?

javascript - 使用 Javascript 读取 session ID

javascript - 为打印而打开的选项卡永久显示 "loading"图标

java - GWT 生成的 JavaScript 何时出现?

java - GWT 平台代理

java - Spring mvc资源文件无法包含到jsp页面中(Tomcat v9.0、Spring Tool Suite、Maven)

java - 使用 Java 谓词和 Lambda

java - MongoDB、Java : Retrieve date property as UTC

php - 了解 PHP 中的 session

android - 将 Cookie 与 Robospice Retrofit 请求一起使用