- ベストアンサー
javaサーブレット sessionの使い方
- javaサーブレットを使用して、セッションを使ってデータの受け渡しを行いたい場合、ページ移動が増えるとデータが上手く受け渡せない問題が発生します。
- jsp→Servlet のみでテストした場合は正常に動作するが、ページを増やすと値が正しく更新されない。
- セッションが管理されていない場合、データを登録して初回用メッセージを表示し、管理されている場合はデータを表示する。NS1.javaとNS2.javaでデータを受け渡しし、値が2つ増えるはずなのに1つも増えない。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
そんなに経験がある訳じゃないんですが、自分の環境にソースを入れたら以下の修正点がありました。 修正したらsessionに入っている値のカウントアップは正常にできましたよ。 環境はEclipseです。 ●web.xmlの記述がおかしくないですか? 一つのservlet-nameに2つのクラスを設定してますね マッピングも同じサーブレットを使うなら1つのサーブレットに2つURLをマッピングしてもいいですが、 今回は2つサーブレットを使っているようなので、わけてマッピングします。 【修正後】 <servlet> <servlet-name>NS1</servlet-name> <servlet-class>NStest.NS1</servlet-class> </servlet> <servlet-mapping> <servlet-name>NS1</servlet-name> <url-pattern>/NStest/NS1</url-pattern> </servlet-mapping> <servlet> <servlet-name>NS2</servlet-name> <servlet-class>NStest.NS2</servlet-class> </servlet> <servlet-mapping> <servlet-name>NS2</servlet-name> <url-pattern>/NStest/NS2</url-pattern> </servlet-mapping> ●[NS1.java]のRedirect先が.javaファイルを指定しているのも遷移出来ないと思います。 web.xmlでマッピングしたアドレスへ飛ばしましょう。 【修正後】 response.sendRedirect("NS2"); ※今回はNS1からなので相対パスで「NS2」だけで遷移出来ます。 ●RedirectでのアクセスはGETメソッドになっているので、[NS2.java]のdoPostメソッドをdoGetメソッドに変更して下さい。 ●[NS1.java][NS2,java]の両方ですが、「if( null == session){...}」のif文の中にsession.setAttributeがあります。sessionがnullなので、setAttributeできません。エラーになります。
その他の回答 (1)
web.xml の記述がないので何とも言えませんが、実行はエラーにならず、正常に終了していますか? おそらくですが、ブラウザには NS1 の結果しか表示されておらず、 NS1の、リダイレクトでエラーになっていると思われます。 NS1で表示している値は、カウントアップする前の値 つまり、JSPで設定した"0"が表示されています。 その為、値が増えていないように見えているのだと思います。
お礼
回答ありがとうございました。
補足
表示メッセージを変えて実行してみましたが、NS2までは実行出来ているようです。 また、jspに再度アクセスした所カウントが1つだけ増えていたのでNS1でカウントアップする値を+10に変更してみました。 しかし、値は+1されただけだったのでNS1で正常に値を変更出来ていないのでは無いかと思っています。 web.xmlのこのプログラムに関する記述は以下の通りです。 <servlet> <servlet-name>NS</servlet-name> <servlet-class>NStest.NS1</servlet-class> <servlet-class>NStest.NS2</servlet-class> </servlet> <servlet-mapping> <servlet-name>NS</servlet-name> <url-pattern>/NStest/NS1</url-pattern> <url-pattern>/NStest/NS2</url-pattern> </servlet-mapping>
お礼
お礼が遅くなり申し訳ありませんでした。 ご指摘の点を修正したところ正常に動きました! 本当に助かりました。ありがとうございます。