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容器
- Web容器:完成Web服务器的功能;
- Servlet容器:名字为catalina,用于处理Servlet代码;
- 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.首先需要以下两个包
[[email protected] tomcat]# ls
apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm
软件包链接:https://pan.baidu.com/s/1q9igHqlkIVJtqRS8zbuibQ
提取码:xzaj
2.安装jdk
[[email protected] 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...
[[email protected] tomcat]# cd /usr/java/
[[email protected] java]# ls
default jdk1.8.0_201-amd64 latest
[[email protected] java]# cd jdk1.8.0_201-amd64/
[[email protected] 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原版本
[[email protected] jdk1.8.0_201-amd64]# pwd
/usr/java/jdk1.8.0_201-amd64
[[email protected] 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)
[[email protected] jdk1.8.0_201-amd64]#
3.2设置环境变量
[[email protected] jdk1.8.0_201-amd64]# vim /etc/profile
[[email protected] jdk1.8.0_201-amd64]# source /etc/profile
[[email protected] 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 #命令文件
[[email protected] jdk1.8.0_201-amd64]# java #证明source成功
java javafxpackager javapackager javaws.itweb
javac javah java-rmi.cgi
javadoc javap javaws
[[email protected] 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)
[[email protected] jdk1.8.0_201-amd64]#
4.安装Tomcat
[[email protected] tomcat]# ls
apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm
[[email protected] tomcat]# tar zxf apache-tomcat-9.0.16.tar.gz -C /opt
[[email protected] tomcat]# cd /opt/
[[email protected] opt]# ls
apache-tomcat-9.0.16 rh
[[email protected] opt]# mv apache-tomcat-9.0.16/ tomcat
[[email protected] opt]# ls
rh tomcat
[[email protected] opt]# cd tomcat/
[[email protected]t tomcat]# ls
bin CONTRIBUTING.md logs RELEASE-NOTES webapps
BUILDING.txt lib NOTICE RUNNING.txt work
conf LICENSE README.md temp
其中 webapps是站点,
5.优化启动关闭脚本,开启关闭操作
[[email protected] tomcat]# cd bin/
[[email protected] 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
[[email protected] bin]# ln -s /opt/tomcat/bin/startup.sh /usr/bin
[[email protected] bin]# ln -s /opt/tomcat/bin/shutdown.sh /usr/bin[[email protected] bin]# systemctl stop firewalld.service
[[email protected] bin]# setenforce 0
[[email protected] 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.
[[email protected] bin]# netstat -antp | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 47064/java
[[email protected] 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
[[email protected] 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服务器,谢谢您的阅读!
原文地址:https://blog.51cto.com/14557673/2463421