
2.4 Web容器配置
2.4.1 Tomcat配置
1. 常规配置
在Spring Boot项目中,可以内置Tomcat、Jetty、Undertow、Netty等容器。当开发者添加了spring-boot-starter-web依赖之后,默认会使用Tomcat作为Web容器。如果需要对Tomcat做进一步的配置,可以在application.properties中进行配置,代码如下:

代码解释:
• server.port配置了Web容器的端口号。
• error.path配置了当项目出错时跳转去的页面。
• session.timeout配置了session失效时间,30m表示30分钟,如果不写单位,默认单位是秒。由于Tomcat中配置session过期时间以分钟为单位,因此这里单位如果是秒的话,该时间会被转换为一个不超过所配置秒数的最大分钟数,例如这里配置了119,默认单位为秒,则实际session过期时间为1分钟。
• context-path表示项目名称,不配置时默认为/。如果配置了,就要在访问路径中加上配置的路径。
• uri-encoding表示配置Tomcat请求编码。
• max-threads表示Tomcat最大线程数。
• basedir是一个存放Tomcat运行日志和临时文件的目录,若不配置,则默认使用系统的临时目录。
当然,Web容器相关的配置不止这些,这里只列出了一些常用的配置,完整的配置可以参考官方文档Appendix A. Common application properties一节。
2. HTTPS配置
由于HTTPS具有良好的安全性,在开发中得到了越来越广泛的应用,像微信公众号、小程序等的开发都要使用HTTPS来完成。对于个人开发者而言,一个HTTPS证书的价格还是有点贵,国内有一些云服务器厂商提供免费的HTTPS证书,一个账号可以申请数个。不过在jdk中提供了一个Java数字证书管理工具keytool,在\jdk\bin目录下,通过这个工具可以自己生成一个数字证书,生成命令如下:

命令解释:
• -genkey表示要创建一个新的密钥。
• -alias表示keystore的别名。
• -keyalg表示使用的加密算法是RSA,一种非对称加密算法。
• -keysize表示密钥的长度。
• -keystore表示生成的密钥存放位置。
• -validity表示密钥的有效时间,单位为天。
在cmd窗口中直接执行如上命令,在执行的过程中需要输入密钥口令等信息,根据提示输入即可。命令执行完成后,会在当前用户目录下生成一个名为sang.p12的文件,将这个文件复制到项目的根目录下,然后在application.properties中做如下配置:

代码解释:
• key-store表示密钥文件名。
• key-alias表示密钥别名。
• key-store-password就是在cmd命令执行过程中输入的密码。
配置成功后,启动项目,在浏览器中输入“https://localhost:8081/chapter02/hello”来查看结果。注意,证书是自己生成的,不被浏览器认可,此时添加信任或者继续前进即可,如图2-5所示。

图2-5
成功运行的结果如图2-6所示。

图2-6
此时,如果以HTTP的方式访问接口,就会访问失败,如图2-7所示。

图2-7
这是因为Spring Boot不支持同时在配置中启动HTTP和HTTPS。这个时候可以配置请求重定向,将HTTP请求重定向为HTTPS请求。配置方式如下:

这里首先配置一个TomcatServletWebServerFactory,然后添加一个Tomcat中的Connector(监听8080端口),并将请求转发到8081上去。
配置完成后,在浏览器中输入“http://localhost:8080/chapter02/hello”,就会自动重定向到https://localhost:8081/chapter02/hello上。
2.4.2 Jetty配置
除了Tomcat外,也可以在Spring Boot中嵌入Jetty,配置方式如下:

主要是从spring-boot-starter-web中除去默认的Tomcat,然后加入Jetty的依赖即可。此时启动项目,查看启动日志,如图2-8所示。

图2-8
2.4.3 Undertow配置
Undertow是一个红帽公司开源的Java服务器,具有非常好的性能,在Spring Boot中也得到了很好的支持,配置方式与Jetty类似,代码如下:

启动后查看日志,如图2-9所示。

图2-9