Jetty http会话始终为空(Embedded Container,ServletHolder) [英] Jetty http session is always null (Embedded Container, ServletHolder)
问题描述
我正在尝试实现一个简单的servlet,该servlet在其中使用HTTP会话. 嵌入式码头(7.3.0 v20110203)容器.要开始码头,我使用以下代码:
I am trying to implement a simple servlet which uses a HTTP session in an embedded jetty (7.3.0 v20110203) container. To start jetty I use the following code:
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);
并在其中存储一些数据.在下一个请求时,它将获得会话 使用以下代码:
and stores some data in it. Upon the next request it gets the session with the following code:
HttpSession session = request.getSession(false);
,该会话始终为空.
我没有找到任何有关的信息 互联网上有关此特定问题的信息.我也尝试过 与设置SessionManager或SessionIdManager,但似乎没有 改变任何东西.我怀疑我在这里缺少有关SessionManager或SessionIdManager或SessionHandler的信息,但这只是一个疯狂的猜测.
I did not find any information on the internet about this particular problem. I have also experimented with setting a SessionManager or SessionIdManager, but that did not seem to change anything. I suspect I am missing something about SessionManager or SessionIdManager or SessionHandler here, but this is just a wild guess.
推荐答案
您的代码在此基本的BaseServlet实现中可以正常工作:
Your code works fine with this skeletal implementation of 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();
}
因此该会话可能在代码中的其他地方失效了.
so the session is probably being invalidated somewhere else in your code.
还可以使用ServletContextHandler
的setSessionHandler()
方法显式设置SessionHandler
.
The SessionHandler
can also be explicity set using the setSessionHandler()
method of ServletContextHandler
.
这篇关于Jetty http会话始终为空(Embedded Container,ServletHolder)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!