プロが教えるわが家の防犯対策術!

サーブレットを呼び出すと以下のようなエラーが発生します。
----------------------------------------------------
type Exception report

message Internal Server Error

description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: ラッパがサーブレットクラス classes/toroku1.class またはそれが依存するクラスを見つけることができません
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:873)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:655)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
----------------------------------------------------
なぜでしょうか?
教えてください。m(__)m

A 回答 (5件)

> パッケージといわれているのは登録されたCONTEXTフォルダ内の


> 子フォルダ以下にclassが存在している事を一般的にパッケージと言うんですよね。

これは全く違います。

# この認識では、今回の問題が解決しても、どんどん躓くと思いますので、
# Javaの基本についてきちんと勉強してからサーブレットの
# 勉強をしたほうがよいと思います。。。

簡単に説明すると、パッケージは、イメージとしてはクラスの
グループのようなものです。
例えば、java.util とか、java.io とか、、、
で、これは、
----
package foo;
public class boo {
    :
}
----
のように、「package xxx;」とソース中に指定します。

上記のソースでは、booクラスはfooパッケージのクラスだと
いうことを表します。また、他のJavaのソースで参照するときには、
----
import foo.boo;
----
などと記述します。

また、このパッケージは実際のディレクトリ構成とも関係しており、
上のbooクラスは、「foo\boo.class」というディレクトリ
構成でクラスパスの通っているところに置いておく必要が
あります。

# なお、ごく簡単にしか説明していませんから、きちんと
# 理解するためにも、Javaのパッケージについては勉強
# することをお勧めします。

ということで、

> webapps/Sample/classes/toroku.class
> で存在していて、Sampleフォルダをserver.xmlにCONTESXT登録をしていれば、
> 上記のように設定すればよいという事ですか?

というのは間違いです。

toroku1.javaで「package servlet;」という記述がある場合には、
webapps/Sample/WEB-INF/classes/servlet/toroku1.class
にクラスを置き、No.3で記述したように、

> <servlet-class>
>  servlet.toroku1
> </servlet-class>

と記述します。
package指定をしていない場合には、
webapps/Sample/WEB-INF/classes/toroku1.class
にクラスを置き、
<servlet-class>
 toroku1
</servlet-class>
と記述します。

なお、JDK1.4(だったと思います)から、package指定のない
Javaのソースはコンパイルエラーにされたと思いますので、
package指定はきちんとしておくべきでしょう
    • good
    • 0
この回答へのお礼

ありがとうございますm(__)m
まだまだ、勉強がたりません・・・・
ところで、CONTEXT登録したフォルダ以下にclassを配置し使用するにはフォルダに対してクラスパスをとおし
package 指定したJavaソースを作成しコンパイルすれば
よいということですよね?
また、その際のpackage指定としては、今回のフォルダ構成からすると
-----
package Sample.classes
-----
とすればよいということですか?

お礼日時:2003/04/04 13:20

> ところで、CONTEXT登録したフォルダ以下にclass


> を配置し使用するにはフォルダに対してクラスパスをとおし
> package 指定したJavaソースを作成しコンパイルすれば
> よいということですよね?

大体はOKです。
パッケージについては記述した通りですので、
理解を深めるにはもっと詳しい情報を探してみてください。
なお、WEBアプリケーション(Servletとか)については、
少し異なる部分があります。

参考URLでも解説しましたが、WEBアプリケーションでは
ContextRoot\
 WEB-INF\
  lib\
  classes\
というディレクトリ構成を一般にとり、この場合には
クラスパスを通さなくても、実行時にclasses、libディレクトリは見てくれます。

> また、その際のpackage指定としては、
> 今回のフォルダ構成からすると
> -----
> package Sample.classes
> -----
> とすればよいということですか?

というわけで、今の場合には
----
package xxx;
public class toroku1 extends HttpServlet {
}
----
というサーブレットファイルを作ってコンパイルし、
出来たクラスファイルを、
Sample\WEB-INF\classes\xxx\toroku1.class
という形で置き、
<servlet-name>
 toroku1
</servlet-name>
<servlet-class>
 xxx.toroku1
</servlet-class>
といった感じでweb.xmlに記述します。


最初は誰でも初心者です。
がんばって下さい。

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=508962
    • good
    • 0
この回答へのお礼

ありがとうございます。
なんとか、servletも動き出しました。
m(__)m

お礼日時:2003/04/08 12:59

> <servlet-class>


> /servlet/toroku1.class
> </servlet-class>

servlet-classには、Servletのクラス名を記述します。
上記の記述だと、toroku1クラスはservletパッケージに
存在していると思いますので、

<servlet-class>
 servlet.toroku1
</servlet-class>

となっていなければなりません。

この回答への補足

パッケージといわれているのは登録されたCONTEXTフォルダ内の子フォルダ以下にclassが存在している事を一般的にパッケージと言うんですよね。
webapps/Sample/classes/toroku.class
で存在していて、Sampleフォルダをserver.xmlにCONTESXT登録をしていれば、
上記のように設定すればよいという事ですか?

補足日時:2003/04/04 01:20
    • good
    • 0

classesディレクトリにtoroku1.classという


クラスファイルが存在しないということはないですか?

この回答への補足

classファイル自体は存在しているのですが、
web.xmlの設定がおかしいのかと思うんですが・・・
server.xmlにはcontextを登録していますし
アプリ用のweb.xmlもアプリフォルダのWEB-INFの下に作成しました。
内容は
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>
toroku1
</servlet-name>
<servlet-class>
/servlet/toroku1.class
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>
toroku1
</servlet-name>
<url-pattern>
/SampleAdressApp1
</url-pattern>
</servlet-mapping>
</web-app>
とweb.xmlには登録し、呼び出し元からは
http://localhost:8080/SampleAdressApp1
を呼び出す形にしているのですが・・・・
なぜがエラーになります。

補足日時:2003/04/02 02:51
    • good
    • 0

外しているかもしれませんが・・・


もしかしたら、可能性はなきにしもあらずです。

参考URL:http://www.vc-net.ne.jp/~ytp/bbs/java/bbs9875.html

この回答への補足

当初、質問にあげかけていたエラーは解決されましたが、今度は別のエラーが発生しています。
Apache Tomcat/4.0.4 - HTTP Status 404 - /SampleAdressApp1
-------------------------------
type Status report
message /SampleAdressApp1
description The requested resource (/SampleAdressApp1) is not available.
-------------------------------
といったエラーです・・・
classの配置も、上記のNo.2回答での補足に追加した構成になっています。
なぜでしょうか?

補足日時:2003/04/02 03:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!