以前のTomcatでは、invokerという機能を使うと web.xmlに設定を追加しなくてもサーブレットを 呼び出すことができました。 しかし、invokerにはセキュリティ上の問題があることが明らかになり、 tomcat 7.0からは外されました。
tomcat 7.0以降では、大人しくweb.xmlにmapを記述するか、 またはServlet 3.0のannotationの機能を使うことになります。
${CATALINA_HOME}/webapps/examples/WEB-INF/web.xml の先頭部分を参考にして ${CATALINA_HOME}/webapps/entry/WEB-INF/web.xml を作成する。 web.xml のweb-appにおいて metadata-complete="true" のままだと アノテーションが無視されるので、これをfalseにしておくこと。 (これは先週やったはずです)
アノテーション | 機能 |
---|---|
@WebServlet | Servletの定義 |
@WebFilter | フィルタの定義 |
@WebListener | リスナの定義 |
@WebInitParam | パラメータの定義 |
@ServletSecurity | セキュリティの制約 |
@MultipartConfig | ファイルアップロード |
Javaプログラムの中に記述したアノテーションによる設定は、 web.xmlによる設定で上書きすることが可能です。
この授業では、URL-Patternとclassファイルをweb.xmlで設定するのを省略するために
@WebServer(name="クラスファイル",urlPatterns={"URLパターン"})というアノテーションの記述を使うことにします。
[ファイル配置] ${CATALINA_HOME}/webapps/entry/WEB-INF/src/AnnotationServlet.java
${CATALINA_HOME}/webapps/entry/WEB-INF/src/AnnotationServlet.java |
|
web.xmlへの記述の追加 |
なし |
AnnotationServlet.javaのコンパイル |
|
[ブラウザでアクセスするURL] http://localhost:8080/entry/AnnoServ
(注意)contextにreloadable="true"と設定してある場合でも、 @WebServlet を指定したclassファイルが WEB-INF/classesの下に新たに生成されたことを tomcatは自動で認識しないようです。 アノテーション機能を使うServletを新しく作成した場合は tomcat を再起動して下さい。