• ベストアンサー

ServletからServletへの値渡し

最近、A-ServletからB-Servletへの遷移は response.sendRedirect("B-Servlet"); で可能だと教えて頂きました。 ですがもうひとつわからないことがあります。 このときに、B-Servletへ変数を渡したいのですがやり方がわかりません。 わかる方教えてください><

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

  • ベストアンサー
  • world99
  • ベストアンサー率64% (20/31)
回答No.7

こんにちは。world99です。 sin-da4のご認識の通りでした。  doGet()で呼び出されたサーブレットから次のサーブレットに遷移する時は、doGet()が実行されます。同じように、doPost()で呼び出されたサーブレットは、doPost()で次のサーブレットを呼び出します。  実は、私が試したサンプルは、doGet()とdoPost()のどちらが呼び出されても、doProcess()というメソッドを実行するように、実装しています。文章を短くするための、それを端折っていました。という訳で、この事に気がつきませんでした。  教えているつもりだった私が逆に、教えて頂きましたねありがとうございます。orz  あるServletから別のServeltに遷移する時に、値を引き渡すという本題の質問は、これで解決ですね♪

sin-da4
質問者

お礼

いえいえ、こちらこそありがとうございました! 問題も解決しましたので助かりました♪ またなにかありましたらよろしくお願いします。

その他の回答 (6)

  • world99
  • ベストアンサー率64% (20/31)
回答No.6

こんにちは。world99です。 私の環境で、先に紹介した「(1) ServletContext.getRequestDispatcher()」と、 「(2) HttpResponse.sendRedirect()」を実行してみて、パスの設定の違いを確認してみました。 sv1、sv2という名前でマッピングしたサーブレットを用意し、sv1からsv2へ遷移させました。 (1)の方法だと、"/sv2"になります。 public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { ServletContext sc = getServletContext(); RequestDispatcher dispatcher = sc.getRequestDispatcher("/sv2"); dispatcher.forward(req, res); } (2)ですと、"sv2"で、画面遷移できました。 public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { res.sendRedirect("sv2"); } sin-da4さんは、「"/パス名","./パス名","パス名"」でエラーになったとおっしゃっていますが、その状態で、画面遷移に成功していたsendRedirect()を利用した(2)の方法で、画面名は遷移していますでしょうか?もし遷移しないのならば、先ずはTomcatを起動し忘れていないか確認してみて下さい。

sin-da4
質問者

補足

回答ありがとうございます。 Tomcatは必ず再起動していますので大丈夫です。 今気づいたのですが私の場合、送信元メソッドはdoPostで受信元はdoGetです。 もしかしてdoGet同士、doPost同士じゃないとダメなんでしょうか。

  • world99
  • ベストアンサー率64% (20/31)
回答No.5

こんにちは。world99です。 1つ目ですが、Sessionスコープの方法は、別に実装する必要はありません。RequestとSessionの2通りの渡し方があるので、例としてあげさせて頂きました。 2つ目は、パスの設定が間違っているためにエラーが発生しています。 "/servlets-examples/パス名"のように"/"から入力するとServletコンテナのルートパスからの絶対パスで参照になります。"パス名"ですと参照中のパスからの相対パスからの参照になります。

sin-da4
質問者

補足

回答ありがとうございます。 パス設定が解決できません。。。 「"/パス名","./パス名","パス名"」,「"/servlet/パス名","./servlet/パス名"」,「"/servlets-examples/パス名","./servlets-examples/パス名"」 以上のやり方はすべてエラーになります。 パス設定は関係ないような気がしてきたのですが違うのでしょうか。。。

  • world99
  • ベストアンサー率64% (20/31)
回答No.4

こんにちは。 サンプルを記述しましたので、参考にして下さい。 public class TestServlet1 extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { // Requestスコープ req.setAttribute("param1", "abc"); req.setAttribute("param2", new Integer(1)); // Sessionスコープ HttpSession session = req.getSession(); session.setAttribute("param3", "あいうえお"); session.setAttribute("param4", new Integer(2)); // 次のServletに遷移させる ServletContext sc = getServletContext(); RequestDispatcher dispatcher = sc.getRequestDispatcher("/sv2"); dispatcher.forward(req, res); } } public class TestServlet2 extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { // Requestスコープの値を取得 Object obj1 = req.getAttribute("param1"); Object obj2 = req.getAttribute("param2"); // Sessionスコープの値を取得 HttpSession session = req.getSession(); Object obj3 = session.getAttribute("param3"); Object obj4 = session.getAttribute("param4"); } }

sin-da4
質問者

補足

サンプルありがとうございます。 2点程質問させてください。 ・一つ目 値を渡すのはひとつだけでいいのですが、必ずSessionスコープを使用しなければいけないのでしょうか?? ・二つ目 このサンプルを元に組みなおしたら、 ---------------------------------------------------------------- HTTPステータス 404 - /servlets-examples/パス名 type ステータスレポート メッセージ /servlets-examples/パス名 説明 The requested resource (/servlets-examples/パス名) is not available. ---------------------------------------------------------------- というのが出ました。 response.sendRedirect("パス名"); で、値を渡さず遷移させていたときはちゃんと動いていたのですがなぜでしょう。。。 以上よろしくお願いします。

noname#30536
noname#30536
回答No.3

老婆心ながら、、 サーブレット初心者ならば、まずはきっちり基礎を固めてから始めることをお勧めします。

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.2

sessionならば void session.setAttribute(String name,Object object); でsessionオブジェクトにsetして Object session.getAttribute(String name); でsessionオブジェクトからgetする。 requestでも場合によりOKでしょう。 Session impossible!!!

noname#30536
noname#30536
回答No.1

方法はいろいろとありますが、 リダイレクトで渡すなら、セッションに格納するのが一般的ですね。

sin-da4
質問者

補足

すいません、Servletは始めたばかりなので、もう少し詳しく教えて頂けないでしょうか?(汗 それとセッションとはHttpSessionのことですか??

関連するQ&A