カスタムJSPラベル



一、基本概念:
1.タグ(Tag):
ラベルはXML要素であり、ラベルによってJSPページを簡潔かつメンテナンスしやすくし、同じJSPファイルが複数の言語バージョンをサポートすることを容易に実現することができる.ラベルはXML要素なので、名前と属性は大文字と小文字に敏感です.
2.タグライブラリ(Tag library):
一連の機能が類似し,論理的に相互に関連するラベルからなる集合をラベルライブラリと呼ぶ.
3.タグライブラリ記述ファイル(Tag Library Descriptor):
ラベルライブラリ記述ファイルは、ラベルライブラリ内のクラスとJSP内のラベル参照のマッピング関係を提供するXMLファイルです.プロファイルとwebです.xmlは似ています.
4.タグ処理類(Tag Handle Class):
ラベル処理クラスはJavaクラスで、TagSupportを継承したりSimpleTagインタフェースを拡張したりして、このクラスを通じてJSPラベルをカスタマイズする具体的な機能を実現することができます.
二、JSPタグのフォーマットをカスタマイズする:
1.
<% @ taglib prefix=”someprefix” uri=”/sometaglib” %>

JSPコンテナでラベルライブラリのカスタム動作を使用できるようにするには、次の2つの条件を満たす必要があります.
1.指定されたラベルライブラリから、このようなカスタム動作を表すラベルを識別する
2.これらのカスタム動作を実現する特定のクラスを見つける
最初の必須条件-カスタム動作がそのラベル・ライブラリに属することを特定します.ラベル・コマンドの接頭辞(Taglib Directive's Prefix)プロパティによって完了するので、同じページで同じ接頭辞を使用する要素はこのラベル・ライブラリに属します.各ラベル・ライブラリには、ラベル・ライブラリのドキュメントまたはページにカスタム・ラベルを挿入するためのデフォルトの接頭辞が定義されています.したがって、jsp、jspx、java、servlet、sun、sunw(いずれもJSPホワイトペーパーで指定された予約語)などの接頭辞を使用することができます.
 
uriプロパティは、上記の2番目の要件を満たしています.カスタム動作ごとに対応するクラスを見つけます.このuriには、コンテナがTLDファイルを位置決めする文字列が含まれています.ラベルライブラリ内のすべてのラベル処理クラスの名前がTLDファイルに表示されます.
2.
<someprefix:sometag key=”somevalue”/>

Webアプリケーションが起動すると、コンテナはWEB-INFフォルダのディレクトリ構造のMETA-INFからすべて検索.tldの最後のファイル.つまり、すべてのTLDファイルが配置されます.各TLDファイルについて、コンテナはラベルライブラリのURIを取得し、各TLDファイルと対応するURIにマッピング関係を作成します.
JSPページでは、URI属性値を持つラベルライブラリ命令を使用して特定のラベルライブラリと一致させるだけです.
三、カスタムJSPタグの処理過程:
1.JSPにラベルライブラリを導入する:
2.JSPでラベルライブラリラベルを使用するには:
3.Webコンテナは、第2のステップのprefixに従って、第1のステップで宣言したtaglibのuri属性値を取得する
4.Webコンテナはuri属性によりwebにある.xml対応する要素を見つけます
5.エレメントから対応するエレメントの値を取得する
6.Webコンテナは、要素の値に基づいてWEB-INF/ディレクトリの下から対応するものを見つける.tldファイル
7.からtldファイルにtagnameに対応する要素が見つかりました
8.コンパクト要素で対応する要素の値を得る
9.Webコンテナ要素の値に基づいて対応するtag handle classのインスタンスを作成する
10.WebコンテナはこのインスタンスのdoStartTag/doEndTagメソッドを呼び出して対応する処理を完了する
四、Tag Libraryの作成と使用の基本手順:
1.ラベルの処理クラスを作成する(Tag Handler Class)
2.タグライブラリ記述ファイルの作成(Tag Library Descrptor File)
3.web.xmlファイルの構成要素
4.JSPファイルで人ラベルライブラリを引く
五、TagSupport類の紹介:
1.ラベルを処理するクラスはjavaxを拡張する必要がある.servlet.jsp.TagSupport.
2.TagSupportクラスの主な属性:
A.parentプロパティ:現在のラベルがネストされた上位レベルのラベルを表す処理クラス
B.pageContex属性:Webアプリケーションのjavaxを表す.servlet.jsp.PageContextオブジェクト
3.JSPコンテナはdoStartTagメソッドまたはdoEndTagメソッドを呼び出す前にsetPageContextメソッドとsetParentメソッドを呼び出し、pageContextメソッドとparentを設定します.したがって、ラベル処理クラスではpageContext変数に直接アクセスできます.
4.TagSupportの構築方法ではpageContextメンバー変数にアクセスできません.JSPコンテナが呼び出されていないためです.
setPageContextメソッドpageContextを初期化する
六、TagSupportがラベルを処理する方法:
1.TagSupportクラスでは、ラベルの処理方法を2つ用意しています.
public int doStartTag() throws JspException
public int doEndTag() throws JspException
2.doStartTag:ただし、JSPコンテナがカスタムラベルの開始フラグに遭遇すると、doStartTag()メソッドが呼び出されます.
doStartTag()メソッドは、プログラムの後続のフローを決定するために整数値を返します.
A.Tag.SKIP_BODY:…間の内容が無視されることを表す
B.Tag.EVAL_BODY_INCLUDE:ラベル間の内容が正常に実行されていることを示す
3.doEndTag:ただし、JSPコンテナでカスタムラベルの終了フラグに遭遇するとdoEndTag()メソッドが呼び出されます.doEndTag
()メソッドは、プログラムの後続のフローを決定するために整数値を返します.
A.Tag.SKIP_PAGE:直ちにホームページの実行を停止することを表して、ホームページの上で処理していない静的な内容とJSPプログラムはすべて
忽然.既存の出力内容を省略して、すぐにお客様のブラウザに戻ります.
B.Tag_EVAL_PAGE:通常の流れでJSPページを継続する
七、ユーザーがカスタマイズしたラベル属性:
ラベルにカスタム属性が含まれている場合は、次のようになります.
 
...
では、ラベル処理クラスでは、この属性をメンバー変数として使用し、属性を設定および読み出す方法をそれぞれ提供する必要があります.
八、ラベル処理クラスを作成するには:
1.JSPのWebページの静的テキストを含むファイルを作成します(つまり、カスタムJSPラベルを置換するテキストです).
2.Webアプリケーションの起動時に静的テキストをロードする
3.ラベル処理クラスの作成
九、JSPページの静的テキストを含むファイルを作成する方法:
1.javaを使用する.util.Propertiesクラスは、WebページのカスタムJSPラベルを置換する静的テキストを格納します.
2.Propertiesクラスは一連の属性の集合を表し、そのインスタンスはストリームに保存してもよいし、ストリームから追加してもよい.
載せる.これらのテキストはkey/valueとしてWEB-INFディレクトリの下に保存されます.例えばkey=valueは属性リストにあります.
これらのkey/valueはStringタイプです
十、Properties類の常用API:
1.setProperty(String key,String value):Hashtableクラスのputメソッドを呼び出して属性を追加
2.getProperty(String key):属性リストのkeyに対応する属性値を取得する
3.load(InputStreamin):入力ストリームオブジェクトInputStreamから属性リストを読み込む(Properties list)
4.store(OutputStreamout,String comment):適切なフォーマットで属性リストの属性ペアを書き込み
アウトストリームオブジェクトでは、デフォルトではISO-88590-1符号化フォーマットが使用され、入力が行で処理されます.属性のkey/valueの
間は「=、:」でペアリングし、key/valueペアを折り返し、改行で区切る
十一、サーブレットContextクラスの常用API:
1.getContext(String uripath):サーバ内のuripathが表すサーブレットContextオブジェクトを返す
2.getInitParameter(String name):サーブレットコンフィグオブジェクトのnameパラメータの値を返します.
3.getMineType(String file):fileパラメータが表すファイルのMIMEタイプを返す
4.getRequestDispatcher(String path):pathが表すRequestDispacherオブジェクトを返します.
5.getResourceAsStream(String path):path対応するリソースを入力ストリームとして返します.入力保留中のオブジェクトは任意の形式のデータとすることができます.pathパラメータはContext Rootに対して「/」で開始する必要があります.
十二、サーブレットContxtを使用して属性ファイルを読み取り、保存する方法:
1.javaを作成する.util.Propertiesクラスオブジェクト
2.サーブレットContextオブジェクトの取得
3.属性ファイルを入力ストリームとして入力ストリームオブジェクトに読み込む
4.入力ストリームオブジェクトをPropertiesオブジェクトにロードする
5.PropertiesオブジェクトをサーブレットContextオブジェクトに保存する
十三、Webアプリケーションの起動時に静的テキストをロードする方法:
1.HttpServeretクラスを継承するサブクラスをwebで作成する.xmlでこのサーブレットを構成するときにload-on-startupプロパティを設定します.
 
someclass
somepackage.SomeClass1
2.このサーブレットのinit()メソッドでjavaを作成する.util.Propertiesクラス
3.現在のWebアプリケーションのサーブレットContextオブジェクトを取得する
4.WEB-INFディレクトリの下の属性ファイルを入力ストリームInputStreamに読み込む:
InputStream in = context.getResourceAsString("WEB-INF/someproperties.properties");
5.入力フローを属性オブジェクトにロードする
ps.load(in);
6.属性オブジェクトをコンテキストに保存します.
context.setAttribute("attributeName",ps);
十四、ラベル処理クラスの作成方法:
1.必要なリソースの導入:
import javax.servlet.jsp.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;
2.TagSupportクラスを継承しdoStartTag()/doEndTag()メソッドを上書きする
3.サーブレットContextオブジェクトからjavaを取得する.util.Propertiesオブジェクト
4.Propertiesオブジェクトからkeyに対応する属性値を取得する
5.取得した属性に対して対応する処理を行い、結果を出力する
十五、ラベルライブラリ記述ファイル(Tag Library Descriptor)を作成する:
1.ラベルライブラリ記述ファイル、TLDと略称し、XMLファイル形式を採用し、ユーザーのラベルライブラリを定義した.TLDファイルの要素は3種類に分けられます.
A.:ラベルライブラリ要素
B.:ラベル要素
C.:ラベル属性要素
2.ラベルライブラリ要素は、ラベルライブラリに関する情報を設定するために使用されます.一般的な属性は次のとおりです.
A.shortname:Tag Libraryのデフォルトのプレフィックス名(prefix)を指定します.
B.uri:Tag Libraryの唯一のアクセス表示子を設定する
3.ラベル要素は、一般的な属性を持つラベルを定義するために使用されます.
A.name:Tagの名前を設定
B.tagclass:Tagの処理クラスを設定する
C.bodycontent:ラベルの本体(body)の内容を設定する
1).empty:ラベルにbodyがないことを示します
2).JSP:ラベルを表すbodyにJSPプログラムコードを入れることができます
3).tagdependent:ラベルの内容がラベルによって自分で処理されることを示す
4.ラベル属性要素ラベルの属性を定義します.一般的な属性は次のとおりです.
A.name:属性名
B.required:属性が必要かどうか、デフォルトはfalse
C.rtexprvalue:属性値がrequest-time式、つまり類似の式であるか
十六、Webアプリケーションでラベルを使用する:
1.WebアプリケーションでカスタムJSPタグを使用する場合は、必ずweb.xmlファイルに要素を追加し、参照するラベルが存在するラベルライブラリを宣言します.
 
/sometaglib
/WEB-INF/someTLD.tld
2.:Tag Libraryの唯一の表示子を設定し、WebアプリケーションでTag Librayを参照する
3.:Tag Libraryに対応するTLDファイルの場所を指定する
4.JSPファイルにを入れる必要がある
5.prefixは、JSPページでこのラベルライブラリのラベルを参照する際のプレフィックスを表し、uriはTag Libraryの識別子を指定するために使用され、webと必要である.xmlのプロパティは一貫しています.