Tôi đã tìm thấy rất nhiều tài liệu tham khảo về vấn đề này trên google nhưng không có câu trả lời. Tôi đang sử dụng phiên bản mới nhất của cầu cảng (8.1.2.v20120308) và tôi dường như không thể có được một servlet được nhúng để có thể sử dụng các phiên. Ví dụ là trong scala tất nhiên, nhưng nó phải được đọc cho bất kỳ lập trình java.Embedded Jetty - IllegalStateException: No SessionManager
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()
trong mã servlet của tôi:
...
log.debug("session manager: {}",req.asInstanceOf[Request].getSessionManager)
val session = req.getSession
...
Các req.getSession ném ngoại lệ này, và dòng debug trước đó, luôn luôn là null.
java.lang.IllegalStateException: No SessionManager
at org.eclipse.jetty.server.Request.getSession(Request.java:1173)
Trong nhật ký tôi có thể thấy điều này:
DEBUG org.eclipse.jetty.server.session - ses[email protected]2a8ceeea
DEBUG org.eclipse.jetty.server.session - session=null
Tôi không chắc chắn nếu đó là có liên quan, nhưng có thể thấy rằng có một người quản lý phiên nhưng nó không có sẵn theo yêu cầu.
Tôi đã thử điều này với WebAppContext với cùng một kết quả. Chưa kể đến việc thiết lập sessionManager một cách rõ ràng theo hàng chục cách khác nhau.
Cảm ơn bạn đã trả lời, nhưng tôi đã thử cả những biến thể, không có thành công. Tôi cũng đã thử thêm HashSessionManager một cách rõ ràng cho SessionHandler, nhưng không có vấn đề gì tôi cố gắng, cầu Request.getSession() luôn ném IllegalStateException. Đầu ra bản ghi từ cầu cảng cho thấy rằng một trình quản lý phiên tồn tại, nó chỉ là doest dường như có sẵn trong yêu cầu. –
Michael, nhìn vào mã Jetty, cách duy nhất tôi có thể thấy điều này xảy ra là không có SessionHandler nào được liên kết và khởi tạo theo yêu cầu. Bạn có bất kỳ loại xác thực nào trong tệp web.xml của mình không? –
Tôi đã gặp vấn đề tương tự, và một biến thể nhỏ của câu trả lời BGR làm việc cho tôi, tôi chỉ cần thêm một trình xử lý phiên mới vào trình xử lý ngữ cảnh servlet của tôi trực tiếp mà không cần tạo WebAppContext và nó hoạt động tốt. servletContextHandler.setSessionHandler (SessionHandler mới()) –