- PR -

struts1.2でサーブレットを実行させたい

1
投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2007/09/29
投稿数: 78
投稿日時: 2008-07-14 16:36
こんにちは。

struts1.2のTomcat5で開発してます。
初歩的な質問で申し訳ないのですが、JSP内に記述されたURL(Servlet)を実行させたいのですが、HttpServletRequest、HttpServletResponseを保持して入ってきてくれません。

Test()のコンストラクタには、入ってきますので、パスは間違っていないと思います。

struts-config.xml
<action path="/Test"
type="Test"
scope="request">
</action>

JavaソースTestは、/APP/WEB-INF/classes以下に配置。

JSPでの呼び出しは、<image src="Test.do">で検証中。

よろしくお願いします。

org.apache.struts.actions.IncludeActionでも試みたのですが、
設定ミスなんだろうが、パスの認識もできませんでした。
Actionのように、Request,responseが取得できている状態で
JSPの呼び出しで可能であれば、どのような形でも良いのですが・・。


[ メッセージ編集済み 編集者: 未記入 編集日時 2008-07-14 16:43 ]

[ メッセージ編集済み 編集者: 未記入 編集日時 2008-07-14 16:58 ]
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2008-07-14 17:26
普通、Servletにコンストラクタなんか書かないでしょ。
init()ならともかく。

判断材料がないので憶測ですが、
StrutsのActionタグに、Actionを継承しないクラスを貼り付けたいんですか?
そりゃ的外れだと思います。

Strutsが登場する前は、自分でweb.xmlに、
servletタグとかservlet-mappingタグを記述していたものです。
未記入
ベテラン
会議室デビュー日: 2007/09/29
投稿数: 78
投稿日時: 2008-07-14 17:44
ありがとうございます。

おっしゃるように、パスを認識しているか確かめる為に記述しております。
Javaの方を書いていませんでしたが、


import java.io.File;
import java.io.FileInputStream;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletImage extends HttpServlet{

public void init(ServletConfig config) throws ServletException {
super.init(config);
System.out.println("Start1");
}

public void destroy() {
System.out.println("Start2");
}

protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
System.out.println("Start3");
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {
System.out.println("Start4");
}

protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, java.io.IOException {

System.out.println("Start5");
File f = new File("/data/test.jpg");
// System.err.println(f.exists());
// System.err.println(f.getAbsolutePath());
response.setContentType("image/jpeg");

ServletOutputStream out = response.getOutputStream();
FileInputStream in = new FileInputStream(f);

int sector = in.read();
for (;sector != -1;sector = in.read()) {
out.write(sector);
}
in.close();
out.close();
}
}

こんな感じで、テストしているのですが、
実現したいのは<image>タグにストリームで返すと言うもので、こちらの過去の
スレッドを参考に書いたものです。

このまま実行しても、どこにも入ってこない為、コンストラクタで試しました(パスは認識)。

よろしくお願いします。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2008-07-14 18:02
Actionタグに、Actionを継承しないクラスを貼り付けたって、動かなくて当然です。
Strutsのアプリケーションとして実現したいのなら、Actionを継承してください。
ちなみに使用するメソッドは、doPost()やdoGet()ではありません。

Servletが叩ければいいのなら、web.xmlに、しかるべき記述を施せばよろしい。
Strutsなんぞ、放っておいて結構。つかStrutsじゃないし。

・・・さっきの投稿と、全然変わりませんね。
未記入
ベテラン
会議室デビュー日: 2007/09/29
投稿数: 78
投稿日時: 2008-07-14 18:35
自己解決しました。

Servletにのっとった(?)

web.xml
<!-- Servlet Mapping -->
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>

JSP
<image src='http://localhost:6833/APP/servlet/test'>

JavaソースはAPP/WEB-INF/classes/Test.classを配置。

にて、無事画像のストリーム表示も成功でした(処理ロジックは変わらず)。

ありがとうございました。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2008-07-15 10:14
こういうのも自己解決のうちに入るんですか。
私が知らなかっただけなんですかね。
勉強させていただきました。
1

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