gpt4 book ai didi

servlets - Jetty http session 始终为 null(嵌入式容器、ServletHolder)

转载 作者:行者123 更新时间:2023-12-02 21:10:16 25 4
gpt4 key购买 nike

我正在尝试实现一个简单的 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 获取 session

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 可能在代码中的其他地方失效。

还可以使用 ServletContextHandlersetSessionHandler() 方法显式设置 SessionHandler

关于servlets - Jetty http session 始终为 null(嵌入式容器、ServletHolder),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5284262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com