2011-03-12 2 views
9

임베디드 jetty (7.3.0 v20110203) 컨테이너에서 HTTP 세션을 사용하는 간단한 서블릿을 구현하려고합니다.Jetty http 세션은 항상 null 임 (임베디드 컨테이너, ServletHolder)

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(true); 

저장 일부 데이터 세션을 획득 : 부두를 시작하려면 다음 코드를 사용합니다.

HttpSession session = request.getSession(false); 

를 세션은 항상 널 (null)이 : 다음 요청에 따라 다음과 같은 코드로 세션 을 가져옵니다.

나는이 특정 문제에 관해 인터넷에 관한 어떤 정보도 찾아 내지 않았다. 또한 을 SessionManager 또는 SessionIdManager를 설정하여 실험했지만 그 중 하나만 변경하면 이 아닌 것으로 보입니다. SessionManager 또는 SessionIdManager 또는 SessionHandler에 대한 정보가 누락 된 것 같습니다. 그러나 이것은 단순한 추측입니다.

답변

5

코드는 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.

-1

HttpServletResponse#reset() 메서드는 새로 생성 된 세션을 파괴하므로 다음 번에 새 세션이 생성됩니다.

+0

왜 재설정이 호출됩니까? – szymond

0
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"); 
...