Как получить только часть URL из HttpServletRequest?
Из следующего URL мне нужно получить (http://localhost:9090/dts)
один.
То есть мне нужно удалить (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;