“ /”を移行する際のコンテキストパス参照の処理Java EEパッケージングのサイト
-
02-07-2019 - |
質問
既存のJavaサイトは" /"の下で実行するように設計されていますTomcatでは" / dir / dir / page"などの固定絶対パスへの特定の参照が多数あります。
これをJava EEパッケージに移行したい場合、サイトをコンテキストルートで実行する必要があります。 " / dir / dir / page" " / my-context-root / dir / dir / page"
になります現在、Context-rootはServletRequest.getContextPath()で簡単に作成できますが、それでも大きなコードベースを移行するための多くのコード変更が必要です。これらの参照のほとんどはリテラルHTMLです。
サーブレットフィルターを使用して、アウトバウンドHTMLのリライトを試みましたが、うまくいくようです。ただし、オーバーヘッドが発生するため、永続的な解決策とは思えません。 ( EnforceContextRootFilter-1.0-src.zip サーブレットフィルタアプローチの場合。)
この問題を解決するためのより良いアプローチはありますか?私が見逃している明らかなことは何ですか?すべてのコメントを歓迎します!
解決
関連する質問
も検討してください。別のこと(私はこの投稿を編集し続けています) 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より少し複雑かもしれませんが、アイデアは得られます。
他のヒント
Apacheの世界ではRedirects(mod_rewrite)を使用して同じことを行いました。
サーブレットの世界はフィルターの使用を開始しました
ルビーの世界(またはRoR)は同じことをより多く行い、ルーティングと呼びます。
だから、それを回避することはできません(スマート正規表現を最後まで使用したい場合を除いて-これは試されており、正常に動作します)。