从以下网址我需要单独(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
有人可以帮我解决这个问题吗?
答案 0 :(得分:34)
你说你想完全得到:
http://localhost:9090/dts
在您的情况下,上述字符串包括:
1)scheme: http
2)服务器host name : localhost
3)服务器port : 9090
4)context path: dts
(有关请求路径元素的更多信息,请参阅官方Oracle Java EE Tutorial :Getting Information from Requests)
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
答案 1 :(得分:12)
AFAIK对此没有API提供的方法,需要定制。
String serverName = request.getServerName();
int portNumber = request.getServerPort();
String contextPath = request.getContextPath();
//试试这个
System.out.println(serverName + ":" +portNumber + contextPath );
答案 2 :(得分:12)
只需从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());
// ...
答案 3 :(得分:1)
根据我的理解,您只需要域部分和上下文路径。基于这种理解,您可以使用此方法获取所需的字符串。
String domain = request.getRequestURL().toString();
String cpath = request.getContextPath().toString();
String tString = domain.subString(0, domain.indexOf(cpath));
tString = tString + cpath;
答案 4 :(得分:0)
对于那些想要在他们的端点中获得以端点为目标的首页的网址的人。你可以用这个:
request.getHeader("referer")
答案 5 :(得分:-1)
通常,我有这样一种方法:
public String getAbsoluteContextPath() throws MalformedURLException {
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) context.getRequest();
URL url = new URL(request.getRequestURL().toString());
return url.getProtocol() + "://" + url.getAuthority() + context.getRequestContextPath();
}
仅当当前请求中存在端口号时,此方法才会返回所需的端口号。对于您的情况,它将返回:http:// localhost:9090 / dts