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 }
実は、
"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 }
度々ですが、
実は 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 ページの事前解析 | << | >> |