のrequest.getSession(true)とrequest.getSession(false)の違い
Difference Request Getsession
実際には、次の3つの使用でよく遭遇します。
HttpSession session = request.getSession () // if the session is returned session exists, or create a new session. With true HttpSession session = request.getSession (true) // session exists if the session is returned, otherwise a new session. HttpSession session = request.getSession (false) // session exists if the session is returned, otherwise NULL is returned
違い:
1、サーブレットの公式文書によると:
public HttpSessiongetSession(boolean create)
このリクエストに関連付けられているcurrentHttpSessionを返します。現在のセッションがなく、createがtrueの場合は、新しいセッションを返します。
createがfalseで、リクエストに有効なHttpSessionがない場合、このメソッドはnullを返します。
セッションが適切に維持されていることを確認するには、応答がコミットされる前にこのメソッドを呼び出す必要があります。コンテナがセッションの整合性を維持するためにCookieを使用していて、応答がコミットされたときに新しいセッションを作成するように求められた場合、anIllegalStateExceptionがスローされます。
パラメータ:true-必要に応じてこのリクエストの新しいセッションを作成しますfalse現在のセッションがない場合はnullを返します
戻り値:このリクエストに関連付けられたHttpSession、またはcreateがfalseで、リクエストに有効なセッションがない場合はnull
2、翻訳された意味:
getSession(boolean create)現在の平均HttpSession要求を返します。HttpSessionの現在の要求がnullの場合、createがtrueの場合、新しいセッションを作成します。それ以外の場合はnullを返します。
簡単に言うと、HttpServletRequest.getSession(ture)と同等のHttpServletRequest.getSession(ture)
HttpServletRequest.getSession(false)がnullの場合、現在のセッションと等しくありません
3、一般的にそのように使用されます(これは簡単に使用できますが、この理解は整っていません)
セッションログイン情報にアクセスする場合、一般的な推奨事項:HttpSession session = request.getSession()
セッションからログイン情報を取得する場合の一般的な推奨事項:HttpSessionセッション= request.getSession(false)
4、エラーを修正する
多くの人がとても慣れています:
HttpSession session = request.getSession () // a new session created if no session exists, ha! Goner! If the session does not exist, then you've created a! String user_name = session.getAttribute('user_name')
Request.getSession()はrequest.getSession(true)と同等です。確認するか、セッションが存在しないか、request.getSession(false)を使用しようとしない限り、セッションが存在する必要がある場合は、セッションを作成する必要があることに注意してください。 Request.getSession()関数を使用する場合、通常、アクション/ラベルがセッションに保存されているかどうかを確認する変数があります。このシナリオではセッションがない可能性があり、通常の判断は次のようになります。
HttpSession session = request.getSession(false) if (session != null) { String user_name = session.getAttribute('user_name') }
5、より簡潔な方法
プロジェクトがSpringを使用している場合(実際、プロジェクトが少し大きいJavaである限り、Springが適しています)、セッションの操作ははるかに便利です。セッションに値が必要な場合は、getSessionAttribute(HttpServletRequest request、String name)メソッドのWebUtilsツール(org.springframework.web.util.WebUtils)を使用して、ソースを確認できます:WebUtils.setSessionAttribute(request、 'user' 、User)およびUser user =(User)WebUtils.getSessionAttribute(request、 'user')
/** * Set the session attribute with the given name to the given value. * Removes the session attribute if value is null, if a session existed at all. * Does not create a new session if not necessary! * @param request current HTTP request * @param name the name of the session attribute */ public static void setSessionAttribute(HttpServletRequest request, String name, Object value) { if (value != null) { request.getSession().setAttribute(name, value) } else { HttpSession session = request.getSession(false) if (session != null) { session.removeAttribute(name) } } }
我々は書ける:
publicstatic Object getSessionAttribute(HttpServletRequest request, String name){ Assert.notNull(request, 'Request must not be null') HttpSession session =request.getSession(false) return (session != null ?session.getAttribute(name) : null) }
注:アサートスプリングは、本実施形態におけるいくつかの検証操作を判断して、要求が空であるか、例外をスローする場合は空であるかを決定するためのツールキットである。
または書く:
HttpSession session = request.getSession(false) String user_name = WebUtils.getSessionAttribute(reqeust, 'user_name')