- PR -

ServletからJSPにパラメータを渡す方法について

投稿者投稿内容
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2003-08-11 13:33
引用:

(株)ぽちさんの書き込み (2003-08-11 12:10) より:
引用:

takuさんの書き込み (2003-08-11 12:02) より:

上記ならJSPで
String message = request.getParamter("error_message");
というようにすれば取れます。
でもこれだと文字列しか渡せませんよね。



こんにちわ。

あれ、でもみーちくさんはこれでnullになってしまったんですよね?

違うのかな?


 駄目ですか?
念の為に下記のようなサンプルを作成してテストしてみました。
私のところはこれで問題なく値が渡せております。
環境はj2sdk1.3.1_02+JRUN3.1です。

//TestServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class TestServlet extends HttpServlet{

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{
getServletContext().getRequestDispatcher("/test.jsp?message=テスト").forward(request,response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{
doGet(request,response);
}
}


//test.jsp
<%@ page contentType="text/html; charset=shift_jis"%>
<HTML>
<HEAD>
<TITLE>テスト</TITLE>
</HEAD>
<BODY>
<h1><%= request.getParameter("message")%></h1>
</BODY>
</HTML>
ニシトミ
ベテラン
会議室デビュー日: 2003/04/24
投稿数: 76
お住まい・勤務地: 千葉・東京
投稿日時: 2003-08-11 14:32
[quote]
(株)ぽちさんの書き込み (2003-08-11 12:07) より:
引用:


requestはservletへの処理要求時に1回だけ発行されて
jspへはそのrequestを流しているだけなので、上記のような
requestの追加発行はできないのではないでしょうか?

少なくともgetRequstDispatcherの引数はそういう意味合い
でのURLではない気がします。

sendRedirectとかだったら行けるような。

すいません、むちゃくちゃ間違ってるかも。



どうもニシトミです。
追加発行がわかりませんが?
ぽちさんの仰ってるのは逆でしょうか?
RequestDispatcherはコンテナの内部で通信して
pageを返すので、requestは引継ぎます

HttpServletResponseのsendRedirectは、
クライアントに強制指定した、URLを
開かせるので、requestは引き継げません。

みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2003-08-11 14:52
みーちくです。
皆様、いろいろありがとうございました。

takuさん
私とtakuさんのソースの違いは、私はPostでtakuさんはGetです。
あと、メッセージを表示している所も、私は上部のスクリプレット内でパラメーターを
取得し、表示してます。
違いは無いように感じるのですが。

今の所、setAttributeで問題なく動いているので、このまま開発を続けようと思います。
が、ちょっと気になるので、調査は続けたいと思います。
原因がわかり次第、また投稿いたします。

皆様、ありがとうございました。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-08-11 15:07
引用:

ニシトミさんの書き込み (2003-08-11 14:32) より:

どうもニシトミです。
追加発行がわかりませんが?
ぽちさんの仰ってるのは逆でしょうか?
RequestDispatcherはコンテナの内部で通信して
pageを返すので、requestは引継ぎます



これは完全に僕の認識が違っていました。
requestを「引き継ぐ」のはわかります。

ただ、getRequestDispatcherでクエリーを発行すること
自体ができるのか疑問だったのです。

「追加」というのは
1.表示側でリクエスト発行
  →<form>で発行。

2.servlet側でjspにdispatchする際にまたrequest発行
  →getRequestDispatcher("/hoge.jsp?xxx=xxx")で発行

ここで、2.の部分を同一のrequestに「追加」することが
できる、できないという意味です。

答えは、「できる」ということですね。


引用:


HttpServletResponseのsendRedirectは、
クライアントに強制指定した、URLを
開かせるので、requestは引き継げません。



これは、わかります。
最初に書いた内容ができない場合、getReqestDispatcherではなく
sendRedirect("URL?xxx=xxx")でやればパラメータ渡せるのでは
という意味でした。

今回のケースでは、requestを「引き継ぐ」必要はないんですよね?
servletで設定した文字列をjspに渡したいだけですから。
なので、sendRedirectのケースを出したのです。

わたしもまだ未熟故理解していないこともあり、勉強になります。

では。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-08-11 15:10
takuさん、みーちくさん

私の方でも試してみました。

takuさんのソースを試したところ、すんなりできました。
私の認識違いのようでした。ありがとうございます。

また、みーちくさんの提示しているソースも試したが
こちらもエラーメッセージが表示されました。

みーちくさん環境でnullになってしまうのは不思議ですね。

環境
j2sdk1.4.1_01
apache2.0.39
tomcat4.1.3
極東
会議室デビュー日: 2003/08/11
投稿数: 9
投稿日時: 2003-08-11 15:10
初めての投稿ながら突っ込みです。

みーちくさんのソース
req.getRequestDispatcher("/Search/error.jsp?error_message=" +
error_message+ "").forward(req, res);

takuさんのソース
getServletContext().getRequestDispatcher("/test.jsp?message=テスト").forward(request,response);

対象ObjectがServletContextか、Requestかの差異があるようですが?

※的外れならすみません。テストまではしていないので。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-08-11 15:17
連続で投稿してしまってすいません。。

もしかしたら、ここで提示しているソースと
元ソースとで差分ありませんか?
元ソースのコピー&ペーストでしょうか?

提示しているソースでは基本的部分で
コンパイルエラーが出ます。
「}」が一つ多いため。

コピー&ペーストでないなら、もしかしたら
元ソースのクエリー文字列部分がスペルミスってる
とかないですかね?

# 問題自体は解決しているようなのであまり
# 追求しても仕方ないですが・・。
ニシトミ
ベテラン
会議室デビュー日: 2003/04/24
投稿数: 76
お住まい・勤務地: 千葉・東京
投稿日時: 2003-08-11 15:37
(株)ぽちさんすみません
私の方もなんか誤解してました、というか
私のレスではなかったのですねすぐ下に
ぽちさんの書き込みがあって勘違いしてました。
失礼しました。

スキルアップ/キャリアアップ(JOB@IT)