Я нашел много ссылок на эту проблему в Google, но ответов нет. Я использую последнюю версию jetty (8.1.2.v20120308), и я не могу заставить встроенный сервлет использовать сеансы. Например, в scala, но это должно быть доступно для любого 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()
в моем коде сервлета:
...
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 - ses[email protected]2a8ceeea
DEBUG org.eclipse.jetty.server.session - session=null
Я не уверен, если это уместно, но казалось бы, что есть менеджер сессии, но он не доступен по запросу.
Я пробовал это с помощью WebAppContext с тем же результатом. Не говоря уже о явной настройке sessionManager по-разному.
Спасибо за ответ, но я пробовал оба эти варианты, не имели успеха. Я также попытался добавить HashSessionManager явно в SessionHandler, но независимо от того, что я пытаюсь, Jetty Request.getSession() всегда выбрасывает IllegalStateException. Вывод журнала из причала показывает, что существует диспетчер сеансов, он просто кажется доступным в запросе. –
Майкл, глядя на код Jetty, единственный способ, которым я мог видеть это, заключается в том, что SessionHandler не связан и не инициализирован по запросу. У вас есть какая-то аутентификация в вашем web.xml? –
У меня была такая же проблема, и для меня работал небольшой вариант ответа BGR, я просто добавил новый обработчик сеанса к обработчику контекста сервлета напрямую, не создавая WebAppContext, и он работал нормально. servletContextHandler.setSessionHandler (новый SessionHandler()) –