在Spring MVC中获取Web应用程序的root / base url的最佳方法是什么?
Base Url = http://www.example.com或http://www.example.com/VirtualDirectory
答案 0 :(得分:24)
如果基本网址为“http://www.example.com”,请使用以下内容获取“ www.example.com ”部分,不包含“http://”:
来自控制器:
@RequestMapping(value = "/someURL", method = RequestMethod.GET)
public ModelAndView doSomething(HttpServletRequest request) throws IOException{
//Try this:
request.getLocalName();
// or this
request.getLocalAddr();
}
来自JSP:
在您的文档之上声明:
<c:set var="baseURL" value="${pageContext.request.localName}"/> //or ".localAddr"
然后,要使用它,请引用变量:
<a href="http://${baseURL}">Go Home</a>
答案 1 :(得分:12)
您也可以创建自己的方法来获取它:
public String getURLBase(HttpServletRequest request) throws MalformedURLException {
URL requestURL = new URL(request.getRequestURL().toString());
String port = requestURL.getPort() == -1 ? "" : ":" + requestURL.getPort();
return requestURL.getProtocol() + "://" + requestURL.getHost() + port;
}
答案 2 :(得分:11)
request.getRequestURL()。toString()。replace(request.getRequestURI(),request.getContextPath())
答案 3 :(得分:8)
在控制器中,使用HttpServletRequest.getContextPath()
。
在使用Spring标记库的JSP中:用于jstl
答案 4 :(得分:5)
注入UriCompoenentsBuilder
:
@RequestMapping(yaddie yadda)
public void doit(UriComponentBuilder b) {
//b is pre-populated with context URI here
}
。或者自己动手(类似于Salims的回答):
// Get full URL (http://user:pwd@www.example.com/root/some?k=v#hey)
URI requestUri = new URI(req.getRequestURL().toString());
// and strip last parts (http://user:pwd@www.example.com/root)
URI contextUri = new URI(requestUri.getScheme(),
requestUri.getAuthority(),
req.getContextPath(),
null,
null);
然后,您可以使用该URI中的UriComponentsBuilder:
// http://user:pwd@www.example.com/root/some/other/14
URI complete = UriComponentsBuilder.fromUri(contextUri)
.path("/some/other/{id}")
.buildAndExpand(14)
.toUri();
答案 5 :(得分:4)
简单地说:
video {display: block;}
答案 6 :(得分:3)
我更喜欢使用
final String baseUrl =
ServletUriComponentsBuilder.fromCurrentContextPath().build().toUriString();
它返回一个完整构建的URL,方案,服务器名称和服务器端口,而不是连接和替换容易出错的字符串。
答案 7 :(得分:2)
我知道这个问题已经很老了,但这是我发现的唯一与此主题有关的问题,所以我想与以后的访问者分享我的方法。
如果要从WebRequest获取基本URL,则可以执行以下操作:
ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request);
这将为您提供方案(“ http”或“ https”),主机(“ example.com”),端口(“ 8080”)和路径(“ / some / path”),而{{1 }}也会为您提供查询参数。但是,由于我们只想获取基本URL(方案,主机,端口),因此不需要查询参数。
现在,您只需删除以下行即可:
fromRequest(request)
最后,我们获取基本URL的单行代码如下:
ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request).replacePath(null);
如果您想在控制器外部或没有//request URL: "http://example.com:8080/some/path?someParam=42"
String baseUrl = ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request)
.replacePath(null)
.build()
.toUriString();
//baseUrl: "http://example.com:8080"
的地方使用它,只需替换
HttpServletRequest
使用
ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request).replacePath(null)
这将通过春季的ServletUriComponentsBuilder.fromCurrentContextPath()
获得HttpServletRequest
。您也将不需要RequestContextHolder
,因为它仅是方案,主机和端口。
答案 8 :(得分:1)
@RequestMapping(value="/myMapping",method = RequestMethod.POST)
public ModelandView myAction(HttpServletRequest request){
//then follow this answer to get your Root url
}
如果你在jsp中需要它,那么进入控制器并将它作为对象添加到ModelAndView中。
或者,如果您在客户端需要它,请使用javascript来检索它: http://www.gotknowhow.com/articles/how-to-get-the-base-url-with-javascript
答案 9 :(得分:0)
我认为这个问题的答案是:Finding your application's URL with only a ServletContext显示了为什么你应该使用相对网址,除非你有一个非常具体的理由想要根网址。
答案 10 :(得分:0)
在JSP中
<c:set var="scheme" value="${pageContext.request.scheme}"/>
<c:set var="serverPort" value="${pageContext.request.serverPort}"/>
<c:set var="port" value=":${serverPort}"/>
<a href="${scheme}://${pageContext.request.serverName}${port}">base url</a>
答案 11 :(得分:0)
如果您只是对浏览器中URL的宿主部分感兴趣,则直接从 request.getHeader(“ host”))-
Internet
如果请求网址为import javax.servlet.http.HttpServletRequest;
@GetMapping("/host")
public String getHostName(HttpServletRequest request) {
request.getLocalName() ; // it will return the hostname of the machine where server is running.
request.getLocalName() ; // it will return the ip address of the machine where server is running.
return request.getHeader("host"));
}
localhost:8082
答案 12 :(得分:0)
这里:
在[body标签]中的.jsp文件中
<input type="hidden" id="baseurl" name="baseurl" value=" " />
在您的.js文件中
var baseUrl = windowurl.split('://')[1].split('/')[0]; //as to split function
var xhr = new XMLHttpRequest();
var url='http://'+baseUrl+'/your url in your controller';
xhr.open("POST", url); //using "POST" request coz that's what i was tryna do
xhr.send(); //object use to send```