• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Tomcatによるサーブレット起動がうまくいきません)

Tomcatでサーブレット起動がエラーになる理由と解決方法

このQ&Aのポイント
  • Tomcatによるサーブレット起動がエラーになる理由とは何でしょうか?エラーメッセージは「ラッパがサーブレットクラスを見つけることができません」となっています。このエラーは、サーブレットクラスやその依存クラスが見つからないために発生するものです。
  • このエラーが発生する原因としては、サーブレットクラスの配置が正しくない、クラスパスが設定されていない、依存するクラスが見つからないなどが考えられます。サーブレットクラスの配置は、Tomcatのwebappsディレクトリ内に正しく配置されているか確認してください。また、クラスパスの設定も正確に行われているか確認しましょう。
  • また、依存するクラスが見つからない場合は、必要なクラスファイルが正しくコンパイルされ、パスが設定されているか確認してください。エラーメッセージに表示されているサーブレットクラスや依存クラスのパスが正しいかどうかも確認してみてください。これらの確認を行いながら、エラーが発生している原因を特定し、解決することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • ssj
  • ベストアンサー率73% (11/15)
回答No.4

> パッケージといわれているのは登録された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指定はきちんとしておくべきでしょう

tomsoya
質問者

お礼

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

その他の回答 (4)

  • ssj
  • ベストアンサー率73% (11/15)
回答No.5

> ところで、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
tomsoya
質問者

お礼

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

  • ssj
  • ベストアンサー率73% (11/15)
回答No.3

> <servlet-class> > /servlet/toroku1.class > </servlet-class> servlet-classには、Servletのクラス名を記述します。 上記の記述だと、toroku1クラスはservletパッケージに 存在していると思いますので、 <servlet-class>  servlet.toroku1 </servlet-class> となっていなければなりません。

tomsoya
質問者

補足

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

  • ssj
  • ベストアンサー率73% (11/15)
回答No.2

classesディレクトリにtoroku1.classという クラスファイルが存在しないということはないですか?

tomsoya
質問者

補足

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 を呼び出す形にしているのですが・・・・ なぜがエラーになります。

  • qazwsxe
  • ベストアンサー率20% (2/10)
回答No.1

外しているかもしれませんが・・・ もしかしたら、可能性はなきにしもあらずです。

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

補足

当初、質問にあげかけていたエラーは解決されましたが、今度は別のエラーが発生しています。 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回答での補足に追加した構成になっています。 なぜでしょうか?

関連するQ&A