WebアプリケーションコンテキストへのURLを取得する(ベースURL) 質問する

WebアプリケーションコンテキストへのURLを取得する(ベースURL) 質問する

場合によっては、サーブレット/JSP/その他に基づいて、Webアプリのコンテキストへの完全なURLを構築する必要がありますHttpServletRequesthttp://サーバー名:8080/コンテキスト/Servlet API にはこれを実現するための単一のメソッドはありません。

最も簡単な方法は、すべてのURLコンポーネントを に追加することですStringBuffer

ctxUrl = sb.append(req.getScheme()).append("://")
.append(req.getgetServerName()).append(":")
.append(req.getServerPort()) etc

この代替案(10 倍高速)に何か問題があるのだろうか:

ctxUrl = req.getRequestURL();
ctxUrl = ctxUrl.substring(0, ctxUrl.lastIndexOf("/")));

上記の2つの方法はいつも同じ結果を生み出すのでしょうか?

ベストアンサー1

これは「ベース URL」と呼ばれます (HTML タグで使用できるもの<base>)。次のように取得できます。

StringBuffer url = req.getRequestURL();
String uri = req.getRequestURI();
String ctx = req.getContextPath();
String base = url.substring(0, url.length() - uri.length() + ctx.length()) + "/";

このctxUrl.substring(0, ctxUrl.lastIndexOf("/")));アプローチは、 のような複数のフォルダーを含む URL では失敗しますhttp://server.name:8080/context/folder1/folder2/folder3

参照:

おすすめ記事