Tapestry 5 に変換したい Struts (1.3.8) アプリケーションがあります。変換全体を一度に行う時間はおそらくないでしょう。Tapestry に新しい機能を提供し、時間が許す限り既存の Struts / JSP を変換したいと考えています。誰かがこのようなことを試みましたか?Struts と Tapestry は共存できますか?
3 に答える
ほとんどの人が行っている方法で Struts を使用した場合、Struts のすべての URL が /action で始まるか、.do で終わる可能性があります。Shiny 氏と New 氏が指摘したように、これは、Tapestry フィルターと Struts フィルターまたはサーブレットを使用して、さまざまな URL をフィルター処理できることを意味します。私は両方を使用しましたが、Tapestry が Struts URL を処理する必要がないようにすることを強くお勧めします。Struts を使用すると、URL をほとんど手作業でコーディングできるので、Tapestry ページにリンクすることは問題になりませんが、Tapestry を Struts URL にリンクさせたい場合、標準的な方法では問題が生じる可能性があります。理想的には、アプリの一部 (内部管理機能など) を分割して、完全に独立させることができます。
Tapestry を使用しなくてもweb.xml
、URL がサーブレット/フィルターにどのようにマップされるかを定義するため、2 つのフレームワークは共存できるはずです。たとえば、Wicket には、リクエスト ハンドラを実装する Wicket クラスをチェックするフィルタがあります。一致するものがない場合、リクエストはチェーンを上に渡されます。これにより、特定のアクションに引き続き Struts を使用できるようになります。
保持したい URL がある場合は、Struts アクションを変更して、新しい内部 URL に転送することができます。最終的に、すべてのストラット アクションは基本的に URL 書き換えアクションになり、ストラットを切り取って URL 書き換えフィルターに置き換えることができます。
新しい URL が古い URL と競合しない場合は、何も難しいことはありません。新しいフレームワークとそのリクエスト ハンドラをセットアップするだけです。Strutsアクションが検出されると ( /doSomething.do
)、StrutsActionServlet
は要求をアクションにディスパッチします。ではstruts-config.xml
、JSP、タイル、またはタペストリー URL のいずれかの適切な場所に転送できます。Tapestry には、リクエストの処理が完了した後に任意の URL に転送する方法があると思います。必要に応じて Struts アクションに転送してください。
私が予測できる厄介な問題の 1 つは、Struts と Tapestry がサードパーティのライブラリに対して競合する要件を持っているかどうかです。それがうまくいかない場合は、あらゆる種類の簡単な移行に真剣に失敗している可能性があります.
私はこれを一度しました。2つのフレームワークは独自の定数/プレフィックスを使用しているため、2つのフレームワークのセッション間のブリッジを修正する必要がありました。レガシーアプリからT5アプリに段階的に切り替えました。web.xmlを使用してstrutsリクエストをstrutsにポイントすると、T5リクエストはT5フィルターによって取得されます。特定のURLを無視するようにT5フィルターを構成することもできると思います。
また、タッキーURLRewriteフィルターを使用して、個々のリクエストが送信されるかどうかを制御しました。これにより、ある日はページがストラットになり、次の日はT5になり、URLは一定のままになります(これは、ストラットアプリがライブで、他のユーザーがブックマークしている場合に便利です)
コードを読み(どこかにアーカイブしています)、落とし穴を見つけたらさらに投稿します。
幸運を。