2012年3月21日水曜日

DispatcherServlet



Spring Framework Reference Documentation 3.1 16.2 The DispatcherServlet より
Springのウェブ MVC フレームワークは、他の多くの MVC フレームワーク同様、リクエスト駆動(request-driven)であり、コントローラーに対するリクエストのディスパッチ、そしてウェブアプリケーションの開発を容易にするその他の機能を提供するサーブレットを中心にデザインされている。しかし、Spring の DispatcherServlet の機能は、それだけではない。Spring が持つそれらすべての機能は、Spring IoC コンテナーに完全に統合され、利用できるようになる。
つまり、Spring の MVC フレームワークを利用した Web アプリケーションを開発するためには DispatcherServlet が不可欠というわけです。DispatcherServlet の先祖を辿っていくと、HttpServletGenericServlet があります。

GenericServlet と HttpServlet
GenericServlet は、Servlet および ServletConfig インターフェースを実装するクラスで、Web application deployment descriptor(web.xml) に記述されたパラメータに基づくサーブレットの初期化やサーブレットコンテキストの取得、サーブレットの破棄といったサーブレットのライフサイクル管理のための汎用メソッドを提供します。それらを継承しつつ、HTTPサーブレット固有の拡張が施されたのが HttpServlet クラスです。

DispatcherServlet の定義
Spring の DispatcherServlet を利用するためには、上記の先祖クラスと同様、Servlet API 仕様に従い web.xml に DispatcherServlet に対応するサーブレット名(servlet-name 要素)やサーブレット名と URL の紐付け(servlet-mapping 要素)などを定義します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">
  :
 中 略
  :
 <!-- Dispatcher -->
 <servlet>
  <servlet-name>venus</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>venus</servlet-name>
  <url-pattern>*.html</url-pattern>
 </servlet-mapping>
  :
 中 略
  :
</web-app>

上の例であれば「このアプリケーションは *.html に合致するパターンのリクエストを受けたら venus と名づけられた DispatcherServlet に処理を渡す」という意味の定義になります。Spring Framework は、この定義に基づき WEB-INF フォルダー内から [servlet-name]-servlet.xml を見つけ、そこに記述された定義に従って DispatcherServlet の初期化を行います。

尚、Servlet API 仕様のドキュメントは The Java Community Process をはじめ、色々なところで公開されており、その中で Deployment Descriptor の各要素についても詳しく記載されています。

0 件のコメント:

コメントを投稿