Как получить домен URL и имя приложения?

Вот сценарий.

Мое веб-приложение 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"?

96
задан BalusC 21 May 2014 в 06:37
поделиться

3 ответа

Имя веб-приложения (фактически контекстный путь) доступно при вызове HttpServletrequest#getContextPath() (и таким образом НЕ getServletPath(), как предлагалось ранее). Вы можете получить это в JSP по ${pageContext.request.contextPath}.

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

Если вы собираетесь использовать это для всех относительных путей на вашей странице JSP (что сделает этот вопрос более разумным), то вы можете использовать HTML тэг:

<%@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>

Все ссылки на странице будут автоматически относительны к , так что вам не нужно будет везде копировать контекстный путь. Обратите внимание, что когда относительные ссылки начинаются с /, то они будут относительны не к , а к корню домена.

91
ответ дан 24 November 2019 в 05:35
поделиться

Вы можете найти минимальную совершенную функцию хеширования, http://cmph.sourceforge.net/ .

-121--2396269-

Ознакомьтесь с документацией для StartServletRequest .
Чтобы построить URL в вашем примере, вы должны будете использовать:

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

Вот является методом, который возвратит ваш пример:

public static String getURLWithContextPath(HttpServletRequest request) {
   return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
}
103
ответ дан 24 November 2019 в 05:35
поделиться

Я настоятельно рекомендую вам прочитать документы , чтобы аналогичные методы. Если вас интересует контекстный путь, посмотрите здесь, ServletContext.getContextPath () .

7
ответ дан 24 November 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: