Fork me on GitHub

Tomcat介绍

背景

目录

  • 背景
  • 第一部分 环境依赖
  • 第二部分 交互接口
  • 第三部分 任务提交
  • 参考文献及资料

#

第一部分 Tomcat的基础知识

1.1 Web 概念

1.1.1 软件架构

Web应用有两种架构:

  • C/S架构;QQ软件
  • B/S架构;各类网站

1.1.2 资源分类

  • 静态资源;

    所有用户访问后,返回的结果相同,称为静态资源。静态资源可以直接被浏览器解析。例如:html、css、js、图片文件等。

  • 动态资源;

    用户访问资源后,返回的结果不同,称为动态资源。动态资源被访问后,需要先转换成静态资源,然后再返回给浏览器,通过浏览器进行最后解析。例如:servlet/jsp、php、asp等

1.1.3 网络通讯

  • ip地址;ip地址作为用户在互联网上唯一标识。
  • 端口;端口是计算机中应用进程的唯一标识。
  • 通信协议;定义了数据传输的规则,例如:tcp/udp、http。

1.2 常见的Web服务器

1.2.1 概念

  • 服务器;安装服务器软件的计算机节点。
  • 服务器软件;接受用户的请求,处理请求和应答请求。在Web服务软件中,可以部署Web项目,用户可以通过浏览器进行访问项目。

1.2.2 常见的Web服务器软件

  • BEA WebLogic 是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。 BEA WebLogic Server拥有处理关键Web应用系统问题所需的性能、可扩展性和高可用性
  • Apache Apache 是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自”a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。
  • IIS 是英文Internet Information Server的缩写,译成中文就是”Internet信息服务”的意思。它是微软公司主推的服务器,最新的版本是Windows2008里面包含的IIS 7,IIS与Window Server完全集成在一起,因而用户能够利用Windows Server和NTFS(NT File System,NT的文件系统)内置的安全特性,建立强大,灵活而安全的Internet和Intranet站点。
  • WebSphere软件平台能够帮助客户在Web上创建自己的业务或将自己的业务扩展到Web上,为客户提供了一个可靠、可扩展、跨平台的解决方案。作为IBM电子商务应用框架的一个关键组成部分,WebSphere软件平台为客户提供了一个使其能够充分利用Internet的集成解决方案。
  • Tomcat是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器。Tomcat Server是根据servlet和JSP规范进行执行的,因此我们就可以说Tomcat Server也实行了Apache-Jakarta规范且比绝大多数商业应用软件服务器要好。

其中Apache和Tomcat是开源免费的。

1.3 Tomcat的历史

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为9.0.37

1.4 Tomcat安装

1.4.1 下载

可以在Tomcat官网下载安。官网地址为:http://tomcat.apache.org/

1.4.2 安装

ubuntu系统中下载安装介质:

1
root@deeplearning:/data/tomcat# wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.41/bin/apache-tomcat-9.0.41.tar.gz

解压:

1
root@deeplearning:/data/tomcat# tar -zxvf apache-tomcat-9.0.41.tar.gz

1.5 Tomcat 目录结构

目录结构如下:

目录及文件 说明
bin 用于存放 Tomcat的启动、停止等批处理脚本和Shell脚本
bin/startup. bat 用于在 Windows下启动 Tomcat
bin/startup.sh 用于在 Linux下启动 Tomcat
bin/shutdown. bat 用于在 Windows下停止 Tomcat
bin/shutdown.sh 用于在 Linux下停止 Tomcat
conf 用于存放 Tomcat的相关配置文件
conf/Catalina 用于存储针对每个虚拟机的 Context 配置
conf/context.xml 用于定义所有Web应用均需要加载的 Context 配置,如果Web应用指定了自己的context.xml,那么该文件的配置将被覆盖
conf/catalina.properties Tomcat环境变量配置
conf/catalina.policy 当 Tomcat在安全模式下运行时,此文件为默认的安全策略配置
conf/logging.properties Tomcat日志配置文件,可通过该文件修改 Tomcat日志级别以及日志路径等
conf/server.xml Tomcat服务器核心配置文件,用于配置 Tomcat的链接器、监听端口、处理请求的虚拟主机等。可以说,Tomcat主要根据该文件的配置信息创建服务器实例
conf/tomcat-users.xml 用于定义 Tomcat默认用户及角色映射信息,Tomcat的 Manager模块即用该文件中定义的用户进行安全认证
conf/web.xml Tomcat中所有应用默认的部署描述文件,主要定义了基础 Servlet和MIME映射。如果应用中不包含 web. xml,那么 Tomcat将使用此文件初始化部署描述,反之,Tomcat会在启动时将默认部署描述与自定义配置进行合并
lib Tomcat服务器依赖库目录,包含 Tomcat服务器运行环境依赖jar包
logs Tomcat默认的日志存放路径
webapps Tomcat默认的Web应用部署目录
work 存放Web应用JSP代码生成和编译后产生的class文件目录
temp 存放tomcat在运行过程中产生的临时文件

1.6 Tomcat启停

  • 启动

使用startup.sh脚本启动如下:

