- PR -

サーブレットからサーブレットへの情報の引渡し方法について

投稿者投稿内容
かず
会議室デビュー日: 2004/03/03
投稿数: 2
投稿日時: 2004-03-03 12:05
サーブレットからサーブレットへの情報の引渡し方法で悩んでいます。

現状、
jsp(FORMの情報をPOST) → サーブレットA
という方式で動いています。
それを、
jsp(FORMの情報をPOST) → サーブレットB → サーブレットA
という方式に変更することを考えています。
(サーブレットBを新たに追加)

その際、サーブレットBで前画面からPOSTされた情報に対して加工・追加を
行い、サーブレットAに渡したいのです(新しい方式では、前画面からのPOST項目
は減らし、サーブレットBで不足分を補ってサーブレットAに渡したいのです)。

説明が下手で申し訳ありませんが、
旧)
FORMからのPOST項目 → サーブレットA
test1='A'
test2='B'
test3='C'

新)
FORMからのPOST項目 → サーブレットB → サーブレットA
test1='A' test1='A' (そのまま)
test2='A' test2='B' (変更)
test3='C' (追加)

ということをやりたいのです。
もともとサーブレットAに渡していた項目数は減らしません。
(サーブレットAの改修は行えないので)

サーブレットBで受け取った項目を単にサーブレットAへリダイレクトする方法
は分かったのですが、項目の追加と、値の変更を行った後の引渡し方法が分かり
ません。
セッションは使わない方針でいますので、サーブレットBからサーブレットAへ
POSTするような感じのものができないか悩んでいます。

もしお解かりの方がいましたら、ご教授お願いいたします。
もんも
常連さん
会議室デビュー日: 2002/10/01
投稿数: 24
投稿日時: 2004-03-03 13:29
もんもと申します。
こんな感じでしょうか?

RequestDispatcher rd =
this.getServletContext().getRequestDispatcher("/servlet/SampleServlet2");
rd.forward(request, response);
もんも
常連さん
会議室デビュー日: 2002/10/01
投稿数: 24
投稿日時: 2004-03-03 13:34
もんもです。
追加します。

サーブレットBで
request.setAttribute("データ","サーブレットB");
↑こういう風にすればサーブレットAで
String string = (String)request.getAttribute("データ");
でデータを取得できます。
yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2004-03-03 13:44
違う観点から。

サーブレットフィルタというのがあります。
今回のケースに適用できるかどうかはわかりませんが。
かず
会議室デビュー日: 2004/03/03
投稿数: 2
投稿日時: 2004-03-03 13:47
もんもさん、こんにちは。
回答ありがとうございます。

サーブレットA側で
request.getAttribute("データ");
ではなく
request.getParameter( "データ" )
で受け取れるための方法ってないでしょうか。

ご教授いただいて申し訳ありませんが、よろしくお願いします。

おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-03-03 14:17
引用:

サーブレットA側で
request.getAttribute("データ");
ではなく
request.getParameter( "データ" )
で受け取れるための方法ってないでしょうか。


これは、通常のクライアントからのHTTP GETやHTTP POSTのふりをしないと無理でしょう。

どちらにしろforwardではなくsendRedirectするとして、GETならばリダイレクト先の
URLにパラメタを付け加えて「http://.../xxxServlet?hoge=fuga&...」という形式で
書けばいいでしょう。

POSTならば、Servletの出力ストリームを取得して、そこにPOSTパラメタを送信する
ことになるのかな。。。ちょっとこちらはやったことが無いので分かりません。
もんも
常連さん
会議室デビュー日: 2002/10/01
投稿数: 24
投稿日時: 2004-03-03 15:14
もんもです。

getParameterですべてのデータを取得したい理由はなんとなく
推察できますが、setParameterはできないと思われます。
データ取得側ですべてのデータをgetAttributeでデータを取得できるようにするほうが
いいと思います。
データを格納するクラスを作ってAttributeに入れておけばいろんなところで
リクエストにsetAttributeする必要がないのでいいような気がします。

システムによってベストな方法はそれぞれあると思いますが、
僕はデータ格納用のクラスを作ってしまいます。
(StrutsのActionFormみたいな感じです。)
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-03-03 15:27
引用:

(サーブレットAの改修は行えないので)


これが全てを表しているような気がしますが。。。

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