HttpSession#getIdとHttpServletRequest#getRequestedSessionIdの違いってなんだよ


今日ちょっとだけ苦戦した話(´・ω・`)


こんなログが出てきた


Exception occurred during processing request: レスポンスをコミットした後でセッションを作成できません
java.lang.IllegalStateException: レスポンスをコミットした後でセッションを作成できません
at org.apache.catalina.connector.Request.doGetSession(Request.java:2886)
at org.apache.catalina.connector.Request.getSession(Request.java:2316)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:898)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:910)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:238)


これはHttpSession#getIdを使った場合に出てきた(´・ω・`)

んで今はHttpServletRequest#getRequestedSessionIdを使って対応できた(´・ω・`)

プログラムの作りもあると思うが、HttpSession#getIdとHttpServletRequest#getRequestedSessionIdの違いがわかんね(;´∀`)
JavaDocを読むと

HttpSession#getId
このセッションに割り当てられている一意な識別子を表す String オブジェクトを返します。 識別子は実装依存であり、Servlet コンテナによって割り当てられます。

HttpServletRequest#getRequestedSessionId
クライアントによって指定されたセッションの ID を返します。 この値はリクエストの現在の有効なセッションの ID と一致するとは限りません。 クライアントがセッション ID を指定しなかった場合、null を返します。


ってなる(´・ω・`)
最初はポッカーーンだったが俺の勝手な予想だと

HttpSession#getId
セッションがない場合、新しくセッションを発行する。

HttpServletRequest#getRequestedSessionId
セッションがない場合、潔くnullを返す。


だと思ってるwww

レスポンスってコミットとかあるんか(´・ω・`)

0 件のコメント:

コメントを投稿