まず、いつ、なぜaNullPointerException
がスローされたかを理解することが重要です。あなたの質問の仕方は、あなたがそれを理解していないことを示しています。「なぜスローするNullPointerException
のですか?」と尋ねました。「なぜ戻るnull
のですか?」と尋ねませんでした。
javadocが示すように、変数にアクセスしようとしたり、実際には であるオブジェクト参照でピリオド演算子を使用してメソッドを呼び出そうとすると、がNullPointerException
スローされ.
ます。 null
例えば
SomeObject someObject = null;
someObject.doSomething(); // NullPointerException!
isNew()
特定のケースでは、null
オブジェクトでメソッドを呼び出そうとしていました。したがって、これは不可能です。参照にはnull
メソッドがまったくありません。それは単に何も指していません。代わりに null チェックを行う必要があります。
HttpSession session = (HttpSession) externalContext.getSession(false);
if (session == null) {
// There's no session been created during current nor previous requests.
}
else if (session.isNew()) {
// The session has been created during the current request.
}
else {
// The session has been created during one of the previous requests.
}
つまり、引数を指定したgetSession()
呼び出しは、セッションがまだ作成されていないときに戻る可能性があります。javadocも参照してください。false
null
getSession
public abstract java.lang.Object getSession(boolean create)
create
パラメータがの場合、true
(必要に応じて) 現在のリクエストに関連付けられたセッション インスタンスを作成して返します。パラメータcreate
がfalse
現在のリクエストに関連付けられた既存のセッション インスタンスを返す場合、またはそのnull
ようなセッションがない場合は戻ります。
強調された部分を参照してください。
HttpServletRequest#getSession()
引数を取らない呼び出しは、デフォルトで引数として使用しtrue
ますcreate
。javadocも参照してください。
getSession
HttpSession getSession()
このリクエストに関連付けられた現在のセッションを返すか、リクエストにセッションがない場合は作成します。
強調された部分を参照してください。
Javadocs をよりよく参照するためのヒントとして、これを利用していただければ幸いです。クラスとメソッドが何をするかを非常に正確に説明しているため、多くの場合、質問に対する回答がすでに含まれています。