मुझे Google पर इस समस्या के बहुत सारे संदर्भ मिले हैं लेकिन कोई जवाब नहीं है। मैं जेटी (8.1.2.v20120308) का नवीनतम संस्करण उपयोग कर रहा हूं और मुझे सत्रों का उपयोग करने में सक्षम होने के लिए एक एम्बेडेड सर्वलेट नहीं मिल रहा है। उदाहरण पाठ्यक्रम में स्केल में है, लेकिन इसे किसी भी जावा प्रोग्रामर के लिए पठनीय होना चाहिए।एंबेडेड जेट्टी - IllegalStateException: No सत्र प्रबंधक
val server = new Server();
val connector = new SelectChannelConnector()
connector.setPort(Integer.getInteger("jetty.port", 8080).intValue())
server.setConnectors(Array(connector))
val webapp = new ServletContextHandler(ServletContextHandler.SESSIONS)
webapp.setContextPath("/")
webapp.setResourceBase(webDir)
webapp.setServer(server)
val brzyServ = new ServletHolder(new BrzyDynamicServlet())
webapp.addServlet(brzyServ, "*.brzy")
server.setHandler(webapp);
server.start()
मेरी सर्वलेट कोड में
:
...
log.debug("session manager: {}",req.asInstanceOf[Request].getSessionManager)
val session = req.getSession
...
req.getSession इस अपवाद फेंकता है, और यह पहले डिबग लाइन, हमेशा रिक्त है।
java.lang.IllegalStateException: No SessionManager
at org.eclipse.jetty.server.Request.getSession(Request.java:1173)
लॉग में मैं यह देख सकते हैं:
DEBUG org.eclipse.jetty.server.session - session[email protected]eeea
DEBUG org.eclipse.jetty.server.session - session=null
मुझे यकीन है कि अगर प्रासंगिक है नहीं कर रहा हूँ, लेकिन यह प्रकट होता एक सत्र प्रबंधक है कि वहाँ लेकिन यह अनुरोध पर उपलब्ध नहीं है।
मैंने उसी परिणाम के साथ WebAppContext के साथ यह कोशिश की है। सत्र प्रबंधक को एक दर्जन विभिन्न तरीकों से स्पष्ट रूप से सेट करने का उल्लेख नहीं करना है।
उत्तर के लिए धन्यवाद, लेकिन मैं उन दोनों वेरिएंट की कोशिश की है, कोई सफलता के साथ। मैंने HashSessionManager को सत्रहैंडलर को स्पष्ट रूप से जोड़ने का भी प्रयास किया है, लेकिन कोई फर्क नहीं पड़ता कि मैं क्या प्रयास करता हूं, जेटी Request.getSession() हमेशा IllegalStateException फेंकता है। जेटी से लॉग आउटपुट से पता चलता है कि एक सत्र प्रबंधक मौजूद है, यह अनुरोध में उपलब्ध है। –
माइकल, जेटी कोड को देखते हुए, एकमात्र तरीका यह हो सकता है कि मैं यह देख रहा हूं कि कोई सत्रहैंडलर अनुरोध से जुड़ा हुआ है और प्रारंभ नहीं हुआ है। क्या आपके पास अपने web.xml में किसी भी प्रकार का प्रमाणीकरण है? –
मुझे एक ही समस्या हो रही थी, और बीजीआर के उत्तर का थोड़ा सा संस्करण मेरे लिए काम करता था, मैंने बस एक वेब सत्र कॉन्टेक्स्ट बनाने के बिना सीधे मेरे सर्वलेट संदर्भ हैंडलर में एक नया सत्र हैंडलर जोड़ा और यह ठीक काम किया। servletContextHandler.setSessionHandler (नया सत्र हैंडलर()) –