Имя веб-приложения (фактически путь контекста) доступно по вызову HttpServletrequest#getContextPath()
(и, следовательно, НЕ, getServletPath()
как предлагалось ранее). Вы можете получить это в JSP с помощью ${pageContext.request.contextPath}
.
<p>The context path is: ${pageContext.request.contextPath}.</p>
Если вы намереваетесь использовать это для всех относительных путей на странице JSP (что сделало бы этот вопрос более понятным), то вы можете использовать <base>
тег 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>
После этого все ссылки на странице будут автоматически относиться к, <base>
так что вам не нужно везде копировать путь контекста. Обратите внимание, что когда относительные ссылки начинаются с a /
, они будут относиться не к <base>
, а к корню домена.
ServletContext.getContextPath()
следует рассматривать как основной или предпочтительный контекстный путь приложения». Это была причина, по которой я включил это в свой первоначальный ответ, осознав это. Я не удалял свою первую попытку, так как хочу, чтобы OP рассмотрел возможность чтения документации и знал немного больше о связанных методах. Надеюсь, вы поняли мою мысль.getServletPath()
возвращается/filename.jsp
. OP вообще не просил об этом, это, конечно, не путь.<base>
тег? Не следует ли закрыть все теги?Взгляните на документацию для
HttpServletRequest
.Чтобы создать URL-адрес в вашем примере, вам нужно будет использовать:
getScheme()
getServerName()
getServerPort()
getContextPath()
Вот метод, который вернет ваш пример:
источник
request.getLocalAddr()
getContextPath()
в методе ничего не возвращает! ИgetServerPort()
возвращает только двухзначное число, а не четырехзначное! Могу ли я помочь?Название приложения взято из
getContextPath
.Я нахожу этот рисунок из Agile Software Craftsmanship HttpServletRequest Path Decoding сортирует все различные доступные методы:
источник
Я настоятельно рекомендую вам прочитать документацию по аналогичным методам. Если вас интересует контекстный путь, посмотрите здесь ServletContext.getContextPath () .
источник
Следующий код может быть полезен для веб-приложения, использующего JavaScript.
источник
Если вам передается URL-адрес в виде строки и вы хотите извлечь корень контекста этого приложения, вы можете использовать это регулярное выражение для его извлечения. Это будет работать для полных URL-адресов или относительных URL-адресов, которые начинаются с корня контекста.
источник