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に以下のような設定を追加します。
*** 一部省略されたコンテンツがあります。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のサンプルです。
*** 一部省略されたコンテンツがあります。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です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
次にmultipart/form-dataのリクエストを受け付けるServletです。multipart/form-dataを扱うには、Servletが@MultipartConfigでアノテートされているか、Servletマッピングで
*** 一部省略されたコンテンツがあります。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や
次回は、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.
関連記事
- Strutsの常識を知り、EclipseとTomcatの環境構築
- Tomcatはどこまで“安全”にできるのか?
- 第6回 【真夏の夜のミステリー】Tomcatを殺したのは誰だ?(2007/8/27)
- 第7回 【トラブル大捜査線】失われたコネクションを追え!(2007/9/25)
- 第8回 肥え続けるTomcatと胃を痛めるトラブルハッカー (2007/11/27)
- 第14回 数百キロのコードでブルー - ドクターTomcat緊急救命 (2010/5/25)
- AWS ToolkitでTomcatクラスタをEC2上に楽々構築
- Java屋がTomcatでRuby on Railsを試すには?
- EclipseベースIDEとTomcatで始めるFlex+Java開発
- 狙われる甘〜いTomcat