―BEA WebLogic Server編―
日本BEAシステムズ
プロフェッショナル・サービス
2001/4/10
WebLogic Serverのセッション管理(応用編) |
第2回目はBEA WebLogic Server(以下WebLogic Server)におけるセッション(HttpSession)の扱いについての応用編をお送りします。
本稿におけるコーディングは、すべてJSPを前提に記述しています。また、WebLogic Server 6.0になって変更された点については脚注の形で補足させていただきます。なお、本稿ではセッションとは何かといった説明や、セッションを扱うための基礎的なプログラミングの解説は割愛させていただきますのでご了承ください。
1.URL rewritingによるセッション管理 |
「WebLogic Serverのセッション管理(基礎編)」に引き続いて、まずは、URL rewriting について少し補足しましょう。Servlet 2.2からはWeb Application(編注)の導入に伴いcontext pathが追加になっています。context pathとはWeb Applicationごとに固有に付加されるprefix URLです。つまりURLは下記のような構成になります。
(編注:本稿ではJ2EE Servlet 2.2 仕様で規定されているWebアプリケーション向けのアプリケーション資源管理のフレームワークを「Web Application」と表記し、WebブラウザをクライアントとしたWebアプリケーションの一般名称を「Webアプリケーション」と表記しています)
|
context pathは、Web Applicationのデプロイ時に変更される可能性があります。動的なページにURLを埋め込む際には、下記のようにコーディングすることでよりポータブルなコンテンツを作成することができます。
|
この例で“/order/Submit.jsp”はWeb Applicationのdocument rootからの絶対パスです。一般にWeb Applicationではdocument rootからの絶対パスでURLを記述することをお勧めします。
何らかの理由でcookieも使えず、かつformでmethod="get"を使用しなければならない場合にはsession idをhidden fieldで渡す必要があります。WebLogic Server 5.1に限定されますが、下記のようなコーディングでcookie.nameプロパティを取得しhidden fieldを生成することができます(*1)。
<form action="/shoppingcart/AddCart.jsp"
method="get"> |
実際にはこういったコーディングは避け、T3Services...getProperty("...")の部分はユーティリティ関数(getSessionName () など)やカスタム・タグでラッピングして詳細を隠ぺいすべきでしょう。
クラスタリングの実現 |
本稿に関するご質問やご意見は下記のメールアドレスまでお願いします。
|
脚注:WebLogic Server 6.0での変更点
(*1) 前回、Cookieの場合session id名が “JSESSIONID” になったと説明しましたが、URL rewriting の場合 session id はリクエスト・パラメータとしてではなく、servlet 2.2 仕様に準拠した、';'をセパレータに“jsessionid”という名前でエンコードされるようになりました。
/order/Submit.jsp;jsessionid=OqXn3Ab9!-3044480099678014536!-926997315!7001!7002!-2679308213499512072!-926997316!7001!7002 |
このため、formでmethod="get"を使用する場合もsession idをhidden fieldで渡す必要がなくなりました。つまり、以下のように素直に encodeURL()を使用すればよいわけです。
<form action="<%= response.encodeURL
(request.getContextPath () + "/order/Submit.jsp") %>"
method="get"> |
(*2) クラスタの設定は、管理サーバ(Administration Server)上で一括して管理されるようになりました。
(*3) このようなセッション関係の設定はすべてweblogic.xml(WebLogic Server固有のWeb
Applicationデプロイメント・ディスクリプタ)で行うよう変更されています(http://www.beasys.co.jp/e-docs/wls60e/programming/weblogic_xml.html)。
(*4) Webサーバの代わりに、スティッキング機能を備えたスイッチやロード・バランサーなどのハードウェアを前に立ててクラスタリングさせることもできるようになりました
(in-cluster routing)。
(*5) (*1)のエンコードされたURLの例はクラスタリングした場合のものですが、5.1に比べコンパクト(クラスタ情報だけで約85bytes)になったのがお分かりいただけると思います。
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|