java.lang.IllegalStateException: No SessionManager

后端 未结 1 1115
梦谈多话
梦谈多话 2020-12-31 22:50

Please give me advice how to correctly set up Jetty . I\'m using the latest version of jetty (9.0.6.v20130930). I ordered server implement concrete servlet and it doesn\'t w

相关标签:
1条回答
  • 2020-12-31 23:17

    You are missing 3 things.

    • A Context
    • A Session ID Manager
    • A Session Handler (with associated Session Manager)

    Main.java

    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.server.handler.ContextHandler;
    import org.eclipse.jetty.server.session.HashSessionIdManager;
    import org.eclipse.jetty.server.session.HashSessionManager;
    import org.eclipse.jetty.server.session.SessionHandler;
    
    public class Main
    {
        public static void main(String[] args)
        {
            MyDumpHandler dump = new MyDumpHandler();
    
            Server server = new Server(8080);
    
            // Specify the Session ID Manager
            HashSessionIdManager idmanager = new HashSessionIdManager();
            server.setSessionIdManager(idmanager);
    
            // Sessions are bound to a context.
            ContextHandler context = new ContextHandler("/");
            server.setHandler(context);
    
            // Create the SessionHandler (wrapper) to handle the sessions
            HashSessionManager manager = new HashSessionManager();
            SessionHandler sessions = new SessionHandler(manager);
            context.setHandler(sessions);
    
            // Put dump inside of SessionHandler 
            sessions.setHandler(dump);
    
            // Tree is now
            // Server
            //   + ContextHandler("/")
            //       + SessionHandler(Hash)
            //           + MyDumpHandler
    
            try
            {
                server.start();
                server.join();
            }
            catch (Throwable t)
            {
                t.printStackTrace();
            }
        }
    }
    

    MyDumpHandler.java

    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.eclipse.jetty.server.Request;
    import org.eclipse.jetty.server.handler.AbstractHandler;
    
    public class MyDumpHandler extends AbstractHandler
    {
        public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
        {
            PrintWriter out = response.getWriter();
            response.setContentType("text/plain");
    
            try
            {
                HttpSession session = request.getSession();
                if (session.isNew())
                {
                    out.printf("New Session: %s%n", session.getId());
                }
                else
                {
                    out.printf("Old Session: %s%n", session.getId());
                }
            }
            catch (IllegalStateException ex)
            {
                out.println("Exception!" + ex);
                ex.printStackTrace(out);
            }
            out.close();
        }
    }
    
    0 讨论(0)
提交回复
热议问题