- - PR -
ディスパッチしたJSPファイルのアプレットが表示できない
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-06-07 00:29
はじめまして。
nakatakaです。 下記の現象で困っています。 ご教授よろしくお願いします。 URLにJSPファイルのアドレスを直接指定した場合は、 JSPと同じディレクトリにあるアプレットを表示できるのですが、 サーブレットからJSPファイルへディスパッチした場合、 以下のようなエラーになってしまいます。 CLASSPATHにアプレットのクラスを登録したりしましたが、 どうしてもアプレットをロードできません。 --- エラー内容 --- java.lang.ClassNotFoundException: HelloApplet.class at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:153) at sun.plugin.security.PluginClassLoader.findClass(PluginClass ・・・・・・・・ ------------------ OSは、Windows2000でTomcat4.1を使用しています。 ○サーブレット(DispatchServlet.java) %TOMCAT_HOME%\\webapps\\TEST\\WEB-INF\\classes ○JSPファイル(HelloApplet.jsp) アプレット(HelloApplet.java) %TOMCAT_HOME%\\webapps\\TEST\\jsp\\ サーブレット(DispatchServlet.java) ======================================== import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class DispatchServlet extends HttpServlet{ public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException{ try{ getServletConfig(). getServletContext(). getRequestDispatcher( "/jsp/HelloApplet.jsp"). forward( request, response ); } catch( Exception e ){ e.printStackTrace(); } } } =================================================================== JSPファイル(HelloApplet.jsp)======================================== <%@ page language="java" contentType="text/html;charset=Shift_JIS" %> <%-- テスト --%> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS"> <title>テスト</title> </head> <body> <CENTER> <applet code="HelloApplet.class" width=400 height=400> </applet> </CENTER> </body> </html> =================================================================== アプレット(HelloApplet.java)======================================== import java.applet.*; import java.awt.*; public class HelloApplet extends Applet { public void paint(Graphics g) { // 文字を表示する g.drawString("Hello Applet",0,300); } } =================================================================== |
|
投稿日時: 2004-06-07 01:35
Dispatch なのにうまくいかないのは妙ですね?
アクセスログを確認してみてはいかがでしょうか。 404 が返っている記録を確認できませんか? |
|
投稿日時: 2004-06-07 02:49
nakatakaさん、こんにちは。
この場合のドキュメントベースはどこになるのでしょうかね。 サーブレットを呼び出したところから参照できるところに HelloApplet.classファイルを配置したらどうでしょう。 または、<applet>タグでの指定を相対URLではなく、 完全限定にしてみてはどうでしょう。 |
|
投稿日時: 2004-06-07 09:01
>Dispatch なのにうまくいかないのは妙ですね?
寝ぼけてました。Dispatch なのに、って意味不明ですね。 うまくいかないのは恐らく forward してるからです。redirect にするか、Kissingerさんの仰るとおり絶対パス表記にすればうまくいきそうです。 |
|
投稿日時: 2004-06-07 09:26
これって、Servletを呼ぶときに、Invokerを使用していませんか?
web.xmlにサーブレットを登録して、マッピングしてあるなら、こうならないと思いますよ。 |
|
投稿日時: 2004-06-08 01:46
たくさんのレスありがとうございます。
早速試してみましたが、うまくいきませんでした。 更なるご教授お願いいたします。 念のためアプレットをサーブレットと同じディレクトリにも配置して テストしています。 ○ログ(下記)を確認しました。 アプレットをサーブレットとして扱おうとしてしまっているのでしょうか? 2004-06-08 01:12:07 StandardWrapper[/TEST:org.apache.catalina.INVOKER.HelloApplet.class]: サーブレット org.apache.catalina.INVOKER.HelloApplet.class を利用不可能にマークします 2004-06-08 01:12:07 invoker: パス /TEST/servlet/HelloApplet.class にサーブレットインスタンスを割り当てることができません javax.servlet.ServletException: ラッパがサーブレットクラス HelloApplet.class またはそれが依存するクラスを見つけることができません at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:891) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:668) at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:416) ○redirectすれば、うまく動作するのですが、可能ならばDispatch/forwardで 情報を渡したく思っています。 「/TEST/jsp/HelloApplet.class」と絶対パスでアプレットを指定すると エラー内容(下記)が変わりました。 java.lang.NoClassDefFoundError: /TEST/jsp/HelloApplet (wrong name: HelloApplet) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:502) at java.security.SecureClassLoader.defineClass ・・・・・・・・ ○Servletを呼ぶときに、Invokerを使用しないようにweb.xmlを変更しましたが、 現象は同じでした。 以上 |
|
投稿日時: 2004-06-08 02:18
>「/TEST/jsp/HelloApplet.class」と絶対パスでアプレットを指定すると
>エラー内容(下記)が変わりました。 コードベースが異なるからではないでしょうか? 明示的にコードベースを指定するか、HelloApplet にパッケージを指定したらどうでしょうか? |
|
投稿日時: 2004-06-08 13:31
.classのままだと、パッケージ名と実際のパス上での対応が
必要になりますので、任意のディレクトリに配置できるように .jarにまとめたほうが簡単になります。 (問題の本質ではありませんが) |
1