Ole*_*eev 19 java servlets web-applications java-ee
有时您需要在servlet/JSP /基于内容的任何内容中构建Web应用程序上下文的完整URL HttpServletRequest.像http://server.name:8080/context/这样的东西.Servlet API没有一种方法可以实现这一点.
直接的方法是将所有URL组件附加到a StringBuffer,例如
ctxUrl = sb.append(req.getScheme()).append("://")
.append(req.getgetServerName()).append(":")
.append(req.getServerPort()) etc
Run Code Online (Sandbox Code Playgroud)
我想知道这个替代方案是否有任何问题(速度提高了10倍):
ctxUrl = req.getRequestURL();
ctxUrl = ctxUrl.substring(0, ctxUrl.lastIndexOf("/")));
Run Code Online (Sandbox Code Playgroud)
以上两种方法总会产生相同的结果吗?
Bal*_*usC 25
它被称为"基本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()) + "/";
Run Code Online (Sandbox Code Playgroud)
ctxUrl.substring(0, ctxUrl.lastIndexOf("/")));对于包含多个文件夹的网址,您的方法会失败http://server.name:8080/context/folder1/folder2/folder3.
Arc*_*ano 17
以下将获取上下文URL并适当地解决问题.
URI contextUrl = URI.create(req.getRequestURL().toString()).resolve(req.getContextPath());
Run Code Online (Sandbox Code Playgroud)
这将对端口,斜杠和不支持进行所有必要的处理.它也适用于根上下文,因为req.getContextPath()将返回""
如果您使用的是代理服务器,则需要确保Host:传入原始请求(例如Apache ProxyPass指令)ProxyPreserveHost.
| 归档时间: |
|
| 查看次数: |
36595 次 |
| 最近记录: |