BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース JavaOne 2008セッション報告:Java Servlet 3.0 API (TS-5415)

JavaOne 2008セッション報告:Java Servlet 3.0 API (TS-5415)

5月8日(3日目)の午後に開催されたセッション「Java Servlet 3.0 API: What's new and exciting(Rajiv Mordani, Sun Microsystems)」の報告を行う。

Java Servlet 3.0は、JSR-315でEarly Draftを公開し、6月4日までフィードバックを受け付けている。

3.0へのバージョンアップで、大きく改変、追加されるのは次の4点である。

  • プラグインの容易性(Pluggability)
  • 開発の容易性(Ease of development)
  • 非同期Servletのサポート(Async servlet support)
  • セキュリティのエンハンス(Security enhancements)

それぞれについて、以降説明する。

プラグインの容易性(Pluggability)

プラグインの容易性としては、次の項目が説明された。

web.xmlのモジュール化(Modularization of web.xml)

web.xmlは現在1つしかなく、そのためフレームワーク毎の情報などを記述する事で、複雑化する。しかし3.0では、フレームワーク毎にweb.xmlを定義し、jarファイルのMETA-INFディレクトリに含める事ができる。その分割されたweb.xmlは、web-fragmentタグを持ち、servlets、filter、listenerタグが含まれる。

コードの例)

<web-fragment>
  <servlet>
    <servlet-name>welcome</servlet-name>
    <servlet-class>
      WelcomeServlet
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>welcome</servlet-name>
    <url-pattern>/Welcome</url-pattern>
  </servlet-mapping>
 ...
</web-fragment>

ServletContextにコンフィギュレーションメソッド(Configuration methods in ServletContext)

ServletContextにServletとFilterの宣言とマッピングを定義するメソッドが追加される。これらのメソッドは、Contextの初期化時にのみ実行する事ができる。これによりアプリケーションは、実行時に必要に応じてServletをロードする事ができる。

コードの例)

@ServletContextListener
public class MyListener {
  public void contextInitialized(ServletContextEvent sce) {
    ServletContext sc = sce.getServletContext();
    sc.addServlet("myServlet",
                  "Sample servlet",
                  "foo.bar.MyServlet",
                  null, -1);
    sc.addServletMapping("myServlet",
                  new String[]{"/urlpattern/*"});
  }
}

開発の容易性(Ease of Development)

開発の容易性としては、アノテーションの利用が説明された。

まず、Servletは、@Servletにより定義できる。これにより大幅に記述量を減らす事ができる。また、@GET、@PUTを指定する事で、任意のメソッドをhttpのGETやPUT時のメソッドに指定する事ができる。

コードの例)

@Servlet(urlMapping={"/foo", "/bar"},name="MyServlet")
public class SampleUsingAnnotationAttributes {
  @GET
  public void handleGet(HttpServletRequest req,HttpServletResponse res){
  }
}

FilterとFilterのマッピングについても、@ServletFilterと@FilterMappingのアノテーションで宣言する事ができる。

コードの例)

@ServletFilter
@FilterMapping(urlPattern="/foo")
public class SampleFilter {
  public void doFilter(HttpServletRequest req,HttpServletResponse res){
  }
}

Context Listnerについても、@ServletContextListnerアノテーションで宣言する事ができる。この例は前述のコンフィギュレーションメソッドの例を参照。

非同期Servletのサポート(Async servlet support)

非同期Servletは、Cometスタイルのアプリケーションや、非同期Webプロキシー、非同期Webサービスでの利用が想定されており、requestのsuspendやresumeを可能にする。

具体的には、次の通りである。

ServletRequestへのメソッドの追加

  • void suspend(long timeOutMs);
  • void resume();
  • void complete();
  • boolean isSuspended();
  • boolean isResumed();
  • boolean isTimeout();

RequestListnerへのイベント発生時に実行されるメソッドの追加

  • void requestSuspended(ServletRequestEvent rre);
  • void requestResumed(ServletRequestEvent rre);
  • void requestCompleted(ServletRequestEvent rre);

ServletResponseへのメソッドの追加

  • void disable();
  • void isDisabled();
  • void enable();

セキュリティのエンハンス(Security enhancements)

セキュリティとして、ログイン、ログアウトを可能にするため、loginとlogoutのメソッドを次のクラスに追加する。

  • HttpServletRequest
  • HttpServletRequestWrapper
  • HttpSession (logout only)

しかし、これについては、まだエキスパートグループで議論されている状況である。

その他

HttpOnlyCookieのサポート

HttpOnlyCookieとは、クライアントサイドスクリプティングからのcookieへのアクセスを防ぎ、また、クロスサイトスクリプティング攻撃を防ぐものである。

session tracking cookieの設定を可能

session tracking cookieの設定を可能にする。また、多数のsession trackingのサポートも行う。

検討が保留中の項目

  • File upload
  • Container wide init-params
  • Clarifications from previous releases
  • Enablement of JAX-RS / JSF 2.0 (if any changes needed)

 

以上が、Java Servlet 3.0の変更、追加内容である。

これからのステータスは、次の通りである。

  • 現在はEarly Draftのレビュー期間(6月4日まで)
  • 今年の夏にはPublic Reviewを行う予定。
  • Final DraftとFinal ReleaseはJavaEE 6と合わせて行う。
  • GlassFishにて一部の実装については早期に利用できる。

 


 

以上がセッションの報告であるが、セッションの最後のSummaryにて、

「Lot of exciting things happening in the Java Servlet 3.0 API(Java Servlet 3.0 APIで多くのエキサイティングな事が起こる。)」

とあった通り、エキサイティングな内容でバージョンアップが期待される。

 

この記事に星をつける

おすすめ度
スタイル

BT