プロが教えるわが家の防犯対策術!

最近、A-ServletからB-Servletへの遷移は

response.sendRedirect("B-Servlet");

で可能だと教えて頂きました。

ですがもうひとつわからないことがあります。
このときに、B-Servletへ変数を渡したいのですがやり方がわかりません。
わかる方教えてください><

A 回答 (7件)

方法はいろいろとありますが、


リダイレクトで渡すなら、セッションに格納するのが一般的ですね。

この回答への補足

すいません、Servletは始めたばかりなので、もう少し詳しく教えて頂けないでしょうか?(汗

それとセッションとはHttpSessionのことですか??

補足日時:2007/05/10 15:34
    • good
    • 0

sessionならば


void session.setAttribute(String name,Object object);
でsessionオブジェクトにsetして

Object session.getAttribute(String name);
でsessionオブジェクトからgetする。
requestでも場合によりOKでしょう。

Session impossible!!!
    • good
    • 0

老婆心ながら、、


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

こんにちは。


サンプルを記述しましたので、参考にして下さい。

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");
}
}

この回答への補足

サンプルありがとうございます。
2点程質問させてください。

・一つ目
値を渡すのはひとつだけでいいのですが、必ずSessionスコープを使用しなければいけないのでしょうか??

・二つ目
このサンプルを元に組みなおしたら、
----------------------------------------------------------------
HTTPステータス 404 - /servlets-examples/パス名

type ステータスレポート

メッセージ /servlets-examples/パス名

説明 The requested resource (/servlets-examples/パス名) is not available.
----------------------------------------------------------------
というのが出ました。

response.sendRedirect("パス名");
で、値を渡さず遷移させていたときはちゃんと動いていたのですがなぜでしょう。。。

以上よろしくお願いします。

補足日時:2007/05/14 09:32
    • good
    • 1

こんにちは。

world99です。

1つ目ですが、Sessionスコープの方法は、別に実装する必要はありません。RequestとSessionの2通りの渡し方があるので、例としてあげさせて頂きました。

2つ目は、パスの設定が間違っているためにエラーが発生しています。
"/servlets-examples/パス名"のように"/"から入力するとServletコンテナのルートパスからの絶対パスで参照になります。"パス名"ですと参照中のパスからの相対パスからの参照になります。

この回答への補足

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

パス設定が解決できません。。。

「"/パス名","./パス名","パス名"」,「"/servlet/パス名","./servlet/パス名"」,「"/servlets-examples/パス名","./servlets-examples/パス名"」

以上のやり方はすべてエラーになります。

パス設定は関係ないような気がしてきたのですが違うのでしょうか。。。

補足日時:2007/05/15 14:57
    • good
    • 1

こんにちは。

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を起動し忘れていないか確認してみて下さい。

この回答への補足

回答ありがとうございます。
Tomcatは必ず再起動していますので大丈夫です。

今気づいたのですが私の場合、送信元メソッドはdoPostで受信元はdoGetです。

もしかしてdoGet同士、doPost同士じゃないとダメなんでしょうか。

補足日時:2007/05/16 10:36
    • good
    • 0

こんにちは。

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

いえいえ、こちらこそありがとうございました!

問題も解決しましたので助かりました♪

またなにかありましたらよろしくお願いします。

お礼日時:2007/05/17 09:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A