- PR -

addHeaderの使い方

投稿者投稿内容
Hide
会議室デビュー日: 2003/02/25
投稿数: 11
投稿日時: 2003-07-17 11:48
Kissingerさん、わらびさん、

情報ありがとうございます。
forward()の方法を試しましたが、

===ソース===
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Test1 extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {
ServletConfig conf = getServletConfig();
ServletContext sc = conf.getServletContext();

req.setAttribute("myName","Hide");
req.setAttribute("myID","10101");
sc.getRequestDispatcher("http://fsgt010.soft.hitachi.co.jp/jp1web/servlet/Test2").forward(req,res);

/******************************************************************
Jump
*******************************************************************/
res.sendRedirect("http://fsgt010.soft.hitachi.co.jp/jp1web/servlet/Test2");

res.setContentType("text/html;charset=EUCJIS");
PrintWriter out = res.getWriter();

out.println("<HTML>");
out.println("<HEAD>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("</BODY>");
out.println("</HTML>");
}

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {
doPost(req, res);
}
}

コンパイルできたが、実行失敗しました。
1)getRequestDispatcher()は同じサーバ上へのforwardしかできないみたいです。
2)また、forward()を利用すると、sendRedirect()が利用できないみたいです。

因みに、違うサーバ間のサーブレットへ自動的にジャンプし、パラメータを渡す方法がご存知なら、教えてください。
**
サーバ1のサーブレットTest1からサーバ2のサーブレットTest2へ自動的にジャンプします。
ジャンプする同時にmyName=Hideを渡したいです。
**

宜しくお願いいたします。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2003-07-18 00:15
Hideさんの課題は少なくとも2つあるようですね。
1.他のサーバにジャンプすること。
2.POSTのように情報を渡すこと。

何をしたいのかは良く分かりません(多分全く別のアプローチで
解決可能なことなのかも知れません)が、いずれにしても HTTP
および Servletに対する理解を深めたほうが良いのではないでし
ょうか。

気になる点は、
1.Headerと Parameter, Parameterを混同してる?
(情報を渡すことができればいいというのであればどれでもいいですが。)

2.sendRedirect()により、サーバからクライアントにどのような内容が
 送られ、クライアントはどう振舞うか理解していない?

なんですが、大丈夫でしょうか?
(気に障りましたら御免なさい。)
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-07-18 14:08
ども、ほむらです。
元ネタはCGIの場合ですがJavaでも応用できるはずです。
(ブラウザの動作をエミュレートしてあげるだけです)
詳細はRFC2616 HTTP1.1に関する文書に目を通してください。
-------------------
流れとしては。。。
1.送信先のサーバー PORT:80を開く
2.送信先にHTTPヘッダ(リクエスト)の送信
3.送信先にエンティティ(データ)を送信
4.送信先のサーバーからのHTTPレスポンスにてエラーチェック
5.後始末色々

例を使用するならば
コード:
http://fsgt010.soft.hitachi.co.jp/jp1web/servlet/Test2
にmyName=Hideを送る場合。

fsgt010.soft.hitachi.co.jpのポート80(HTTPポート)を開いてあげて
そこに、
POST /jp1web/servlet/Test2 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
Host: fsgt010.soft.hitachi.co.jp

myName=Hide

という文字列を書き込めば
フォームでsubmitしたような動作をつくれます。(エンコードを忘れずに)

# あっLocation:は指定できなかったかも(笑
# 現在勉強中w
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-07-18 19:25
Javascriptが使えるのなら、OnLoadイベントでフォームをポストするような
HTMLを送ればできますね。

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