一尘不染

获取Web应用程序上下文的URL(基本URL)

java

有时,您需要在servlet / JSP /基于的任何内容中构造指向Web应用程序上下文的完整URL HttpServletRequest。类似于
**http://server.name:8080/context/** 。Servlet API没有实现此目的的单一方法。

直接的方法是将所有URL组件附加到StringBuffer,例如

ctxUrl = sb.append(req.getScheme()).append("://")
.append(req.getgetServerName()).append(":")
.append(req.getServerPort()) etc

我想知道这种选择是否有问题(速度快10倍):

ctxUrl = req.getRequestURL();
ctxUrl = ctxUrl.substring(0, ctxUrl.lastIndexOf("/")));

上述两种方法是否 总是会 产生相同的结果?


阅读 531

收藏
2020-12-03

共1个答案

一尘不染

它称为“基本URL”(您可以在HTML <base>标记中使用的一个)。您可以按以下方式获取它:

StringBuffer url = req.getRequestURL();
String uri = req.getRequestURI();
String ctx = req.getContextPath();
String base = url.substring(0, url.length() - uri.length() + ctx.length()) + "/";

您的ctxUrl.substring(0, ctxUrl.lastIndexOf("/")));方法将对包含多个文件夹的URL失败http://server.name:8080/context/folder1/folder2/folder3

2020-12-03