Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jetty http session is always null (Embedded Container, ServletHolder)

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

The servlet acquires a session with

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

and there the session is always null.

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.

like image 662
David Tanzer Avatar asked Mar 12 '11 17:03

David Tanzer


1 Answers

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.

The SessionHandler can also be explicity set using the setSessionHandler() method of ServletContextHandler.

like image 88
Aldo Avatar answered Oct 10 '22 06:10

Aldo