• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaサーブレット sessionの使い方)

javaサーブレット sessionの使い方

このQ&Aのポイント
  • javaサーブレットを使用して、セッションを使ってデータの受け渡しを行いたい場合、ページ移動が増えるとデータが上手く受け渡せない問題が発生します。
  • jsp→Servlet のみでテストした場合は正常に動作するが、ページを増やすと値が正しく更新されない。
  • セッションが管理されていない場合、データを登録して初回用メッセージを表示し、管理されている場合はデータを表示する。NS1.javaとNS2.javaでデータを受け渡しし、値が2つ増えるはずなのに1つも増えない。

質問者が選んだベストアンサー

  • ベストアンサー
  • itu1989
  • ベストアンサー率44% (37/83)
回答No.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できません。エラーになります。

khons_moon
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 ご指摘の点を修正したところ正常に動きました! 本当に助かりました。ありがとうございます。

その他の回答 (1)

noname#155524
noname#155524
回答No.1

web.xml の記述がないので何とも言えませんが、実行はエラーにならず、正常に終了していますか? おそらくですが、ブラウザには NS1 の結果しか表示されておらず、 NS1の、リダイレクトでエラーになっていると思われます。 NS1で表示している値は、カウントアップする前の値 つまり、JSPで設定した"0"が表示されています。 その為、値が増えていないように見えているのだと思います。

khons_moon
質問者

お礼

回答ありがとうございました。

khons_moon
質問者

補足

表示メッセージを変えて実行してみましたが、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>

関連するQ&A