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] 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 服务器, 谢谢您的阅读!
Tomcat 部署(原理详解与部署实操)
来源: http://www.bubuko.com/infodetail-3359770.html