场景:经验在JSP处得到生成basepath变量,用于得到用户访问的服务器地址路径。这样,在跳转或者图片资源都使用的是绝对路径。
但是部署以后,发现basepath的地址为局域网的地址,而非外网访问时使用的地址。当然如果使用的是相对路径则无此问题。但在公司测试时,并无此现象。
解决:部署环境使用了代理服务进行转发,所以,对于应用服务器,接收到地址都是代理服务器发出的请求。自然也就是内网的地址了。
String path = request.getContextPath();
String bases = request.getHeader("X-FORWARDED-HOST");
if(bases==null || bases.length()<1){
bases =request.getHeader("Host");
}
if(bases==null || bases.length()<1){
bases =request.getServerName()+":"+request.getServerPort();
}
String basePath = request.getScheme()+"://"+ bases+ path+"/";