servlets जेटी http सत्र हमेशा शून्य(एंबेडेड कंटेनर, सर्वलेटहोल्डर)




jetty embedded-jetty (3)

मैं एक साधारण सर्विसलेट को लागू करने का प्रयास कर रहा हूं जो एक एम्बेडेड जेटटी (7.3.0 v20110203) कंटेनर में HTTP सत्र का उपयोग करता है। जेटी शुरू करने के लिए मैं निम्नलिखित कोड का उपयोग करता हूं:

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

और वहां सत्र हमेशा अशक्त होता है

मुझे इस विशेष समस्या के बारे में इंटरनेट पर कोई जानकारी नहीं मिली। मैंने एक सत्र प्रबंधक या सत्र आयडीएमएनेजर की स्थापना के साथ भी प्रयोग किया है, लेकिन ऐसा कुछ भी बदलने में प्रतीत नहीं हुआ। मुझे संदेह है कि मैं यहां सत्र प्रबंधक या सत्र आयडर प्रबंधक या सत्रहैंडल के बारे में कुछ याद कर रहा हूं, लेकिन यह सिर्फ एक जंगली अनुमान है।


आपका कोड 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();
    }

इसलिए संभवत: आपके कोड में सत्र को कहीं और अमान्य किया जा रहा है।

setSessionHandler() भी setSessionHandler() की setSessionHandler() विधि का उपयोग करके स्पष्टता सेट किया जा सकता है


विधि HttpServletResponse#reset() नव निर्मित सत्र को नष्ट कर देता है, इसलिए एक नया एक अगली बार बनाया जाता है और इसी तरह।


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




httpsession