1
2
3
4
5
6
7
8
root@deeplearning:/data/tomcat/apache-tomcat-9.0.41/bin# ./startup.sh
Using CATALINA_BASE: /data/tomcat/apache-tomcat-9.0.41
Using CATALINA_HOME: /data/tomcat/apache-tomcat-9.0.41
Using CATALINA_TMPDIR: /data/tomcat/apache-tomcat-9.0.41/temp
Using JRE_HOME: /usr/lib/jvm/java-8-openjdk-amd64
Using CLASSPATH: /data/tomcat/apache-tomcat-9.0.41/bin/bootstrap.jar:/data/tomcat/apache-tomcat-9.0.41/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.

tomcat的默认监听端口为8080,这时候浏览器打开网址:http://ip:8080 ,显示出tomcat的网址。

  • 停止

使用shutdown.sh脚本停止如下:

1
2
3
4
5
6
7
root@deeplearning:/data/tomcat/apache-tomcat-9.0.41/bin# ./shutdown.sh
Using CATALINA_BASE: /data/tomcat/apache-tomcat-9.0.41
Using CATALINA_HOME: /data/tomcat/apache-tomcat-9.0.41
Using CATALINA_TMPDIR: /data/tomcat/apache-tomcat-9.0.41/temp
Using JRE_HOME: /usr/lib/jvm/java-8-openjdk-amd64
Using CLASSPATH: /data/tomcat/apache-tomcat-9.0.41/bin/bootstrap.jar:/data/tomcat/apache-tomcat-9.0.41/bin/tomcat-juli.jar
Using CATALINA_OPTS:

1.7 Tomcat 源码

在Tomcat官网可以下载源码压缩包,然后进行研读。

第二部分 Tomcat的架构

2.1 Http工作原理

Http协议是浏览器和服务器之间的数据传送协议,属于应用层协议。Http协议是基于TCP/IP协议来传递数据(html文件、图片、查询结构等)。Http协议不涉及数据包的传输,主要是规定客户端和服务端直接的通讯格式。

参考这篇文章:https://www.cnblogs.com/an-wen/p/11180076.html

主要过程为:

  1. 用户通过浏览器进行了一个操作,比如输入网址并回车,或者点击了链接,接着浏览器获取了这个事件。
  2. 浏览器向服务端发出TCP请求。
  3. 服务端程序接受到浏览器的连接请求,并经过了三次握手建立连接。
  4. 浏览器开始数据通信,将请求数据打包成一个http协议格式的数据包。
  5. 浏览器将数据包推入网络,数据包经过网络传输,最终到达服务端。
  6. 服务端程序拿到数据包后,使用http协议格式进行解包,获取客户端的请求。
  7. 服务端程序解析获得请求意图,比如提供静态文件等。
  8. 服务端程序将响应结果按照http协议格式进行打包。
  9. 服务器将响应结果的包推入网络,数据包经过网络传输最终到达浏览器程序。
  10. 浏览器拿到数据包后,同样以http协议格式进行解包,然后解析。
  11. 浏览器将响应内容展示在页面上。

2.2 Tomcat的整体架构

2.2.1 Http服务器请求处理

浏览器发给服务端的是一个http格式的请求,http服务器收到这个请求后,需要调用服务端程序来处理,所谓的服务端程序就是Java类,不同的请求需要由不同的Java类来处理。

两种方案:

方案一、Http服务直接和业务类交互

结构上紧耦合。

方案二、Servlet容器中间层

Http服务器不直接调用业务类,所有请求先发给Servlet容器。容器通过Servlet接口调用业务类,因此servlet接口和servlet容器的出现,达到了http服务器和业务类解耦的目的。servlet容器和servlet接口这一套规范称为Servlet规范。Tomcat按照这个规范要求实现了servlet容器,同时也具有http服务器的功能。作为java程序员。如果我们要实现新的业务功能,只需要实现一个servlet,并把它注册到Tomcat中,剩下的事情交给Tomcat帮助我们处理。

2.2.2 Servlet容器的工作流程

为了解耦,http服务器不直接调用servlet,而是把请求交给servlet容器处理。当客户端请求资源的时候,http服务器会用一个servletRequest对象把客户的请求封装起来,然后调用servlet容器的service方法。servlet容器拿到请求后,根据请求的URL和servlet映射关系,找到相应的servlet。在这个过程中如果servlet没有被加载,就用反射机制创建这个servlet,并调用servlet的init方法来完成初始化。接着调用servlet方法来处理请求,把servletResponse对象返回给http服务器,http服务器会把相应发送到客户端。

2.2.3 Tomcat整体架构

Tomcat整体架构主要是实现两个核心功能。

1、处理socket链接,负责网络字节流与Request和Response对象的转化

2、加载和管理servlet,以及具体处理Request请求。

Tomcat设计了两个核心组件:连接器(Connector)和容器(Container)来分别负责这两个功能。连接器负责对外交流,容器负责内部的处理。

2.3 连接器(Coyote)

2.3.1 架构介绍

2.3.2 IO模型与协议

2.3.3 连接器组件

2.3.4 源码解析

2.4 容器

2.5 Tomcat的启动流程

2.6 Tomcat请求处理流程

第三部分 Jasper

第四部分 Tomcat服务器配置

第五部分 Web应用配置

第六部分 JVM配置

第七部分 Tomcat集群

第八部分 Tomcat 安全

第九部分 Tomcat性能调优

第十部分 Tomcat 附加功能

参考文献及资料

1、 官网地址,链接:https://tomcat.apache.org/

0%