1

背景: 2002 年から 2003 年の間に、Java ベースの古い CMS で書かれたシステムがあります。私たちは、Tomcat、Stripe、SiteMesh を使用して、新しいものを前進させ続けたいと考えています。ナビゲーション、レイアウト、「ポッド」、js、css などを古い CMS からいくつかの新しいアプリに取り込んで、一貫したルック アンド フィールを実現しています。

進行中のすべてのコードの重複を取り除くために、何らかの解決策が必要です。現時点では、アプリは同じ VM で実行されていますが、変更される可能性があります。すべての tomcat インスタンスがいくつかの共通要素にアクセスする方法が必要です (これらの要素はサーバー側の処理を行う必要がある場合とない場合があります)。

これまでに思いついた最善の方法は、c:import を使用して必要なものを取得し、正しくプラグインする、かなり標準的なサイトメッシュ デコレータを作成することです。点。<%@ include file="/something.jsp" %> も調べましたが、これはコンテキストに関連しているだけのようです。c:import を使用して、それを localhost に向けることができます。

これを簡単にする他のテンプレート/装飾フレームワーク(Tiles?)はありますか? 何が欠けていますか?

4

2 に答える 2

1

私たちは Sitemesh を何年も使用してきましたが、複雑な気持ちです。

私は、applydecorator を使用するよりも、標準の JSP タグ ファイル (.tag または .tagx) を作成する方がはるかに好きです。タグ ファイルの出現により、applydecorator タグは実質的に時代遅れになったと思いますが、あまりにも多くの Sitemesh ユーザーが気付かなかったのです。

Sitemesh の使用のほとんどすべてがこの種のものでした。JSP ページがレイアウトとして明示的に参照する共通のページ テンプレートがいくつかあります。「標準のレイアウトを使用してください。ここにナビゲーション メニューがあり、ここにページの本文があります。」タグ ファイルはこの機能の正確な複製ですが、標準化されており、任意の J2EE Web ツールでサポートされており、別の依存関係ではなくコンテナーに組み込まれています。

JSPページ自体がSitemeshをまったく参照していないページを真に装飾するためには、高レベルでは理にかなっていると思いますが、それでもページ全体が再度解析されるのは好きではありません.

この 2 番目の問題は実際には Sitemesh のせいではありません。連携する必要があるサーブレット API を考えると、他に何ができるかわかりません。しかし、ストリームベースのサーブレット API に代わる DOM ベースの代替手段が価値があるかどうか疑問に思います。つまり、サーブレットが出力をストリームに書き込むのではなく、ツリーにノードを追加するとどうなるでしょうか? これにより、整形式の出力が強制され、Sitemesh のような構造変換を実行したり、出力を XHTML、HTML、JSON などのさまざまな形式にオンザフライでエンコードしたりするのが安価になります。

于 2008-11-12T17:26:45.957 に答える
1

ここで何をしようとしているのかよくわかりません。私の解釈は次のとおりです。多くのアプリで再利用したい多くのリソースがあります。これらのファイルをすべてのアプリで複製することは望ましくありません。アプリ間で一貫性を維持することが難しくなるためです。

これがあなたの質問であれば、共通リソースを jar ファイルに保存することをお勧めします。これにより、いくつかの利点が得られます。

  1. リソースはローカルです - ネットワークのオーバーヘッドはありません
  2. リソースの更新を制御できます。

番号 2 の例: 共通のページ レイアウトを page-layouts-1.x.jar に保持します。それを使用するアプリに影響を与えないページ レイアウトのマイナー リリースを作成し続けます。それらはドロップイン置換です。ある日、アプリを完全に再設計し、page-layouts-2.0.jar をリリースすることにしました。これには、それを使用するアプリをいくつか書き直す必要があります。ここで、アプリがページ レイアウトをサーバー上の共有クラス ローダーに保持するのではなく、バンドルする場合、2.0 レイアウトへの移行は全か無かの問題ではありません。一度に 1 つのアプリを移行して 2.0 レイアウトを使用し、他のアプリは引き続き 1.x レイアウトを使用できます。

JSF と Facelets を使用して、これを非常にうまく行っています。

Webletsをご覧になることをお勧めします。SiteMesh や Tiles がクラス パスからリソースを提供するための直接的なサポートを得ているかどうかはわかりませんが、微調整してこれを行うことができると思います。

それが役に立てば幸い

于 2008-11-12T17:07:06.623 に答える