21

場合によっては、サーブレット/JSP などに基づいて、Web アプリ コンテキストへの完全な URL を構築する必要がありますHttpServletRequesthttp://server.name:8080/context/のようなもの。サーブレット 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 つの方法では、常に同じ結果が得られますか?

4

3 に答える 3

26

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

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

以下も参照してください。

于 2013-01-10T02:07:02.647 に答える