Servlets Jetty http会话始终为空(嵌入式容器,ServletHolder)
我试图实现一个简单的servlet,它在 嵌入式码头(7.3.0 v20110203)集装箱。要启动jetty,我使用以下代码:Servlets Jetty http会话始终为空(嵌入式容器,ServletHolder),servlets,jetty,embedded-jetty,httpsession,Servlets,Jetty,Embedded Jetty,Httpsession,我试图实现一个简单的servlet,它在 嵌入式码头(7.3.0 v20110203)集装箱。要启动jetty,我使用以下代码: Server server = new Server(12043); ServletContextHandler handler = new ServletContextHandler(ServletContextHandler.SESSIONS); handler.setContextPath("/"); server.setHandler(
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();
HttpSession session = request.getSession(false);
servlet获取一个具有
HttpSession session = request.getSession(true);
并在其中存储一些数据。在下一次请求时,它将获得会话
使用以下代码:
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();
HttpSession session = request.getSession(false);
在那里,会话总是空的
我没有找到任何有关的信息
互联网对这一特殊问题的关注。我也做过实验
设置SessionManager或sessiondmanager,但这似乎并没有实现
改变一切。我怀疑我在这里遗漏了SessionManager或SessiondManager或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();
}
因此,会话可能在代码中的其他地方无效
SessionHandler
也可以使用ServletContextHandler
的setSessionHandler()
方法明确设置SessionHandler该方法HttpServletResponse#reset()
会破坏新创建的会话,因此下次会创建一个新会话,依此类推。为什么要调用reset?
//You need to setup SessionManager first. This worked for me.
Server server = new Server(8031);
ServletHandler handler = new ServletHandler();
server.setHandler(handler);
HashSessionIdManager hashSessionIdManager = new
HashSessionIdManager();
SessionHandler sessionHandler = new SessionHandler();
SessionManager sessionManager = new HashSessionManager();
sessionManager.setSessionIdManager(hashSessionIdManager);
sessionHandler.setSessionManager(sessionManager);
sessionHandler.setHandler(handler);
sessionHandler.setServer(server);
server.setSessionIdManager(hashSessionIdManager);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.addServlet("webservlet.IndexServlet", "/index");
context.addServlet("webservlet.HomeServlet", "/home");
context.addServlet("webservlet.CategoryServlet", "/category");
context.addServlet("webservlet.ProductServlet", "/product");
...