request获取项目地址

1.关于request的使用总结:

1.2一般在项目中跳转到其他项目地址直接用:

1
2
3
4
5


response.sendRedirect("https://www.daidu.com");


1.3在本项目中跳转一般为:(存在一定的错误性)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16


String redirect = request.getContextPath() + "目标类";
response.sendRedirect(redirect);


*request.getContextPath()的作用就是获取项目的跟目录:如果为空值就为“”,如果不为空值就为“xx”;*

*之所以这样处理是因为每个项目都有每个项目的名称,这样才能基本保证地址拼接的正确性;*

*如:你本地跑一个项目地址为:http://localhost:8080/index,(这样你就能访问到项目的公共)*

*但是正式环境可能会给项目一个指定的名称如:/pro,那么上面那个地址的就不能访问。正确地址如下:*

*http://xxx.com/pro/index;*

1.4由于生产环境基本都会配置nginx进行配置代理,那么外网访问地址为:https协议通过nginx代理可能会变成:http,那么此时再用上面的1.3中的方法就会导致页面打不开或者报错;

解决方法如下:

首先更改nginx配置文件配置如下属性:

作用:判断客户端是用的http请求还是https请求

然后更改tomcat中的server.xml配置文件:

1
2
3
4
5
6
7
8
9
10
11


<Connector port="443" maxHttpHeaderSize="8192"
maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
SSLCertificateFile="${catalina.base}/conf/localhost.crt"
SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" />


最后在代码处理为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

//获取请求协议:https/http

String scheme = request.getHeader("X-Forwarded-Proto");

if (ObjectUtils.isEmpty(scheme)) {

​ scheme = request.getScheme();

}

//拼接链接

//request.getServerName() --- 获取请求链接的域名 如:www.baidu.com

//request.getContextPath() -- 获取项目的根路径

String redirect = scheme + "://" + request.getServerName() + request.getContextPath() + "目标类";

response.sendRedirect(redirect);

–个人建议不管是生产环境还是本地环境推荐使用1.4方法。