- - PR -
struts1.2でサーブレットを実行させたい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 2008-07-14 17:26
普通、Servletにコンストラクタなんか書かないでしょ。
init()ならともかく。 判断材料がないので憶測ですが、 StrutsのActionタグに、Actionを継承しないクラスを貼り付けたいんですか? そりゃ的外れだと思います。 Strutsが登場する前は、自分でweb.xmlに、 servletタグとかservlet-mappingタグを記述していたものです。 |
|
投稿日時: 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>タグにストリームで返すと言うもので、こちらの過去の スレッドを参考に書いたものです。 このまま実行しても、どこにも入ってこない為、コンストラクタで試しました(パスは認識)。 よろしくお願いします。 |
|
投稿日時: 2008-07-14 18:02
Actionタグに、Actionを継承しないクラスを貼り付けたって、動かなくて当然です。
Strutsのアプリケーションとして実現したいのなら、Actionを継承してください。 ちなみに使用するメソッドは、doPost()やdoGet()ではありません。 Servletが叩ければいいのなら、web.xmlに、しかるべき記述を施せばよろしい。 Strutsなんぞ、放っておいて結構。つかStrutsじゃないし。 ・・・さっきの投稿と、全然変わりませんね。 |
|
投稿日時: 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を配置。 にて、無事画像のストリーム表示も成功でした(処理ロジックは変わらず)。 ありがとうございました。 |
|
投稿日時: 2008-07-15 10:14
こういうのも自己解決のうちに入るんですか。
私が知らなかっただけなんですかね。 勉強させていただきました。 |
1