んんんー。
なんかすんげぇハマったのですが、tomcat4 の webapps/xx/WEB-INF/web.xml で 実行する class と URL の対応を定義するのに<servlet></servlet> と <servlet-mapping></servlet-mapping>を使うのですが、これの順番が決っている。
以下のように書くとダメ。
<?xml version="1.0" encoding="UTF-8"?> <!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> <display-name>FOO written in Java for masaruyokoi.com</display-name> <servlet> <servlet-name>hoge</servlet-name> <servlet-class>com.masaruyokoi.foo.hoge</servlet-class> </servlet> <servlet-mapping> <servlet-name>hoge</servlet-name> <url-pattern>/hoge</url-pattern> </servlet-mapping> <servlet> <servlet-name>fuga</servlet-name> <servlet-class>com.masaruyokoi.foo.fuga</servlet-class> </servlet> <servlet-mapping> <servlet-name>fuga</servlet-name> <url-pattern>/fuga</url-pattern> </servlet-mapping> </web-app>
で、どうやら servlet を書いたあとに servlet-mapping を書いてまたそのあとに servlet, servlet-mapping という順番 はダメみたいで、複数 servlet と servlet-mapping がある場合は、全ての servlet を書いたあとにservlet-mapping を書かなければならない。」ということみたいだ。ということで、上記の web.xml の場合は、以下のようにしなければならない。
<?xml version="1.0" encoding="UTF-8"?> <!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> <display-name>FOO written in Java for masaruyokoi.com</display-name> <servlet> <servlet-name>hoge</servlet-name> <servlet-class>com.masaruyokoi.foo.hoge</servlet-class> </servlet> <servlet> <servlet-name>fuga</servlet-name> <servlet-class>com.masaruyokoi.foo.fuga</servlet-class> </servlet> <servlet-mapping> <servlet-name>hoge</servlet-name> <url-pattern>/hoge</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>fuga</servlet-name> <url-pattern>/fuga</url-pattern> </servlet-mapping> </web-app>