欢迎光临
我们一直在努力

Tomcat部署(原理详解与部署实操)

Tomcat部署

一、前言

​ 之前的文章讲述的是web中两大服务器软件:Apache和Nginx,在这,对此我们先做一个简单的小结。

1.Apache和Nginx的特点与性能

​ Apache支持支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。但是其配置相对复杂,自身不支持动态页面。

​ Nginx,轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。其特点是占有内存少,并发能力强,易于开发,部署方便。Nginx 支持多语言通用服务器。但是,Nginx 只适合静态和反向代理。其优点在于支持:负载均衡、反向代理、处理静态文件。Nginx 处理静态请求的速度高于Apache(3倍以上)。

2.Apache和Nginx的区别

Apache是同步多进程模型,一个连接对应一个进程,而nginx是异步的,多个连接(万级别)可以对应一个进程。
nginx轻量级,抗并发,处理静态文件好
Apache超稳定,对PHP支持比较简单,nginx需要配合其他后端用,处理动态请求有优势,建议使用前端nginx抗并发,后端apache集群,配合起来会更好。

二、Tomcat概念

1.Tomcat 是什么?

​ Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器。

​ Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。

2.为什么需要Tomcat?

​ 对于学习了或者正在学习Java的朋友对Tomcat应该是比较熟悉的了。

​ 最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

​ 其优点在于它是一个动态解析容器,处理动态请求,是编译JSP/Servlet的容器,其缺点也十分明显,只能做Java服务器,并且在并发量上有限制。

​ 至于更加深层的原因,需要有一定的架构思想才能深入理解和总结归纳Apache、Nginx和Tomcat的区别于联系。本文核心是针对初学者而言,主要讲解Tomcat的部署操作流程,因此,更深的原因在这里就不再赘述了,但是我们一定要知道“无论什么,存在的就是合理的,而我们所要做的便是透过现象看本质!”

三、Tomcat的核心组件

Tomcat 是 Apache 下的一个子项目,它具备 Web 服务器的所有功能,不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范 的 Java 代码 Servlet,同时将执行的结果以 HTML 代码的形式写回客户端。

Tomcat的三大核心组件:Web容器、Servlet容器以及JSP容器

  1. Web容器:完成Web服务器的功能;
  2. Servlet容器:名字为catalina,用于处理Servlet代码;
  3. JSP容器:用于将JSP动态网页翻译成Servlet代码。

四、Tomcat处理请求过程

1) 请求被发送到本机端口 8080,被在那里侦听的 Coyote HTTP/11.1 Connector(连接器) 获得。

2) Connector 把该请求交给它所在的 Service 的 Engine(引擎) 来处理,并等待来自 Engine的回应。

3) Engine 获得请求 localhost/yy/index.JSP,匹配它所拥有的所有虚拟主机 Host;

​ Engine 匹配到名为 localhost 的 Host。即使匹配不到也把请求交给该 Host 处理, 因为该 Host 被定义为该 Engine 的默认主机。

4) localhost Host 获得请求/yy/index.JSP,匹配它所拥有的所有 Context;

​ Host 匹配到路径为/yy 的 Context。如果匹配不到,就把该请求交给路径名为“”的 Context 去处理。

5) path=”/yy”的 Context 获得请求/index.JSP,在它的 mapping table 中寻找对应的 Servlet。

​ Context 匹配到 URL PATTERN 为*.JSP 的 Servlet,对应于 JSPServlet 类。

6) 构造 HttpServletRequest 对象和 HttpServletResponse 对象, 作为参数调用JSPServlet 的 doGet()或 doPost()方法。

7) Context 把执行完了之后的 HttpServletResponse 对象返回给 Host。

8) Host 把 HttpServletResponse 对象返回给 Engine。

9) Engine 把 HttpServletResponse 对象返回给 Connector。

10) Connector 把 HttpServletResponse 对象返回给客户 browser。

或许看了上面的过程,感觉实在是过于复杂,下面给出具体的流程图,大家可以根据流程图进行逻辑上的理解:

connector连接器和container容器

​ Connector 用于接收请求并将请求封装成Request 和Response 来具体处理,(最底层是使用Socket 来进行连接的)其中 Request 和Response 是按照HTTP 协议来封装的,所以Connector 同时实现了TCP/IP 协议和HTTP 协议, Request 和Response 封装完后交给Container 进行处理,Container 即Servlet 的容器, Container 处理完之后返回给Connector,最后Connector 使用Socket 将处理结果返回给客户端,这样整个请求就处理完了,具体请求过程如上图所示。

​ 而Container 则是Tomcat 中容器的接口,通常使用的Servlet 就封装在其子接口Wrapper 中。(Container 一共有4 个子接口Engine 、Host 、Context 、Wrapper 和一个默认实现类ContainerBase,每个子接口都是一个容器,这4 个子容器都有一个对应的StandardXXX 实现类,并且这些实现类都继承ContainerBase 类。另外Container 还继承Lifecycle 接口,而且ContainerBase 间接继承LifecycleBase,所以Engine 、Host 、Context 、Wrapper 4 个子容器都符合前面讲过的Tomcat生命周期管理模式。)

五、Tomcat部署操作流程

