100

これがシナリオです。

私のJavaWebアプリケーションには次のパスがあります

https://www.mywebsite.com:9443/MyWebApp

JSPファイルがあるとしましょう

https://www.mywebsite.com:9443/MyWebApp/protected/index.jsp

と私は取得する必要があります

https://www.mywebsite.com:9443/MyWebApp 

このJSPファイル内。

もちろん、URLを取得してからパスを再トレースするという、怠惰でばかげた方法があります。

しかし、これを行うためのプログラム的な方法はありますか?具体的には、ドメインとポートを取得できると思いますが、実際にアプリケーション名「MyWebApp」を取得するにはどうすればよいですか?

4

6 に答える 6

110

のドキュメントを参照してくださいHttpServletRequest
例で URL を作成するには、次を使用する必要があります。

  • getScheme()
  • getServerName()
  • getServerPort()
  • getContextPath()

あなたの例を返すメソッドは次のとおりです。

public static String getURLWithContextPath(HttpServletRequest request) {
   return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
}
于 2010-02-05T04:15:05.550 に答える
94

Web アプリケーション名 (実際にはコンテキスト パス) は、呼び出しによって利用できますHttpServletrequest#getContextPath()(したがって、getServletPath()以前に提案されたものではありません)。によって JSP でこれを取得できます${pageContext.request.contextPath}

<p>The context path is: ${pageContext.request.contextPath}.</p>

JSP ページのすべての相対パスにこれを使用する場合 (この質問はより理にかなっています)、HTML<base>タグを使用できます。

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="req" value="${pageContext.request}" />
<c:set var="url">${req.requestURL}</c:set>
<c:set var="uri" value="${req.requestURI}" />

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2204870</title>
        <base href="${fn:substring(url, 0, fn:length(url) - fn:length(uri))}${req.contextPath}/">
        <script src="js/global.js"></script>
        <link rel="stylesheet" href="css/global.css">
    </head>
    <body>
        <ul>
            <li><a href="home.jsp">Home</a></li>
            <li><a href="faq.jsp">FAQ</a></li>
            <li><a href="contact.jsp">Contact</a></li>
        </ul>
    </body>
</html>

ページ内のすべてのリンクは自動的に に対して相対的になる<base>ため、コンテキスト パスをどこにでもコピーペーストする必要はありません。相対リンクが で始まる場合、相対リンクはではなく、ドメイン ルートに/相対することに注意してください。<base>

于 2010-02-05T11:36:28.090 に答える
7

同様の方法については、ドキュメントを一読することを強くお勧めします。コンテキストパスに興味がある場合は、ServletContext.getContextPath()を参照してください。

于 2010-02-05T03:43:20.770 に答える
4

次のコードは、JavaScript を使用する Web アプリケーションに役立つ場合があります。

var newURL = window.location.protocol + "//"  + window.location.host + "" + window.location.pathname;

newURL = newURL.substring(0,newURL.indexOf(""));
于 2013-07-01T03:57:55.287 に答える