Googleではこの問題の参照はたくさんありますが、答えは見つかりませんでした。私はjetty(8.1.2.v20120308)の最新バージョンを使用しています。セッションを使用できるように組み込みサーブレットを取得することはできません。この例はもちろんスカラーですが、どのJavaプログラマーにとっても読みやすいはずです。私のサーブレットコードで埋め込みJetty - IllegalStateException:いいえ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は、この例外をスローし、その前にデバッグ行は、常にnullです。ログで
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でこれと同じ結果を試しました。明示的にセッションマネージャをダースに設定することは言うまでもありません。
おかげで、私は成功しません、両方のそれらの変種を試してみました。また、HashSessionManagerを明示的にSessionHandlerに追加しようとしましたが、何を試みてもJetty Request.getSession()は常にIllegalStateExceptionをスローします。 jettyからのログ出力には、セッションマネージャが存在することが示されています。要求には利用可能なように見えます。 –
マイケルは、桟橋のコードを見て、私はこれが起こって見ることができる唯一の方法は、SessionHandlerは関連付けられていないと要求で初期化されます。 web.xmlに任意の種類の認証がありますか? –
私は同じ問題を抱えていましたが、BGRの答えが少し変わったので、WebAppContextを作成せずにサーブレットコンテキストハンドラに新しいセッションハンドラを追加して正常に動作しました。 servletContextHandler.setSessionHandler(new SessionHandler()) –