如何从HttpServletRequest中获取URL中的一部分?(How to get only

2019-08-04 21:39发布

从下面的URL我需要获得(http://localhost:9090/dts)独自一人。
这就是我需要删除(documents/savedoc) (OR)
只需要得到- (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

任何人都可以请帮我解决这个?

Answer 1:

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

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

// 试试这个

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


Answer 2:

你说你想获得准确:

http://localhost:9090/dts

在你的情况,上面的字符串包括:
1) 方案 :HTTP
2) 服务器的主机名本地主机
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



Answer 3:

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

也可以看看:

  • 呼叫转发到JSP一个Servlet时,浏览器无法访问/找到类似CSS,图像和链接相关的资源 (用于组成基本URL的JSP / JSTL变体)


Answer 4:

在我的理解,你需要的域部分,只有上下文路径。 基于这样的认识,您可以使用此方法来获取所需的字符串。

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

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

tString = tString + cpath;


文章来源: How to get only part of URL from HttpServletRequest?