Как получить только часть URL из HttpServletRequest?
из следующего URL мне нужно получить .
То есть мне нужно удалить (documents/savedoc)
(или)
надо достать только - (http://localhost:9090/dts)
http://localhost:9090/dts/documents/savedoc
есть ли какой-либо метод, доступный в запросе, чтобы получить выше?
я попробовал следующее и получил результат. Но все еще пытаюсь.
System.out.println("URL****************"+request.getRequestURL().toString());
System.out.println("URI****************"+request.getRequestURI().toString());
System.out.println("ContextPath****************"+request.getContextPath().toString());
URL****************http://localhost:9090/dts/documents/savedoc
URI****************/dts/documents/savedoc
ContextPath****************/dts
может ли кто-нибудь помочь мне в этом?
4 ответов
AFAIK для этого нет API предоставленного метода, необходимо настроить.
String serverName = request.getServerName();
int portNumber = request.getServerPort();
String contextPath = request.getContextPath();
// попробуйте это
System.out.println(serverName + ":" +portNumber + contextPath );
вы говорите, что вы хотите получить именно:
http://localhost:9090/dts
в вашем случае вышеуказанная строка состоит из:
1) схемы: адресу http
2) сервер хоста: localhost в
3) сервер порт: 9090
4) контексте путь: dts
(более подробную информацию об элементах пути запроса можно найти в официальном Oracle Java EE учебник: получение информации из запросов)
первый вариант:
String scheme = request.getScheme();
String serverName = request.getServerName();
int serverPort = request.getServerPort();
String contextPath = request.getContextPath(); // includes leading forward slash
String resultPath = scheme + "://" + serverName + ":" + serverPort + contextPath;
System.out.println("Result path: " + resultPath);
второй вариант:
String scheme = request.getScheme();
String host = request.getHeader("Host"); // includes server name and server port
String contextPath = request.getContextPath(); // includes leading forward slash
String resultPath = scheme + "://" + host + contextPath;
System.out.println("Result path: " + resultPath);
оба варианта дадут вам то, чего вы хотели: http://localhost:9090/dts
конечно, есть и другие вариантов, как и другие уже писали ...
это просто в вашем оригинальном вопросе, который вы задали о том, как получить http://localhost:9090/dts
, то есть вы хотите свой путь к включить схема.
в случае, если вам все еще не нужна схема, быстрый способ:
String resultPath = request.getHeader("Host") + request.getContextPath();
и вы получите (в вашем случае):localhost:9090/dts
просто удалите URI из URL, а затем добавьте к нему контекстный путь. Нет необходимости возиться с свободными схемами и портами, которые только более утомительны, когда вы имеете дело с портом по умолчанию 80
которые не должны отображаться в URL-адресе вообще.
StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String ctx = request.getContextPath();
String base = url.substring(0, url.length() - uri.length() + ctx.length());
// ...
Читайте также:
- браузер не может получить доступ / найти относительные ресурсы, такие как CSS, изображения и ссылки при вызове сервлета, который пересылает JSP (для варианта JSP/JSTL составления базы URL-адрес)
в моем понимании вам нужна только часть домена и контекстный путь. Исходя из этого понимания, вы можете использовать этот метод для получения требуемой строки.
String domain = request.getRequestURL().toString();
String cpath = request.getContextPath().toString();
String tString = domain.subString(0, domain.indexOf(cpath));
tString = tString + cpath;