如何只从HttpServletRequest获取部分URL?

use*_*653 17 java string url servlets httprequest

从以下URL我需要(http://localhost:9090/dts)独自一人.
那就是我需要删除(documents/savedoc)(OR)
只需要获取 -(http://localhost:9090/dts)

http://localhost:9090/dts/documents/savedoc  
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可用于获得上述内容?

我尝试了以下并得到了结果.但仍在努力.

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
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决这个问题吗?

inf*_*k01 35

你说你想准确得到:

http://localhost:9090/dts
Run Code Online (Sandbox Code Playgroud)

在您的情况下,上面的字符串包括:
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);
Run Code Online (Sandbox Code Playgroud)


第二种变体:

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);
Run Code Online (Sandbox Code Playgroud)

两种变体都可以满足您的需求: http://localhost:9090/dts

当然还有其他变种,就像其他已经写过的......

这是你原来的问题,你问的是如何获得http://localhost:9090/dts,即你希望你的路径包括方案.

如果您仍然不需要方案,快速方法是:

String resultPath = request.getHeader("Host") + request.getContextPath();
Run Code Online (Sandbox Code Playgroud)

你会得到(在你的情况下): localhost:9090/dts


NPK*_*PKR 14

AFAIK对此没有API提供的方法,需要定制.

String serverName = request.getServerName();
int portNumber = request.getServerPort();
String contextPath = request.getContextPath();
Run Code Online (Sandbox Code Playgroud)

// 试试这个

System.out.println(serverName + ":" +portNumber + contextPath );
Run Code Online (Sandbox Code Playgroud)


Bal*_*usC 12

只需从URL中删除URI,然后将上下文路径附加到它.不需要摆弄松散的方案和端口,当你处理默认端口时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());
// ...
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • 5个类似的问题.最后一个简洁的答案. (2认同)