13

JavaサーブレットのHttpSessionは後でのみ作成されます

HttpSession s = request.getSession();

?

私のコードではそれを書きませんでしたが、 を使用するif (request.getSession(false) == null) ...と機能しません。なんで?

4

5 に答える 5

17

request.getSession() を呼び出すと、HttpSession が作成されます。

ただし、デフォルトで JSP にアクセスすると、自動的にセッションが作成されます。この動作は、次を使用して無効にできます。<%@ page session="false">

JSPを使用していますか?

于 2011-02-28T10:15:23.833 に答える
15

JavaDocs を読んでください。

これは言う、request.getSession()

このリクエストに関連付けられた現在のセッションを返すか、リクエストにセッションがない場合は作成します。

そして、他のバリアントrequest.getSession(isCreate)

このリクエストに関連付けられた現在の HttpSession を返します。現在のセッションがなく、create が true の場合は、新しいセッションを返します。

create が false で、リクエストに有効な HttpSession がない場合、このメソッドは null を返します。

セッションが適切に維持されるようにするには、応答がコミットされる前にこのメソッドを呼び出す必要があります。コンテナーがセッションの整合性を維持するために Cookie を使用しており、応答がコミットされたときに新しいセッションを作成するように求められた場合、IllegalStateException がスローされます。


アップデート

少し調査したところ、どこかで呼び出されない限り、セッションは作成されないことがわかりました。なぜなら、サーブレットコンテナがデフォルトでセッションを作成する可能性が高いからです。request.getSession()The servlet container uses this interface to create a session between an HTTP client and an HTTP server.

参照:

  1. Java ドキュメントの HttpSession
  2. JavaRaunch に関するディスカッション: HttpSession は自動的に作成されますか?

ただし、安全のためrequest.getSession()に、セッションを取得するために使用しrequest.getSession(false)、セッションが既に作成されているかどうかを確認する必要がある場合にのみ使用してください。

于 2011-02-28T10:10:59.547 に答える
3

Nishant の回答に加えて、JSP ページでセッションを作成しないように構成しない限り、JSP ページによって暗黙的にセッションを作成できることに注意してください<%@ page session = "false" %>

于 2011-02-28T10:13:49.753 に答える
1

完成させるには:

  • request.getSession()サーブレットでを呼び出さない限り、セッションは作成されません。request.getSession(false)新しいセッションを作成せずに既存のセッションを取得するために使用します。
  • JSPページを使用する場合、セッションは自動的に作成されます-変数session-指定しない限り<%@ page session="false" %>
  • セッションが自動的に作成された場合でも、セッションがsession.isNew()新しく作成されたかどうかを確認するために使用できます
于 2012-11-02T14:05:02.057 に答える
0

ブラウザからセッション Cookie を削除して、別のテストを行ってみてください。機能しない場合は、その呼び出しの前に他のコンポーネントが新しいセッションを作成しています。

于 2011-02-28T10:08:56.737 に答える