Как получить только часть 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 14

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());
// ...

См. также:

В моем понимании, вам нужна только часть домена и путь контекста. Исходя из этого понимания, вы можете использовать этот метод для получения требуемой строки.

String domain = request.getRequestURL().toString();
String cpath = request.getContextPath().toString();

String tString = domain.subString(0, domain.indexOf(cpath));

tString = tString + cpath;