質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

2回答

5486閲覧

org.apache.catalina.session.StandardSessionFacade@480a871f とは何を指しているのでしょうか?

llemon

総合スコア17

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2017/06/03 15:01

現在セッションオブジェクトがnullになるのかどうかのチェックをするコードを書いていますが、nullになるはずの場面でnullになりません。
なぜでしょうか。

java

1HttpSession session = req.getSession(false); 2 3 //チェック 4 System.out.println("セッションの値" + session); 5 if(session != null){ 6 //チェック 7 System.out.println("not null); 8 count = (Integer)session.getAttribute("loginCount"); 9 }else{ 10 //チェック 11 System.out.println("null"); 12 session = req.getSession(); 13 }

出力結果

セッションの値org.apache.catalina.session.StandardSessionFacade@480a871f
not null


このコードの前にセッションを作っていないので、sessionの値がnullになることは間違いないと思うのですが、なぜかifの分岐で処理がelseに進みません。
セッションの値をSystem.out.printlnで出力すると謎の値が出てきます。これは何なのでしょうか?教えていただけませんか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

「nullになるはずの場面でnullになりません」の前提条件が書かれていないので、明確な回答ではないかもしれませんが、HttpSessionが nullになりそうでならない場面 はあります。

  • ブラウザにセッションクッキーが残っている(JSESSIONID)が残っているため、コンテナが新しいセッションと認識しない
  • JSPから画面遷移した = デフォルトではJSPをレスポンスしたタイミングでJSESSIONIDが発行され、HttpSessionが生成されます。
  • サーブレットやJSPから リダイレクト した

他にもフレームワークなどの仕様によってHttpSessionが常に発行(or再利用)されるものも、いくつかあります。

一番簡単にnullの状態を試すには、ブラウザのクッキーを破棄した後、サーブレットへ直接リクエストを飛ばすと、HttpSession.getSession(false) は null になります。

ご参考までに。

投稿2017/06/03 16:10

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

llemon

2017/07/16 06:51

>>JSPから画面遷移した = デフォルトではJSPをレスポンスしたタイミングでJSESSIONIDが発行され、 >>HttpSessionが生成されます。 私はこの症状に悩んでいたようです。 指定したセッションがあるかどうかのコードを書くことで解決しました。 ありがとうございました。
guest

0

nullでないオブジェクトを文字列連結したり、System.out.println()などに渡したりすると、オブジェクトのtoString()メソッドを実行した結果の文字列が使われます。
toString()メソッドはObjectクラスで定義されており、オーバーライドされていなければ、

クラス名@ハッシュコード

を出力する決まりになっています。
ハッシュコードはオブジェクトを数値化したもので、数値そのものに意味はありません。
その文字列の場合、sessionのインスタンスのクラス名がorg.apache.catalina.session.StandardSessionFacadeであることを意味しています。

話を戻して、System.out.println()にnullが渡った場合は"null"を出力するので、確かにsessionはnullでないとわかります。

sessionを宣言した際に実行したメソッドgetSessionを調べてみると、
HttpServletRequest#getSession(boolean)

戻り値:

このリクエストに関連づけられている HttpSession。 create の値が false である場合、リクエストが有効なセッションを持っていなければ null。

つまり、変数reqが表すリクエストが有効なセッションを持っているということになります。

投稿2017/06/03 15:12

編集2017/06/03 15:54
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

llemon

2017/06/03 15:34

回答ありがとうございます。セッションオブジェクトがnullではないというとが分かりました。 ではどのタイミングでnullでない値になってしまうのでしょうか?このコード以前にセッションの宣言はしていないです。どういった可能性が考えられるのでしょうか。 また、セッションオブジェクトがnullとして処理を進めたいのですが、どうすればnullとして処理が進められるのでしょうか。教えていただけませんか。
swordone

2017/06/03 15:38

どういった可能性も何も、回答でも書きましたが、あなた自分で HttpSession session = req.getSession(false); としているではないですか。これの結果がnullでなかっただけの話です。 それはつまり、reqが有効なセッションを持っているということにほかなりません。 nullにしたいならこの式の右辺をnullにする位しかないのではないですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問