- PR -

JSPをサーブレット内で実行

1
投稿者投稿内容
いわ
会議室デビュー日: 2003/09/22
投稿数: 18
投稿日時: 2005-03-10 12:26
こんにちは。

JSPのカスタムタグを使用した製品がありまして、それをサーブレット内で使用したいと思います。
それらを使用したjspファイルを実行すると、文字列が出てくるのですが、それをサーブレット内で受け取ることは出来ないでしょうか。

jsp内で、setAttribute等は出来ますので、Stringな戻り値出なくても大丈夫です。

たとえばこんな感じで動くといいのですが・・・。
コード:
JSP.execute("/test.jsp");
String aa = (String)req.getAttribute("answer");

いわ
会議室デビュー日: 2003/09/22
投稿数: 18
投稿日時: 2005-03-10 12:49
解決しました。
質問を書くまで、色々方法を考えていたのですが、書いてからその方向で探すと見つかりました。
お騒がせしました^^;

コード:

RequestDispatcher dis = context.getRequestDispatcher("/test.jsp");
dis.include(req, res);
Object str = req.getAttribute("answer");





[ メッセージ編集済み 編集者: いわ 編集日時 2005-03-10 12:51 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-03-10 12:51
RequestDispatcher.include かな?
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/RequestDispatcher.html#include(javax.servlet.ServletRequest,%20javax.servlet.ServletResponse)

htmlのレンダリング結果が不要なのであれば HttpServletResponseWrapper を継承したダミーのレスポンスをわたしてやればOkです。
いわ
会議室デビュー日: 2003/09/22
投稿数: 18
投稿日時: 2005-03-10 12:53
お返事ありがとうございます。
見つかった方法が正しかったようで、良かったと思っています。

ありがとうございました。
いわ
会議室デビュー日: 2003/09/22
投稿数: 18
投稿日時: 2005-03-13 19:22
こんにちは。
お返事いただいた、include(request, response)で、ダミーを作らなければいけなくなりました。
response.getOutputStream()が必要になったためで、includeの中でgetWriter()をしようとしてエラーになります。
(「java.lang.IllegalStateException: getOutputStream()はこのレスポンスに対して既に呼び出されています」がでる)

さて、ダミーを作ろうとしていたのですが、どのようにすればよいのでしょうか。
さしあたり、出力先をSystem.outにでもしようと思ったのですが、わかりません。

すみませんが、教えていただけないでしょうか。
いわ
会議室デビュー日: 2003/09/22
投稿数: 18
投稿日時: 2005-03-13 22:13
何度もすみません。
一応通るようになりました。

DummyResponse.classを作成し、
public PrintWriter getWriter()
をオーバーライドし、System.outを返すようにしました。

コード:
public class DummyResponse extends HttpServletResponseWrapper {
	public DummyResponse(HttpServletResponse arg0) {
		super(arg0);
	}
	public PrintWriter getWriter(){
		return new PrintWriter(System.out);
	}
}



出来上がった、DummyResponseのインスタンスを、既存のHttpServletResponseを使って作成し、
includeに使用することで、JSP内でgetWriterを使ったために、getOutputStreamが使えないということを回避しました。nullデバイスのようなものがあればいいのですが(ありそうな気もしますが)、とりあえずこれでOKということにします。

ありがとうございました。
1

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