所需环境:

  • 系统版本:Centos7
  • Tomcat版本:9.0.8
  • jdk版本:1.8.0_201
  • 服务器ip地址:192.168.68.145

部署具体步骤:

1.首先需要以下两个包

[root@localhost tomcat]# ls
apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm

软件包链接:https://pan.baidu.com/s/1q9igHqlkIVJtqRS8zbuibQ
提取码:xzaj

2.安装jdk

[root@localhost tomcat]# rpm -ivh jdk-8u201-linux-x64.rpm 
警告:jdk-8u201-linux-x64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID ec551f03: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:jdk1.8-2000:1.8.0_201-fcs        ################################# [100%]
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...
[root@localhost tomcat]# cd /usr/java/
[root@localhost java]# ls
default  jdk1.8.0_201-amd64  latest
[root@localhost java]# cd jdk1.8.0_201-amd64/
[root@localhost jdk1.8.0_201-amd64]# ls
bin             lib          src.zip
COPYRIGHT       LICENSE      THIRDPARTYLICENSEREADME-JAVAFX.txt
include         man          THIRDPARTYLICENSEREADME.txt
javafx-src.zip  README.html
jre             release

bin/:命令文件存放目录

jre/:jvm的虚拟机存放位置

lib/:函数库目录

src.zip/:源码压缩包目录

3.设置环境变量(系统环境变量/etc/profile)

3.1查看当前路径,查看jdk原版本
[root@localhost jdk1.8.0_201-amd64]# pwd
/usr/java/jdk1.8.0_201-amd64
[root@localhost jdk1.8.0_201-amd64]# java -version            #简化版jdk原本就集成在Centos7中
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
[root@localhost jdk1.8.0_201-amd64]# 
3.2设置环境变量
[root@localhost jdk1.8.0_201-amd64]# vim /etc/profile         
[root@localhost jdk1.8.0_201-amd64]# source /etc/profile 
[root@localhost jdk1.8.0_201-amd64]# tail -3 /etc/profile     #添加的内容

export JAVA_NAME=/usr/java/jdk1.8.0_201-amd64         #工作路径
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar   #类文件的位置
export PATH=$JAVA_NAME/bin:$PATH                      #命令文件
[root@localhost jdk1.8.0_201-amd64]# java      #证明source成功
java            javafxpackager  javapackager    javaws.itweb
javac           javah           java-rmi.cgi    
javadoc         javap           javaws          
[root@localhost jdk1.8.0_201-amd64]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

[root@localhost jdk1.8.0_201-amd64]# 

4.安装Tomcat

[root@localhost tomcat]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm
[root@localhost tomcat]# tar zxf apache-tomcat-9.0.16.tar.gz -C /opt
[root@localhost tomcat]# cd /opt/
[root@localhost opt]# ls
apache-tomcat-9.0.16  rh
[root@localhost opt]# mv apache-tomcat-9.0.16/ tomcat
[root@localhost opt]# ls
rh  tomcat
[root@localhost opt]# cd tomcat/
[root@localhost tomcat]# ls
bin           CONTRIBUTING.md  logs       RELEASE-NOTES  webapps
BUILDING.txt  lib              NOTICE     RUNNING.txt    work
conf          LICENSE          README.md  temp

其中 webapps是站点,

5.优化启动关闭脚本,开启关闭操作

[root@localhost tomcat]# cd bin/
[root@localhost bin]# ls
bootstrap.jar                 makebase.sh
catalina.bat                  setclasspath.bat
catalina.sh                   setclasspath.sh
catalina-tasks.xml            shutdown.bat
ciphers.bat                   shutdown.sh
ciphers.sh                    startup.bat
commons-daemon.jar            startup.sh
commons-daemon-native.tar.gz  tomcat-juli.jar
configtest.bat                tomcat-native.tar.gz
configtest.sh                 tool-wrapper.bat
daemon.sh                     tool-wrapper.sh
digest.bat                    version.bat
digest.sh                     version.sh
makebase.bat
[root@localhost bin]# ln -s /opt/tomcat/bin/startup.sh /usr/bin
[root@localhost bin]# ln -s /opt/tomcat/bin/shutdown.sh /usr/bin[root@localhost bin]# systemctl stop firewalld.service 
[root@localhost bin]# setenforce 0
[root@localhost bin]# startup.sh  #开启服务
Using CATALINA_BASE:   /opt/tomcat
Using CATALINA_HOME:   /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# netstat -antp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      47064/java
[root@localhost bin]# shutdown.sh 
Using CATALINA_BASE:   /opt/tomcat
Using CATALINA_HOME:   /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
[root@localhost bin]# netstat -antp | grep 8080
tcp6       0      0 ::1:39678               ::1:8080                TIME_WAIT   -                   

6.测试验证

当我们开启Tomcat服务的时候,可以在浏览器中使用“IP地址:8080”进行访问,如下图所示

六、总结

​ 本文主要结合之前的Apache与Nginx,将二者进行简单的对比,归纳,从而引出Tomcat应用服务器,讲述了其概念、其自身的特性与三大核心组件:三个容器(Web、JSP、Servlet),接着利用一个简单的流程图详细讲述了Tomcat处理请求过程,最后给出如何安装、部署、测试Tomcat服务器,谢谢您的阅读!

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。