“ /”を移行する際のコンテキストパス参照の処理Java EEパッケージングのサイト

StackOverflow https://stackoverflow.com/questions/142965

  •  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 サーブレットフィルタアプローチの場合。)

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

役に立ちましたか?

解決

関連する質問

URLRewriteFilter

も検討してください。

別のこと(私はこの投稿を編集し続けています) 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)は同じことをより多く行い、ルーティングと呼びます。

だから、それを回避することはできません(スマート正規表現を最後まで使用したい場合を除いて-これは試されており、正常に動作します)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top