1

既存のJavaサイトは、Tomcatの「/」の下で実行されるように設計されており、「/ dir / dir/page」のような固定絶対パスへの特定の参照が多数あります。

これをJavaEEパッケージに移行したい場合、サイトはコンテキストルートで実行する必要があります。たとえば、「/ dir / dir/page」は「/my-context-root/ dir / dir/page」になります。

これで、コンテキストルートはServletRequest.getContextPath()を使用して簡単に実行できますが、それでも、大規模なコードベースを移行するために多くのコード変更が行われることを意味します。これらの参照のほとんどは、リテラルHTMLです。

サーブレットフィルターを使用して、出力されたHTMLを書き換えてみましたが、これは問題なく機能しているようです。しかし、それはある程度のオーバーヘッドをもたらし、私はそれを恒久的な解決策とは見なしません。( サーブレットフィルターのアプローチについては、EnforceContextRootFilter-1.0-src.zipを参照してください)。

この問題を解決するためのより良いアプローチはありますか?私が見逃している明らかなものはありますか?すべてのコメントに感謝します!

4

2 に答える 2

1

関連する質問をチェックしてください

URLRewriteFilterも検討してください

もう1つ(私はこのくそったれの投稿を編集し続けています)。JSP を使用している場合 (静的 HTML などではなく)、タグ ファイルを作成して、一般的な html タグをリンク (特に a、img、form) に置き換えることもできます。したがって、<a href="/root/path">link</a> は <t:a href="/root/path">link</t:a> になります。その後、タグが翻訳を行います。

この変更は、sed などを使用して「まとめて」簡単に行うことができます。

sed -e 's/<a/<t:a/g' -e 's/<\/a>/<\/t:a>/g' old/x.jsp > new/x.jsp

フォームのアクションは sed よりも少しトリッキーかもしれませんが、理解できます。

于 2008-09-27T06:41:44.327 に答える
0

Apache の世界では Redirects(mod_rewrite) を使用して同じことを行いました。

サーブレットの世界はフィルターを使用して開始されました

ruby の世界 (または RoR) は、同じことをより多く行い、それをルーティングと呼んでいます。

したがって、それを回避することはできません (完全にスマート正規表現を使用したい場合を除きます。これは試行済みで、問題なく動作します)。

于 2008-09-27T06:17:41.513 に答える