1. ホーム
  2. jsp

[解決済み] ドメインURLとアプリケーション名を取得するには?

2023-01-23 19:39:06

質問

シナリオは以下の通りです。

私のJavaウェブアプリケーションは次のようなパスを持っています。

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" を実際に取得する方法はありますか?

どのように解決するのですか?

ウェブアプリケーション名(実際にはコンテキストパス)は HttpServletrequest#getContextPath() (したがって、NOT 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> への相対パスではなく、ドメインルートへの相対パスとなります。