Home of: [工房 "藤車"] > [SourceForge.net における PageMixer]

Servlet における値の識別

本節では、 Servlet において値を識別する方法を説明します。

概要

クラス図

本節におけるクラス図を以下に示します。

クラス図
クラス図 (クリックで拡大表示)

色づけされているのが本節で定義するクラスで、 それ以外は PageMixer において定義済みです。

クラス名

本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。

PageMixer フレームワークのクラス

記述完全名
ApplicationKey jp.ne.dti.lares.foozy.pagemixer.servlet.ApplicationKey
ConsumerContext jp.ne.dti.lares.foozy.pagemixer.mixer.ConsumerContext
ContextInitKey jp.ne.dti.lares.foozy.pagemixer.servlet.ContextInitKey
CookieKey jp.ne.dti.lares.foozy.pagemixer.servlet.CookieKey
HashMapConsumerContext jp.ne.dti.lares.foozy.pagemixer.mixer.HashMapConsumerContext
ParameterKey jp.ne.dti.lares.foozy.pagemixer.servlet.ParameterKey
ReqHeaderKey jp.ne.dti.lares.foozy.pagemixer.servlet.ReqHeaderKey
RequestKey jp.ne.dti.lares.foozy.pagemixer.servlet.RequestKey
ResHeaderKey jp.ne.dti.lares.foozy.pagemixer.servlet.ResHeaderKey
ServletConsumerContext jp.ne.dti.lares.foozy.pagemixer.servlet.ServletConsumerContext
ServletInitKey jp.ne.dti.lares.foozy.pagemixer.servlet.ServletInitKey
SessionKey jp.ne.dti.lares.foozy.pagemixer.servlet.SessionKey

チュートリアルの固有クラス

本節での説明には、チュートリアル固有クラスは登場しません。

値識別のためのクラス

あなたはこの時点で、 Object をキーとして ConsumerContext における値を識別できることを理解しています。

注意: PageMixer に関しての学習がまだの場合は、 "PageMixer の利用" を先にご覧ください。

スタンドアロンアプリケーション環境の場合、 値識別のためのオブジェクトとしては、 例えば java.lang.String のように、 何でも選択可能でした。 しかし Servlet 環境における使用の場合、 例えば以下のような Servlet 環境固有の値の取得/設定/取り消しを必要とするでしょう。

PageMixer は ConsumerContext において上記のような値を識別する以下のクラスを提供しています (完全な一覧は"servlet" パッケージのデスクリプションをご覧ください)。

例えば、 以下のようなキーオブジェクトを利用することで、 要求属性中の値の取得/設定/取り消しを行うことが出来ます。


Object key =
new RequestKey("属性名");

要求属性中の値を識別するためのキー

このキーを用いたアクセスは、 HttpServletRequest クラスの getAttribute()setAttribute() ないし removeAttribute() 実行を引き起こします。

ConsumerContext における値の識別

ServletConsumerContext における値の識別

前述のクラス群は、 ServletConsumerContext との併用において正しく機能します。 正しく ServletConsumerContext 生成を行いさえすれば、 他には何も設定せずにこれらを用いて値の取得/設定/取り消しを行うことが出来ます 。

Servlet API における制約から、 クラスによっては取得/設定/取り消し機能のうちのいくつかがサポートされません。 例えば、 ParameterKey を使った値の設定/取り消しは出来ません。

他の ConsumerContext における値の識別

それ以外の ConsumerContext 実装クラスとの併用の場合、 前述のクラス群が正しく機能するかは ConsumerContext 実装クラスの実装次第です。

少なくとも、 前述のキーとなるクラス群は Object#equals および Object#hashCode をオーバライドしているので、 HashMapConsumerContext との併用において正しく機能します。

しかし HashMapConsumerContext と併用した場合、 これらのクラスを (例えば ParameterKey を使用した値の設定のような) 不正に使用した場合、 ServletConsumerContext との併用の際は UnsupportedOperationException が浮揚されますが、 HashMapConsumerContext との併用の際には例外が浮揚されません。 ですので、 「正しく機能する」というのは 「正しく値を識別できる」ということを意味しています。


次節「PageServlet 概要」へ