2011年4月13日水曜日

Tomcat 7の新機能

Tomcatが前回のメジャーバージョンであるTomcat 6から約4年ぶりにTomcat 7を安定版としてリリースしました。
Tomcat 7では、Tomcat 6に対して実装するサーブレット/JSP仕様のバージョンアップとTomcat独自のさまざまな機能の追加・改善を行っています。実装する仕様は、以下のバージョンにアップデートされました。
• Servlet 2.5⇒Servlet 3.0
• JSP 2.1⇒JSP 2.2
• EL 2.1⇒EL 2.2

Servlet 3.0では、Servlet 2.5に対して主に、次のような仕様変更を導入しました。
1. Ease of Development(EoD、開発容易性)
2. Pluggability and Extendibility(モジュール化と拡張性)
3. Asynchronous Processing(非同期処理)
4. セキュリティ
5. Session Tracking
6. マルチパート対応

■ Servletを利用する場合は「@WebServlet」
 では、簡単なサンプルを使って紹介していきます。
 Servletを利用する場合、従来のTomcat 6.0.x、Servlet 2.5以前の場合では、まず以下のようにサーブレットを作成します。
public class WebServletTest extends HttpServlet {

private static final long serialVersionUID = 1L;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().print("HELLO!");
}
}
 そして、作成したサーブレットをweb.xmlにマッピングします。
<servlet>
<servlet-name>WebServletTest</servlet-name>
<servlet-class>test.annotation.WebServletTest</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>WebServletTest</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
 これにServlet 3.0で導入した「Annotation based configuration」を利用すると、「@WebServlet」というアノテーションを付加するだけでOKです。
@WebServlet(name="WebServletTest",urlPatterns={"/test"})
public class WebServletTest extends HttpServlet {

private static final long serialVersionUID = 1L;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().print("HELLO!");
}
}

■ Web-Fragmentでweb.xmlをモジュール化
 Webアプリケーション開発では、SpringやStrutsのようなWebアプリケーションフレームワークを利用することが多いと思います。これらフレームワークを使用するために、開発者は、アプリケーションのweb.xmlにServletやFilter、Listenerなどのようなフレームワーク特有の設定を行う必要があります。
 このため、web.xmlはファイルの肥大化やアプリケーション特有の設定とフレームワーク特有の設定が混ざり合った煩雑なWeb設定になってしまいます。
 利用するフレームワークが増えていくと、事態はより深刻になってしまいます。Servlet 3.0では、上記のような問題を解決するため、「web-fragment」という新しい概念を導入しました。
 web-fragmentは、web.xmlをモジュール化して、フレームワークや外部モジュールが自らのjarファイルの中にそれを含めることを可能にします。モジュール化されたweb.xmlは「web-fragment.xml」と呼ばれ、Servletコンテナはすべてのweb-fragment.xmlをマージしてWebアプリケーションを構築します。
 各JAR内のweb-fragment.xmlは、デプロイ中にTomcatによって処理され、最終的にWEB-INF内のweb.xmlとマージして1つのWebアプリケーションとして構築します。
 また、web-fragment.xmlを読み込む順番を絶対的順序と相対的順序の2種類の方法で提供しているので、フレームワーク間でServletやFilterが特別な順番で呼び出される必要がある場合にも対応できます。
 JARごとにweb-fragment.xmlが記述できるようになったので、フレームワークやリソースをモジュール化して、JARファイルをアプリケーションの「WEB-INF/lib」フォルダに単に配置するだけで、自動的にWeb設定できるようになります。
 また、フレームワーク特有の設定などをアプリケーションのweb.xmlから分離できるため、本来のアプリケーションの設定以外によるweb.xmlの肥大化を抑制でき、非常にすっきりします。

0 件のコメント:

コメントを投稿