如何从 HttpServletRequest 仅获取部分 URL?

2022-09-01 21:36:50

从下面的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

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


答案 1

你说你想得到确切的:

http://localhost:9090/dts

在您的例子中,上面的字符串包含:

  1. 方案http
  2. 服务器主机名本地主机
  3. 服务器端口9090
  4. 上下文路径dts

(有关请求路径元素的更多信息,请参阅官方 Oracle Java EE 教程从请求中获取信息
##First变体:###

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);

##Second变体:##
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


答案 2

AFAIK为此没有API提供的方法,需要定制。

String serverName = request.getServerName();
int portNumber = request.getServerPort();
String contextPath = request.getContextPath();

试试这个

System.out.println(serverName + ":" +portNumber + contextPath );