后端应用程序的服务器称为Web应用服务器,Web应用服务器根据不同的开发语言是有所区别的。这里以Java开发的后端应用程序为例,对应的Web应用服务器软件有Tomcat、Jetty和Weblogic。
注意:Web应用服务器和第3章提到的Web服务器是有所区别的。Web服务器一般处理的是静态网页资源,如网页相关文件和图片等资源文件,而Web应用服务器除了能处理静态文件之外,还可以执行应用程序。
Tomcat:在架构方面其采用了整体架构,不易扩展并且配置复杂,但是功能全面;在文档方面其功能比较全面,网上能查到很多在使用过程中遇到的问题;在应用场景方面,其适用于频繁且生命周期较短的请求。
Jetty:在架构方面基于一个可扩展的架构,扩展更容易且配置简单,可根据需要增减组件,内存开销相对更少;在文档方面,其文档比较零散,网上能查到的在使用过程中遇到问题较少一些;在应用场景方面,其适用于大量连接且长时间的请求,如Web聊天应用。
Weblogic是一款不开源且不免费的商业软件,功能完善而且版本稳定。
Web应用服务器软件的选择可根据具体的业务场景而选用。当然,一个大型网站系统里可能会有多种Web应用服务器软件,因为不同的后端应用程序会有不同的业务场景和性能要求,所以Web应用服务器软件需要根据实际情况来选用。但一般情况下,大多数的业务请求都是频繁的而且生命周期较短,在流行性方面Tomcat也是比较占优的,因此这里选用Tomcat作为本书的Web应用服务器软件。
由于Tomcat本身是用Java语言编写的,其运行的后端应用程序也是用Java编写的,而运行Java编写的程序需要JDK环境,所以Tomcat的安装步骤大体上分成两部分,即JDK安装和Tomcat安装。这里需要注意的是,不同的Tomcat版本对JDK版本是有要求的,如表4.1所示,详情见Tomcat官方文档(
http://tomcat.apache.org/whichversion.html)。
表4.1 不同的Tomcat版本对JDK版本的要求
下面分别在Windows系统和CentOS系统中安装Tomcat。选择这两个系统是因为Windows一般是开发人员在开发时使用的操作系统,而CentOS一般是网站服务器的操作系统。
说明:JDK(Java Development Kit)是Java软件开发工具包,其包含Java的运行环境和工具。JDK的原理会在4.1.4小节“后端应用程序的工作原理”中具体介绍,这里只需要关注安装步骤即可。
1.在Windows系统中安装Tomcat
在Windows系统中安装Tomcat的操作步骤如下:
(1)从Oracle JDK官网
(
https://www.oracle.com/java/technologies/javase-downloads.html)上下载JDK,一般选择最新的LTS(Long Time Support,长期支持)版本。官网上的版本划分如图4.1所示,这里选择JDK 11(图4.1中的Java SE 11)作为安装版本,打开下载链接后选择Windows版本的JDK安装包下载即可。
注意:一些项目出于JDK升级成本或稳定性的考虑,会选用旧版本的JDK,如JDK 8。如果项目的JDK版本已经选定了,那么即使是开发环境,也应该选用对应的版本。另外,JDK一般指的是Oracle的JDK。除此之外还有其他的JDK,如Open JDK等。2019年后发布的Oracle JDK版本开始收费(商业用途),而Open JDK是完全免费的。
(2)双击下载的JDK安装文件安装JDK。安装完毕后需要配置环境变量才能让JDK生效。打开“系统属性”对话框,单击“环境变量”按钮弹出“环境变量”对话框,如图4.2所示。
打开“环境变量”对话框后,在“系统变量”栏中添加JAVA_HOME变量,如图4.3所示。其中,变量的值为JDK的安装目录,JAVA_HOME这个变量名是固定的,很多第三方软件都会根据JAVA_HOME寻找JDK的路径。
添加完JAVA_HOME变量后编辑Path变量,把%JAVA_HOME%\bin添加进去,如图4.4所示。值得一提的是,Path变量的设置是为了让Windows系统找到JDK的位置,设置Path环境变量后,就可以在任何目录下执行javac/java等命令了。
而JAVA_HOME的设置不仅是为了在Path变量设置时显得简洁,更重要的是让一些软件找到JDK的位置,如Tomcat便是通过JAVA_HOME环境变量找到JDK位置的(默认情况)。
配置完环境变量之后,就可以检验JDK是否安装完成了。打开一个新的CMD窗口(旧的CMD窗口不识别新设置的环境变量),执行java-version命令,如果命令执行后显示当前的JDK版本的话,即说明JDK安装成功,如图4.5所示。
注意:如果之前安装了其他版本的JDK,需要先卸载原有的JDK再安装新的JDK,卸载JDK需要在“应用和功能”中卸载,这样才能把原有的JDK卸载干净。另外,这里的环境变量配置是以JDK 11为例的,其他版本的JDK在环境变量配置时可能会有所区别。
(3)从Tomcat官网(
https://tomcat.apache.org/)上下载Tomcat,这里选择最新的稳定版本。官网上的版本划分如图4.6所示,这里下载适用于Windows系统的Tomcat 9。
注意:很多项目都选用Tomcat的旧版本(如稳定性较好的8.5),这是因为Web应用服务器最重要的就是稳定性,旧版本的稳定性已经经过了长时间的验证,而新版本虽然带来很多新的功能,但是新功能也可能会给Tomcat带来不稳定的情况,况且这些新功能很多情况下都是不必要的。
(4)下载完Tomcat压缩包后,将其解压,目录结构如图4.7所示。其中,webapps/ROOT文件夹默认存放后端应用程序,conf文件夹存放的是Tomcat相关的配置文件,logs文件夹存放的是Tomcat运行日志。
(5)修改Tomcat配置。Tomcat的配置文件是conf/server.xml,默认的配置文件如代码4.1所示。
代码4.1 默认的Tomcat配置
…
<Connector port="8080" protocol="HTTP/1.1" <!-- 8080为HTTP请求端口 -->
connectionTimeout="20000" <!-- 连接超时时间 -->
redirectPort="8443" /> <!-- 8443为HTTPS重定向端口 -->
…
<Host
name="localhost"
appBase="webapps"
unpackWARs="true"
autoDeploy="true">
…
</Host>
...
(6)添加Tomcat环境变量。打开“环境变量”对话框,在“系统变量”栏中添加CATALINA_HOME变量,如图4.8所示,其中,变量的值为Tomcat的安装目录,CATALINA_HOME这个变量名是固定的。
说明:Tomcat实际上是Apache的扩展,其主要由3个部分组成,即Web容器、Catalina和JSP容器。Web容器用于处理一些静态网页资源;Catalina用于运行Java程序;JSP容器用于处理JSP动态网页。值得一提的是,Tomcat虽然能处理静态网页资源,但是其处理能力没有Web服务器软件(如Apache和Nginx)高效,所以Tomcat一般只作为Java后端应用程序或JSP的运行环境。
(7)启动Tomcat。进入图4.7所示的bin文件夹,双击startup.bat文件,正常情况下会出现如图4.9所示的窗口,此窗口无须关闭,关闭窗口即为关闭Tomcat。如果窗口一闪而过,则表示Tomcat启动失败,可以查看图4.7所示的logs文件夹中的catalina.log日志。如果保持默认Tomcat配置的话,在浏览器的地址栏中输入http://localhost:8080会打开Tomcat的默认网页,如图4.10所示。
注意:Tomcat除了上述启动方式以外,还可以通过“Windows服务”的形式启动,即Tomcat的启动无须人工执行,计算机会自动在后台进程中执行Tomcat程序,并且没有如图4.9所示的窗口。这种启动方式一般是在Windows作为服务器系统的情况下,而在作为开发时使用的Windows系统中,不建议以Windows服务的形式启动Tomcat,这样会与IDE(IDE指的是开发工具,如Eclipse、VS Code等)调试后端应用程序时产生冲突。
(8)如果非本机的浏览器想要访问Tomcat服务,则需要设置防火墙开启端口权限。对于大型网站而言,服务器系统一般为Linux系统,Windows的Tomcat一般只是为了本地开发使用,非本机浏览器访问的场景比较少,因此防火墙的设置不是必要的操作。如果开发时有非本机访问的情况,可以暂时关闭Windows防火墙。
2.在CentOS系统中安装Tomcat
在CentOS系统中安装Tomcat时,推荐通过下载指定版本的方式进行安装。
需要注意的是,开发环境和生产环境的Tomcat版本最好保持一致,这样能避免一些由于Tomcat版本差异而引发的问题。
注意:这里有别于3.1.1小节中推荐的yum安装,这是因为Web服务器(Apache、Nginx等)只是负责静态资源处理,版本差异对稳定性不会产生太大的影响,而Web应用服务器软件(Tomcat等)是作为后端应用程序的容器,版本差异对后端应用程序的稳定性影响较大,因此Web应用服务器软件需要指定版本进行安装。
下面是CentOS系统中安装Tomcat的具体操作步骤。
(1)从Oracle JDK官网
(
https://www.oracle.com/java/technologies/javase-downloads.html)上下载JDK,一般选择最新的LTS(Long Time Support,长期支持)版本。官网上的版本划分如图4.1所示,这里选择JDK 11(图4.1中的Java SE 11)作为安装版本。单击下载链接后会进入详细的下载页面,如图4.11所示。选择对应系统的安装包安装起来会方便一些,但是为了安装步骤的通用性,我们选择通用的Linux压缩包作为下载对象。
(2)安装JDK。下载完通用的Linux系统压缩包后,把JDK压缩包解压到任意目录下(这里推荐/usr/local目录),解压命令如代码4.2所示,其中,
jdk-11.0.6_linux-x64_bin.tar.gz是压缩包名,/usr/local/是解压的目标路径。解压后的目录结构如图4.12所示。
代码4.2 解压缩JDK压缩包
sudo tar -xvf jdk-11.0.6_linux-x64_bin.tar.gz -C /usr/local/
解压完毕后,需要配置环境变量才能让JDK生效,配置命令如代码4.3所示。其中,/usr/local/jdk-11.0.6为JDK的路径。
代码4.3 配置JDK环境变量
sudo echo 'export JAVA_HOME=/usr/local/jdk-11.0.6' >> /etc/profile
sudo echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile
sudo source /etc/profile
配置完JDK的环境变量后,输入java-version检验JDK是否安装成功,正常情况下会显示当前的JDK版本,如图4.13所示。
(3)从Tomcat官网(
https://tomcat.apache.org/)上下载Tomcat,这里选择最新的稳定版本。官网上的版本划分如图4.14所示,这里下载适用于Linux系统的Tomcat 9。
注意:前面在Windows系统中安装Tomcat时提到,Tomcat的版本不一定要选用最新的稳定版本,因为Web应用服务器软件最重要的是稳定性,而旧版本由于具有更长的稳定性检验时间,所以现在很多公司都在继续使用稳定的Tomcat 8.5或Tomcat 7,而放弃使用新的Tomcat 9或Tomcat 10。
(4)下载完Tomcat压缩包后,把Tomcat压缩包解压到任意目录下(这里推荐/usr/local目录),解压命令如代码4.4所示。其中,
apache-tomcat-9.0.33.tar.gz是压缩包名,/usr/local/是解压的目标路径。解压后的目录结构如图4.15所示,其中,webapps文件夹默认用来存放后端应用程序,conf文件夹存放的是Tomcat相关配置文件,logs文件夹存放的是Tomcat运行日志。
代码4.4 解压缩Tomcat压缩包
sudo tar -xvf apache-tomcat-9.0.33.tar.gz -C /usr/local/
(5)修改Tomcat配置。Tomcat的配置文件是conf/server.xml,默认的配置文件代码如代码4.5所示。
代码4.5 默认的Tomcat配置
…
<Connector port="8080" protocol="HTTP/1.1" <!-- 8080为HTTP请求端口 -->
connectionTimeout="20000" <!-- 连接超时时间 -->
redirectPort="8443" /> <!-- 8443为HTTPS重定向端口 -->
…
<Host
name="localhost"
appBase="webapps"
unpackWARs="true"
autoDeploy="true">
…
</Host>
…
(6)添加Tomcat环境变量,配置命令如代码4.6所示,其中,CATALINA_HOME变量名是固定的,
/usr/local/apache-tomcat-9.0.33是Tomcat的路径。
代码4.6 配置Tomcat环境变量
sudo echo 'export CATALINA_HOME=/usr/local/apache-tomcat-9.0.33' >> /etc/
profile
sudo echo 'export PATH=$PATH:$CATALINA_HOME/bin' >> /etc/profile
sudo source /etc/profile
(7)配置自动启动Tomcat服务。新建
/usr/lib/systemd/system/tomcat.service文件,在文件内写入如代码4.7所示的内容,其中,
/usr/local/apache-tomcat-9.0.33/bin/startup.sh和
/usr/local/apache-tomcat-9.0.33/bin/shutdown.sh需要根据实际的目录路径而定。
代码4.7 配置自动启动Tomcat服务
[Unit]
Description=Tomcat
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=oneshot
ExecStart=/usr/local/apache-tomcat-9.0.33/bin/startup.sh
ExecStop=/usr/local/apache-tomcat-9.0.33/bin/shutdown.sh
ExecReload=/bin/kill -s HUP $MAINPID
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
创建完文件后,设置开机启动命令、启动服务命令和停止服务命令,如代码4.8所示。其中,tomcat.service为刚创建的文件名。
代码4.8 配置开机启动命令等
sudo systemctl enable tomcat.service #设置开机启动命令
sudo systemctl start tomcat.service #启动服务命令
sudo systemctl stop tomcat.service #停止服务命令
(8)配置防火墙。一般完成步骤(4)就能启动Tomcat了,如果防火墙是开启状态的话,则非本机的浏览器是不能访问Tomcat的,因此这里需要配置防火墙。配置防火墙的命令如代码4.9所示,并且命令需要顺序执行。
代码4.9 配置防火墙的命令
#打开端口,8080为Tomcat端口
sudo firewall-cmd --add-port=8080/tcp –permanent
sudo firewall-cmd --reload #重启防火墙
防火墙配置成功后,非本机浏览器便可以访问Tomcat默认网页了,如图4.16所示。其中,192.168.3.54为服务器的IP地址,8080为Tomcat的端口。