我正在尝试实现一个简单的servlet,该servlet在其中使用HTTP session 。
嵌入式 jetty (7.3.0 v20110203)容器。要开始 jetty ,我使用以下代码:

Server server = new Server(12043);
ServletContextHandler handler = new
            ServletContextHandler(ServletContextHandler.SESSIONS);
handler.setContextPath("/");
server.setHandler(handler);
ServletHolder holder = new ServletHolder(new BaseServlet());
handler.addServlet(holder, "/*");
server.start();
server.join();

Servlet获取一个与
HttpSession session = request.getSession(true);

并在其中存储一些数据。在下一个请求时,它将获得 session
使用以下代码:
HttpSession session = request.getSession(false);

并且该 session 始终为空。

我没有找到任何有关的信息
互联网上有关此特定问题的信息。我也尝试过
与设置SessionManager或SessionIdManager,但似乎没有
改变任何东西。我怀疑我在这里缺少有关SessionManager或SessionIdManager或SessionHandler的信息,但这只是一个疯狂的猜测。

最佳答案

您的代码可以与BaseServlet的这个基本实现一起正常工作:

public class BaseServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        boolean create = "true".equals(req.getParameter("create"));

        HttpSession session = req.getSession(create);
        if (create) {
            session.setAttribute("created", new Date());
        }

        PrintWriter pw = new PrintWriter(resp.getOutputStream());
        pw.println("Create = " + create);
        if (session == null) {
            pw.println("no session");
        } else {
            pw.println("Session = " + session.getId());
            pw.println("Created = " + session.getAttribute("created"));
        }

        pw.flush();
    }

因此 session 可能在代码中的其他地方无效。

还可以使用SessionHandlersetSessionHandler()方法显式设置ServletContextHandler

09-25 20:33