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.首先需要以下两个包

[[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

时间: 2024-10-03 00:05:08

Tomcat部署(原理详解与部署实操)的相关文章

LVS原理详解以及部署

linux virtual server简称LVS,Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU.I/O处理能力很快会成为瓶颈.由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题.为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要.Linux 虚拟服务器(Linux Virtual Servers,LVS) 使用负载均衡技术将多台服务器组成一个虚拟服务器.它为适

Tomcat服务器原理详解

[目录]本文主要讲解Tomcat启动和部署webapp时的原理和过程,以及其使用的配置文件的详解.主要有三大部分: 第一部分.Tomcat的简介和启动过程 第二部分.Tomcat部署webapp 第三部分.Tomcat处理一个http请求的过程 [简介] Tomcat依赖<CATALINA_HOME>/conf/server.xml这个配置文件启动server(一个Tomcat实例,核心就是启动容器Catalina). Tomcat部署Webapp时,依赖context.xml和web.xml

[转]Tomcat工作原理详解

一.Tomcat背景 自从JSP发布之后,推出了各式各样的JSP引擎.Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持Servlet, 这样Tomcat就诞生了.Tomcat是jakarta项目中的一个重要的子项目,其被JavaWorld杂志的编辑选为2001年度最具创新的java产品,同时它又是sun公司官方推荐的servlet和jsp容器,因此其越来越多的受到软件公司和开发人员的喜爱.s

LVS原理详解(3种工作模式及8种调度算法)

2017年1月12日, 星期四 LVS原理详解(3种工作模式及8种调度算法) LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法) 作者:woshiliwentong  发布日期:2014-01-06 09:31:20 一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式.集

Tomcat启动过程原理详解 -- 非常的报错:涉及了2个web.xml等文件的加载流程

Tomcat启动过程原理详解 发表于: Tomcat, Web Server, 旧文存档 | 作者: 谋万世全局者 标签: Tomcat,原理,启动过程,详解 基于Java的Web 应用程序是 servlet.JSP 页面.静态页面.类和其他资源的集合,它们可以用标准方式打包,并运行在来自多个供应商的多个容器(诸如tomcat).Web 应用程序存在于结构化层次结构的目录中,该层次结构是由 Java Servlet 规范定义的.Web 应用程序的根目录包含直接存储或存储在子文件夹中的所有公共资源

Tomcat 端口配置,及原理详解

Tomcat 端口配置,及原理详解 作者:Ezitai 如果想深入了解tomcat的各个端口及配置,建议通读文章,对初学者十分有利,整理自网络. 1 tomcat 文件配置详细说明 tomcat服务器需配置三个端口才能启动,安装时默认启用了这三个端口,当要运行多个tomcat服务时需要修改这三个端口,不能相同.端口配置路径为tomcat\ conf\service.xml 修改Shutdown端口(默认为8005端口) <Server port="8005" shutdown=&

图文详解远程部署ASP.NET MVC 5项目

原文:图文详解远程部署ASP.NET MVC 5项目 话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手,还望大虾勿喷,有什么问题,还望高手指点. 一.本文实验环境: Windows Server 2012 R2 SQL Server 2012 Express Visual Studio 2013 项目为:ASP.NET MVC 5.0,使用的是L

t持久化与集群部署开发详解

Quartz.net持久化与集群部署开发详解 序言 我前边有几篇文章有介绍过quartz的基本使用语法与类库.但是他的执行计划都是被写在本地的xml文件中.无法做集群部署,我让它看起来脆弱不堪,那是我的罪过. 但是quart.net是经过许多大项目的锤炼,走到啦今天,支持集群高可用的开发方案那是一定的,今天我就给小结下我的quartz.net开发升级过程. Quartz.net的数据库表结构 如果支持集群与持久化,单靠本机的内存和xml来保存计算任务调度的各种状态值,可想而知,是困难的.所以支持

免费NAC云部署应用详解

免费NAC云部署应用详解 结合FreeAC论坛发布的免费版NAC,无线运营中亦可以采用NAC设备在本地进行部署无线网络.同时与NAC配套的AC,认证/计费系统,PORTAL都可以采用云部署,其特点是:1.AC可以使用NSWMP协议部署与云端:2.认证/计费可以使用RADIUS或HTTP,不过使用RADIUS需要NAS端(NAS不是NAC)有公网IP,为了提高适应性NAC同时支持HTTP认证(蓝海卓越HTTP认证协议):3.PORTAL遵循为蓝海卓越PORTAL协议,其特点是完全扁平化部署,虚拟主