検索
連載

Tomcat 7も対応したServlet 3.0の変更点 後編Tomcat 7の新機能で何ができるようになるのか?(2)(3/3 ページ)

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

JSESSION Cookieの設定による「Session Tracking」

 Servlet 3.0では、JSESSION Cookieの設定が新たに定義されました。

 「JSESSION Cookie」とはクライアント(Webブラウザなど)とTomcat間でセッションを維持する際に利用される、名前が「JSESSION」で値がセッションIDの特別なCookieです。

 Tomcat 6でもシステムプロパティやserver.xmlの設定などで一部を設定変更できましたが、Tomcat 7では、より柔軟に標準の方法でJSESSION Cookieの設定ができるようになりました。

 JSESSION Cookieを設定するにはweb.xmlを利用する方法と、javax.servlet.SessionCookieConfigを利用してプログラミングで変更する方法があります。

 web.xmlでの設定方法は変更したいWebアプリケーションのweb.xmlに以下のような設定を追加します。

web.xml

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 また、web.xmlを利用せずにプログラムでセッションコンフィグを変更するには、以下のSessionCookieConfigのAPIを利用します。

  • public void setDomain(String domain)
  • public void setHttpOnly(booleanhttpOnly)
  • public void setMaxAge(intmaxAge)
  • public void setName(String name)
  • public void setPath(String path)
  • public void setSecure(booleansecure)
  • public void setComment(String comment)

 JSESSION Cookieのコンフィグレーションを行うServletContextListenerのサンプルです。

SessionTrackingListener

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 このListenerではJSESSION Cookieの名前をJSSID_SAMPLEに変更し、HTTPOnlyを有効にし、JSESSION Cookieの有効期限を180秒に変更しています。

マルチパート対応で簡単ファイルアップロード

 Servlet 3.0では、multipart/form-dataのリクエストを扱うAPIが追加されたため、非常に簡単に、Servlet APIだけでファイルがアップロードできます。

 HttpServletRequestの以下のAPIを利用してマルチパートデータを取得します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 マルチパート対応についても、簡単なサンプルを用意しました。アップロードしたファイルを別ディレクトリに保存するサンプルです。

 まずは、multipart/form-dataのリクエストを投げるJSPです。

upload_jsp

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 次にmultipart/form-dataのリクエストを受け付けるServletです。multipart/form-dataを扱うには、Servletが@MultipartConfigでアノテートされているか、Servletマッピングでを追加する必要があります。今回は、アノテーションを利用します。

UploadServlet

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 以下では、@MultipartConfigアノテーションで、アップロードファイルの保存ディレクトリ、ファイルやリクエストの最大サイズなどの属性を指定しています。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 「Part part = req.getPart("fileupload");」では、「<input type="file" name="fileupload">」の「name」で指定した「fileupload」でマルチパートデータを取得します。

 「part.write("uploadFile");」では、@MultipartConfigのlocationで指定したディレクトリにファイルを保存します。サンプルでは固定ファイル名になっていますが、アップロードしたファイル名と同じファイル名にしたければ、Content-Dispositionヘッダの値からfilenameを抜き出してください。

 Content-Dispositionヘッダは「Part#getHeader(“Content-Disposition")」を呼び出すことで取得できます。

 ちなみにServlet 3.0ではマルチパートデータを扱うには、「@MultipartConfig」でアノテートされているか、もしくはweb.xmlのServletマッピングに<multipart-config>を定義している必要があります。

 Tomcatでは、上記のような厳しい制約に対して、Context#allowCasualMultipartParsing属性によって仕様の緩和を提供しています。allowCasualMultipartParsingをtrueに設定すると、@MultipartConfigやを定義していない場合でも、マルチパートデータを扱えます(参考:Apache Tomcat 7 Configuration Reference (7.0.14) - The Context Container)。

次回は、Servlet 3.0以外のTomcat 7の新機能

 今回はTomcat7の紹介としてServlet 3.0のうち、「Asynchronous processing(非同期処理)」「セキュリティ」「Session Tracking」「マルチパート対応」を紹介しました。第1回目と今回の第2回目でServlet 3.0の紹介は簡単な紹介になりましたが、終了になります。

 次回は、Tomcat 7のServlet 3.0仕様のアップデート以外の変更点であるTomcat独自の新機能について紹介する予定です。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る