- PR -

Tomcatからpackage名のついたServletを呼び出せない!

1
投稿者投稿内容
まこと
会議室デビュー日: 2002/08/09
投稿数: 2
投稿日時: 2002-08-09 22:37
はじめて投稿します。

今、Windows 2000 Server+JDK 1.3.1_02+Tomcat 4.0.4でServletのサンプルを作成していますが、
作成したServletがTomcatで動作してくれません。

まず、パッケージ名を持たないServlet(TestServlet.java)をコンパイルして、classを直接
/WEB-INF/classesに置いたら動作しました。
(http://localhost:8080/test/servlet/TestServlet)

そこで、今度はこのServletクラスにパッケージ名(test.web)をつけて再度コンパイル&JARして、
jarを/WEB-INF/classesに置いたところ、「404 - The requested resource is not available.」
というエラーがでてしまい、どうもServletが呼び出されてくれないようです。
ちなみに、/WEB-INFには以下のようなweb.xmlを置いています(抜粋)。

<web-app>
 <servlet>
  <servlet-name>TestServlet</servlet-name>
  <servlet-class>test.web.TestServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>TestServlet</servlet-name>
  <url-pattern>TestServlet</url-pattern>
 </servlet-mapping>
</web-app>

ネット上の多くのサンプルがpackageを使わないサンプルなので、どこが間違っているのかなかなか
見つけることができません。
ここまでの情報で何かお判りになる方がいたらご指導のほどお願いします。
gsg
常連さん
会議室デビュー日: 2002/08/09
投稿数: 20
お住まい・勤務地: 東京都
投稿日時: 2002-08-09 23:46
JARファイルを"WEB-INF/classes"においているのですね?残念ながら、それでは
たしかにServletはTomcatから見えません。
"WEB-INF/classes"は、その名の通りclassファイルのみをおく場所なんです。
JARにした場合は、"WEB-INF/lib"に置く必要があります。

その上で、TestServletにアクセスするためには、
"/test/TestServlet"
を指定しないといけません。<url-pattern>TestServlet</url-pattern> と
設定しているためです。ServletのURLは、/test/${url-pattern}になります。
(どうしても/test/servlet/TestServletにServletをおきたいのならば、
<url-pattern>servlet/TestServlet</url-pattern>とする必要がある)
これで解決できるでしょうか。(私も初投稿なのに、偉そうな文章に
なってしまいました。すいません)

−−−追加−−−
 すいません、上記の「その上で、TestServletに」以下は間違った情報です。
nakagomeさんのおっしゃるとおり、/test/servlet/test.web.TestServletでも
/test/${url-pattern}でも確認できます。
 ご指摘ありがとうございました>nakagomeさん


[ メッセージ編集済み 編集者: gsg 編集日時 2002-08-12 17:57 ]

[ メッセージ編集済み 編集者: gsg 編集日時 2002-08-12 18:03 ]
Paul
ベテラン
会議室デビュー日: 2002/04/30
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2002-08-12 13:43
> その上で、TestServletにアクセスするためには、
> "/test/TestServlet"
> を指定しないといけません。<url-pattern>TestServlet</url-pattern> と
> 設定しているためです。ServletのURLは、/test/${url-pattern}になります。
いいえ。違います。
Catalinaディフォルトインストール状態のコンテナの環境設定を変更していないなら、
/test/servlet/TestServlet
でも
/test/servlet/test.web.TestServlet
でも、目的のServletにアクセス可能です。

コンテナのweb.xml(%CATALINA_HOME%/conf/web.xml)に以下の定義が存在するからです。
<!-- The mapping for the invoker servlet -->
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
_________________
Paul K.Nakagome
まこと
会議室デビュー日: 2002/08/09
投稿数: 2
投稿日時: 2002-08-12 22:17
gsgさんnakagomeさん返答ありがとうございました!
おかげでちゃんと動作するようになりました。
ちなみに、classesの下にclassファイル郡を生で置くのとjarに固めてlibの下に置くのでは
どちらのほうが一般なのでしょうか?
WAR等に固めてしまってまとめてデプロイするのであれば、管理上はどちらでもいいような
気がするのですが、生classを配置したほうが若干早いとか、そういう違いってあるので
しょうか?

1

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