- PR -

ディスパッチしたJSPファイルのアプレットが表示できない

1
投稿者投稿内容
nakataka
会議室デビュー日: 2004/06/07
投稿数: 2
投稿日時: 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);
}
}
===================================================================
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-06-07 01:35
Dispatch なのにうまくいかないのは妙ですね?
アクセスログを確認してみてはいかがでしょうか。
404 が返っている記録を確認できませんか?
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-06-07 02:49
nakatakaさん、こんにちは。

この場合のドキュメントベースはどこになるのでしょうかね。

サーブレットを呼び出したところから参照できるところに
HelloApplet.classファイルを配置したらどうでしょう。

または、<applet>タグでの指定を相対URLではなく、
完全限定にしてみてはどうでしょう。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-06-07 09:01
>Dispatch なのにうまくいかないのは妙ですね?
寝ぼけてました。Dispatch なのに、って意味不明ですね。

うまくいかないのは恐らく forward してるからです。redirect にするか、Kissingerさんの仰るとおり絶対パス表記にすればうまくいきそうです。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2004-06-07 09:26
 これって、Servletを呼ぶときに、Invokerを使用していませんか?
web.xmlにサーブレットを登録して、マッピングしてあるなら、こうならないと思いますよ。
nakataka
会議室デビュー日: 2004/06/07
投稿数: 2
投稿日時: 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を変更しましたが、
現象は同じでした。

以上
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-06-08 02:18
>「/TEST/jsp/HelloApplet.class」と絶対パスでアプレットを指定すると
>エラー内容(下記)が変わりました。
コードベースが異なるからではないでしょうか?
明示的にコードベースを指定するか、HelloApplet にパッケージを指定したらどうでしょうか?
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-06-08 13:31
.classのままだと、パッケージ名と実際のパス上での対応が
必要になりますので、任意のディレクトリに配置できるように
.jarにまとめたほうが簡単になります。
(問題の本質ではありませんが)
1

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