- PR -

JSP/ServletからAppletを呼び出し方法

1
投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2004/09/27
投稿数: 71
投稿日時: 2005-03-16 17:25
JSP/ServletからAppletを呼び出そうとしました。
<applet ...>内で指定した枠は確保されてブラウザには出てきているのですが、問題のApplet継承クラス(MyAwt01.class)の読み込みに失敗します。
クラスの配置場所を変えてJSPと同じ配置場所にしたのですがこれも同じ結果でした。
プロンプトからhtml(JSPを変更したもの)を呼び出したものはうまくいくので、コードは問題ないと思います。

例:JSP
<applet code='MyAwt01.class' width='250' height='100'></applet>
例:Servlet
out.println("<html><body><applet code=\'MyAwt01.class\' width=\'250\' height=\'100\'></applet></body></html>");
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-03-16 23:20
サーブレットから転送しているため、ブラウザから見えているパスと JSP の配置されているパスが異なると言うことはないでしょうか?
コードベースを指定しなければ相対パスでクラスファイルを参照しに行きますから、サーブレットのパスから相対的に解決できるよう記述しなければいけないということではないかと。
未記入
ベテラン
会議室デビュー日: 2004/09/27
投稿数: 71
投稿日時: 2005-03-18 18:42
JSP・Servlet共々、以下のように試みました。
指定クラスを探しているのかサーブレット(JSP)のページが表示されてから、読み込み失敗の表示がステータスバーに現れるのに時間(約30秒)がかかるようになりました。
パスはサーブレット・JSPからうまくいるようですが、結局読み込み失敗になってしまいます。無念。
そこで、Appletを継承したクラスがclasses配下にあるのでJSPやhtmlでは直接参照ができないと思い、Servletからの参照のみを試みたのですがうまくいきません。

試みて失敗したパターン
@out.println("<html><body><applet code='./MyAwt01.class' width='250' height='100'></applet></body></html>");
Aout.println("<html><body><applet code='/WEB-INF/classes/MyAwt01.class' width='250' height='100'></applet></body></html>");
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-03-18 22:17
ブラウザから .class ファイルを直接指定して読み込めますか?
html では成功した、とのことですがそのときクラスファイルは WEB-INF/classes 以下にありましたか?
html で成功したときと同じ配置で試してみてはいかがでしょう。

[ メッセージ編集済み 編集者: インギ 編集日時 2005-03-18 22:18 ]
未記入
ベテラン
会議室デビュー日: 2004/09/27
投稿数: 71
投稿日時: 2005-03-19 03:51
>ブラウザから .class ファイルを直接指定して読み込めますか?
直接読み込むというのは、C:\MyAwt01.classをアドレス指定すると言うことでしょうか?
C:\call.html(MyAwt01.classを呼び出すhtml)なら、うまくいきます。

>html では成功した、とのことですが
いえ、WEBアプリケーションではなく、上記のような状態です。

>そのときクラスファイルは WEB-INF/classes 以下にありましたか?
失敗しているWEBアプリケーションの方は、WEB-INF/classes配下に入れています。

>html で成功したときと同じ配置で試してみてはいかがでしょう。
上記が駄目だったので、C:\call.htmlをもとにJSP・html(Applet呼出し用)と同じ配置(WEBアプリケーションルート直下)にMyAwt01.class(javaソースではなく)を入れたのですがこちらも駄目だったのです。
<html><body><applet code='../MyAwt01.class' width='250' height='100'></applet></body></html>
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-03-19 09:14
つまり、現状では
・htmlではできる<->jspではできない
という状態ではなく、
・ローカルファイルシステムに配置してあるhtmlではできる<->サーブレットコンテナ経由ではできない
という状態なのですよね?
うまくいかない条件が何なのか順番に切り分けていきましょう。

ブラウザから直接、というのはクラスファイルがちゃんと Web サーバを経由して読み込めるかどうかを検証するためです。
なので
http://host:port/contextpath/WEB-INF/classes/MyAwt.class
という URL を入力することを意図していました。
#たぶん、読み込めないのですが。
まずWebサーバを経由してhtmlからアプレットを呼び出せるか試してみましょう。

call.html と MyAwt01.class を Web アプリケーションルート直下に置いたらうまくうごきますか?
それでうまく動くなら call.html の拡張子を jsp にするだけですね。
#codeのパスがうまく解決できていない気がします
あと、サーブレットコンテナのアクセスログを確認してみることをオススメします。
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2005-03-22 22:45
加納というものです。

>JSP/ServletからAppletを呼び出そうとしました。

不可能です。恐らく、こうしたかったのでは。

applet.class

import inservert;

public class A extends applets {
inservert inservletc;
public method() {
inservletc.inservletmethod();
}
}

servlet.class

public outservlet extends HttpServlet {
public service() {
inservlet.inservletmethod();
}
}

inservlet.class

public inservlet {
inservletmethod() {
;;;<-ここをアプレット上から呼び出したい
}
}

違うJVM上なので、簡単に言えば不可能です。

いつもこういうのを見ると。。。

学習上での疑問->教師に聞け。
会社でのお仕事->頼むからコーディングは(もちろん設計も)やめてくれ。。
#独修->こんぐらい自分で分かれ。。

とか思ってみたり。
stuner
会議室デビュー日: 2008/06/19
投稿数: 1
投稿日時: 2008-06-19 14:20
はじめまして
いつも問題解決に役立てさせていただいているので、恩がえしに3年越しの返信です。
結論から申しますと可能です。
単にjspページに<applet>タグからアプレットを呼び出したいということであれば、以下のサイトが参考になります。(開発環境はnetbeansですが、応用は可能でしょう)
http://blogs.sun.com/tor/entry/applets_in_your_webapps

いくらかピックアップするとjavaソース上で
public String getFoo() {
return "<applet code=\"ArcTest.class\" width=\"300\" height=\"300\"/>";
}
のようなコードを書き、デザイン画面で出力テキストを追加し、このオブジェクトのプロパティvalueに#{Page1.foo}のように指定すると私の環境では意図どおり、JSPの画面に意図した位置、サイズでアプレットが動作しました。実はこのままでも状況によりエラーは出ますが、JAVAコンソールでよく確認すれば解決可能です。
1

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