Как получить 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"?
6 ответов:
имя веб-приложения (фактически путь контекста) доступно по вызову
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>больше, но к корню домена вместо этого.
взгляните на документацию для
HttpServletRequest.
Для того, чтобы построить URL в вашем примере вам нужно будет использовать:
getScheme()getServerName()getServerPort()getContextPath()вот метод, который вернет ваш пример:
public static String getURLWithContextPath(HttpServletRequest request) { return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); }
Я настоятельно рекомендую вам прочитать docs, для подобных методов. Если вас интересует контекстный путь, посмотрите здесь,ServletContext.getContextPath().
имя приложения происходит от
getContextPath.Я нахожу эту графику от Гибкое Программное Обеспечение Мастерство HttpServletRequest Путь Декодирования сортирует все различные методы, которые доступны:
следующий код может быть полезен для веб-приложения, использующего JavaScript.
var newURL = window.location.protocol + "//" + window.location.host + "" + window.location.pathname; newURL = newURL.substring(0,newURL.indexOf(""));
Если вы передаете url-адрес в виде строки и хотите извлечь корневой контекст этого приложения, вы можете использовать это регулярное выражение для его извлечения. Он будет работать для полных URL-адресов или относительных URL-адресов, которые начинаются с корневого контекста.
url.replaceAll("^(.*\/\/)?.*?\/(.+?)\/.*|\/(.+)$", "")

Comments