- PR -

Servlet.init()の例外が発生

1
投稿者投稿内容
きりん
会議室デビュー日: 2004/08/17
投稿数: 16
投稿日時: 2004-08-30 18:55
tomcat起動時に呼びたいサーブレットである「MainController.java」という
ソースファイルがありまして、web.xmlに<load-on-startup>を追加したのですが、     
javax.servlet.ServletException: サーブレット MainController のServlet.init()が例外を投げました
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:211)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:805)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:696)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:605)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:677)
java.lang.Thread.run(Thread.java:534)

このようなエラーが発生してしまいます。EclipseでMainController.javaをコンパイル
しましたが、エラーは発生しませんでした。ローカルホストアドレスでアクセスすると
このようなエラーとなります。原因お解りの方がおられましたらご教示お願いいたします。

「MainController.javaより抜粋」

public class MainController extends HttpServlet{
public void init() throws ServletException{
ItemCollection collection=new ItemDAO().findAll();

ServletContext application=getServletContext();
application.setAttribute("collection",collection);

}
     
            init()部分のみ抜粋しました。    

「web.xmlより抜粋」

<servlet>
<servlet-name>MainController</servlet-name>
<servlet-class>ecsite.MainController</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>MainController</servlet-name>
<url-pattern>/mainController</url-pattern>
</servlet-mapping>
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-08-30 21:17

出ている例外はServletExceptionですが、そもそもServletExceptionを起こした
"根本的な"例外が何かあると思います。

init()メソッド内にログ出力文(System.out.println(...) もしくはお使いのロギングAPIで)
を入れてみて、具体的な例外をさぐってはどうでしょう?

もしくは、Eclipseを利用されているようなので、Tomcatをリモートデバッグし、
init()内にブレイクポイント置くなどしすればより原因特定しやすいと思います。

リモートデバッグについては、こちらが参考になります。
http://www.eclipsewiki.net/eclipse/?%A5%EA%A5%E2%A1%BC%A5%C8%A5%C7%A5%D0%A5%C3%A5%B0
きりん
会議室デビュー日: 2004/08/17
投稿数: 16
投稿日時: 2004-08-31 00:48
ご返答ありがとうございました。問題は解決いたしました。今後、同じようなエラー
が出た方の為に私が行った解決方法を記述しておきます。

Eclipseでtomcatプロジェクトを作成する場合、[File]→[new]→[project]と
進んで新規tomcatプロジェクトを選択するのが一般的な方法だと思うのですが、
この方法で作成した場合、Tomcatフォルダ/conf内のserver.xmlには、

<Context path="/jspapp" reloadable="true" docBase="C:\eclipse\workspace\jspExample" workDir="C:\eclipse\workspace\jspExample\work"/>

このような記述が追加されます。ぱっとみたところ何が悪いんだ?と思いますが、
一番最後の /> が悪さの原因でした。ここは、

<Context path="/jspapp" reloadable="true" docBase="C:\eclipse\workspace\jspExample" workDir="C:\eclipse\workspace\jspExample\work">
</Context>

としなければ、<load-on-startup>が認識してくれないようです。(タグの記述
的にも間違っていると思うのですが、tomcatはちゃんと起動するので、server.xmlは
合っていると思い込んでいました。)

自動作成機能に頼ってばかりではいけないな、と実感しました。
とんび
常連さん
会議室デビュー日: 2003/07/11
投稿数: 32
投稿日時: 2004-08-31 04:10
引用:

きりんさんの書き込み (2004-08-31 00:48) より:
Eclipseでtomcatプロジェクトを作成する場合、[File]→[new]→[project]と
進んで新規tomcatプロジェクトを選択するのが一般的な方法だと思うのですが、
この方法で作成した場合、Tomcatフォルダ/conf内のserver.xmlには、

<Context path="/jspapp" reloadable="true" docBase="C:eclipseworkspacejspExample" workDir="C:eclipseworkspacejspExamplework"/>

このような記述が追加されます。ぱっとみたところ何が悪いんだ?と思いますが、
一番最後の /> が悪さの原因でした。ここは、

<Context path="/jspapp" reloadable="true" docBase="C:eclipseworkspacejspExample" workDir="C:eclipseworkspacejspExamplework">
</Context>

としなければ、<load-on-startup>が認識してくれないようです。(タグの記述
的にも間違っていると思うのですが、tomcatはちゃんと起動するので、server.xmlは
合っていると思い込んでいました。)

自動作成機能に頼ってばかりではいけないな、と実感しました。


タグの記述はどちらでもOKのはずだと思うんですけど。
実際に、Tomcatプラグインで自動生成したやつをいつも使ってますが問題ないですよ。
ちょっと考えにくいバグなので、原因は別にあるんじゃないかと思うんですが、
どうなんでしょう。
きりん
会議室デビュー日: 2004/08/17
投稿数: 16
投稿日時: 2004-08-31 14:55
もう一度タグを<Context>〜</Context>から<Context〜</>>に直して実行してみたのですが、やはりエラーが発生しました。
私はデータベースの接続の際にデータソースを利用していて、server.xmlに<Resource>タグを追記する必要があるのですが、この<Resource>タグを<Context>〜<Context>内に記述しなければならないようなのです。
本文の中でデータベース使っていますと書き込むのを忘れていました)。
数々のご指摘ありがとうございます。
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-09-01 12:20
引用:
きりんさんの書き込み (2004-08-31 14:55) より:
私はデータベースの接続の際にデータソースを利用していて、server.xmlに<Resource>タグを追記する必要があるのですが、この<Resource>タグを<Context>〜<Context>内に記述しなければならないようなのです。



ResourceLink 要素だと、どうでしょうか。
あと、<Context ...... (改行) /> とか書き方を変えてみるとか。

ひょっとすると Tomcat5 or Digester のバグ ?
バグレポートを調べてみると良いかもしれません。
1

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