MAP | PageMixer ドキュメント > チュートリアル > Servlet 環境における利用 > Servlet における値の識別 | << | >> |
本節では、 Servlet において値を識別する方法を説明します。
本節におけるクラス図を以下に示します。
色づけされているのが本節で定義するクラスで、 それ以外は 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 環境固有の値の取得/設定/取り消しを必要とするでしょう。
HttpServlet#getInitParameter
HttpServletRequest#getParameter/getParameterValues
HttpServletRequest#getAttribute
HttpServletRequest#getHeader/getHeaders
HttpSession#getAttribue
ServletContext#getAttribute
ServletContext#getInitParameter
Cookie#getValue
PageMixer は
ConsumerContext
において上記のような値を識別する以下のクラスを提供しています
(完全な一覧は"servlet" パッケージのデスクリプションをご覧ください)。
ParameterKey
RequestKey
SessionKey
CookieKey
ApplicationKey
ReqHeaderKey
ResHeaderKey
ServletInitKey
ContextInitKey
例えば、 以下のようなキーオブジェクトを利用することで、 要求属性中の値の取得/設定/取り消しを行うことが出来ます。
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
との併用の際には例外が浮揚されません。
ですので、
「正しく機能する」というのは
「正しく値を識別できる」ということを意味しています。
MAP | PageMixer ドキュメント > チュートリアル > Servlet 環境における利用 > Servlet における値の識別 | << | >> |