| MAP | PageMixer ドキュメント > チュートリアル > PageMixer の利用 > HTML ページの事前解析 | << | >> |
本節では、 PageMixer フレームワークにおける HTML ページの事前解析に関して説明します。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
| 表記 | 完全名 |
|---|---|
| ConsumerContext | jp.ne.dti.lares.foozy.pagemixer.mixer.ConsumerContext |
| DataProvider | jp.ne.dti.lares.foozy.pagemixer.mixer.DataProvider |
| PageParser | jp.ne.dti.lares.foozy.pagemixer.mixer.PageParser |
| PersistentProducer | jp.ne.dti.lares.foozy.pagemixer.mixer.PersistentProducer |
| Producer | jp.ne.dti.lares.foozy.pagemixer.mixer.Producer |
| 表記 | 完全名 |
|---|---|
| BasketFilter | pagemixer.filter.BasketFilter |
| Bootstrap | pagemixer.filter.Bootstrap |
本チュートリアルにおけるこれまでの節では、
サンプルプログラムの実行時における HTML ページの解析には、
PageParser を利用してきました。
しかし、このような実行時解析は、 以下のような問題の原因となり得ます。
あるいは、
Producer がプログラム的に作成される可能性もあります。
PageMixer フレームワークは、
Producer のインスタンスが必要なのであって、
HTML ページが必要なのではありません。
そこで、
直接的な Producer の入手が必要となります。
PersistentProducer の利用PageMixer フレームワークは、
外部ファイルとの間で
Producer のシリアライズ/デシリアライズをするために、
"PersistentProducer" クラスを提供しています。
Producer のシリアライズを行うコードは、
以下のようになります。
try{
PersistentProducer persistent =
new PersistentProducer();
persistent.write(filename, producer);
}
catch(IOException e){
// SOMETHING TO DO
}
PersistentProducer
によるシリアライズ実は、
"PageParser" を利用することで、
指定した HTML ページから生成された
Producer を直接書き出すことが可能です。
詳細は、PageParser を参照してください。
次に、
Producer のデシリアライズを行うコードは、
以下のようになります。
try{
PersistentProducer persistent =
new PersistentProducer();
Producer producer = persistent.read(filename);
}
catch(IOException e){
// SOMETHING TO DO
}
catch(ClassNotFoundException e){
// SOMETHING TO DO
}
PersistentProducer
によるデシリアライズ度々ですが、
実は Bootstrap クラスは、
Producer のデシリアライズを行うユーティリティメソッド
"readinProducer(String)" を提供していますので、
チュートリアル環境でのデシリアライズは、
容易に行うことが出来ます。
以上で必要なものが全て揃いました。
最初に
PageParser#main を起動することで、
指定された HTML ページから生成された
Producer を、
指定されたファイルにシリアライズします。
次に、以下のコードに示す手順により、
ファイルから Producer をデシリアライズし、
Token シーケンスを生成します
(詳細は pagemixer.filter.PreparseSample を参照してください)。
try{
final Object providerkey =
"Shop.Basket.BasketEntryProvider";
final Object dataKey =
"Shop.Basket.BasketEntry";
Bootstrap bootstrap = new Bootstrap()
{
protected Producer createProducer()
throws IOException, //
ClassNotFoundException //
{
return readinProducer(filename);
}
protected void prepare(ConsumerContext context)
{
List entryList = BasketEntry.getEntryList();
ListDataProvider provider =
new ListDataProvider(entryList);
context.setValue(providerKey, provider);
}
};
BasketFilter filter =
new BasketFilter(providerKey, dataKey);
bootstrap.execute(filter);
}
catch(Exception e){
e.printStackTrace(System.err);
}
入力用のサンプル HTML ファイルは、
配布物中の "src/demo/servlet/war/WEB-INF/page/demosite"
配下にある
"basket.ja.html" です。
"BasketFilter" に関しては、
"フィルタの組み合わせ"
節で説明しました。
| MAP | PageMixer ドキュメント > チュートリアル > PageMixer の利用 > HTML ページの事前解析 | << | >> |