有时,您需要在servlet / JSP /基于的任何内容中构造指向Web应用程序上下文的完整URL HttpServletRequest。类似于 **http://server.name:8080/context/** 。Servlet API没有实现此目的的单一方法。
HttpServletRequest
直接的方法是将所有URL组件附加到StringBuffer,例如
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("/")));
上述两种方法是否 总是会 产生相同的结果?
它称为“基本URL”(您可以在HTML <base>标记中使用的一个)。您可以按以下方式获取它:
<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。
ctxUrl.substring(0, ctxUrl.lastIndexOf("/")));
http://server.name:8080/context/folder1/folder2/folder3