Tomcat是一个免费的,开放源代码的Web应用服务器,是Apache软件基金会项目中的一个核心项目,由Apache ,Sun和一些公司以及个人共同开发而成,深受Java爱好者的喜爱,是一款比较流行的web应用服务器。
Tomcat由一系列的组件构成,其中核心的组件有三个:

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

因此Tomcat是web应用服务器,也是一个Servlet/JSP容器。Tomcat作为 Servlet容器,负责处理客户请求,把请求传送给servlet,并将servlet的响应传送回给客户。

(一)web容器

web容器可以简单的和web服务器视为同一种东西,它提供web服务的软件或主机,返回服务端的静态文件,即用户通过浏览器向web服务器发送HTTP请求,web服务器解析HTTP请求将请求路径的文件返回给浏览器,浏览器再将文件渲染给用户查看。
其作用简单概括为:

  • 管理和布置web应用。
  • 响应用户对静态页面或图片的请求。
  • 同时将动态请求委托给其他程序(Servlet容器、CGI等等技术)

如果浏览器中请求的是动态资源的话,web服务器就无法处理了。所以就开发了Server Applet(Servlet)来对动态请求进行处理返回动态资源。

(二)servlet

Servlet 是 Java Servlet 的简称,可以理解为是一个服务连接器,是用Java编写的服务器端程序,具有独立于平台和协议的特性,简单的理解: servlet就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。

通常在一个web应用中会有非常多的Servlet,如果让开发人员自己手动来对如此多的Servlet手动管理它们的生命周期,业务逻辑,通信方式,将大大的增加研发人员的工作量。

所以Tomcat实现了一套叫做Servlet容器的东西来统一加载和管理Servlet。

这样一来HTTP服务器不直接跟servlet打交道,而是把请求交给Servlet容器去处理,Servlet容器会将请求转发到具体的Servlet,如果这个Servlet还没创建,就加载并实例化这个Servlet,然后调用这个Servlet的接口方法。

因此Servlet接口其实是Servlet容器跟具体业务类之间的接口,这样做的话就达到了HTTP服务器与业务类解耦的目的,简化了开发过程。
其作用简单概括为:

  • 管理业务类(Servlet)

    • 负责加载类、实例化和初始化Servlet
    • 调用Servlet的service方法提供服务
    • 管理Servlet实例的垃圾回收
    • 管理Servlet之间的共同资源(servletContext)
  • 处理动态请求
    • 解析包装请求
    • 调用某个Servlet
    • 将Servlet的执行结果返回给请求端
  • 多线程
    • 自动为它所接收的每个Servlet请求创建一个新的java线程
    • 但是也会出现线程安全问题
  • 实现简便安全
    • 使用xml部署描述文件来配置和修改安全性
  • JSP支持
    • 负责将jsp代码翻译为真正的java代码
  • 管理通信
    • 负责管理servlet与web服务器之间的通信

(三)JSP

JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用JSP 标签在HTML,网页中插入Java代码。标签通常以 <% 开头,以 %> 结束。JSP是一种Java servlet,主要用于实现Java web 应用程序的用户界面部分。

JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

(四) Tomcat 其他组件

Tomcat的核心功能有两个,分别是负责接收和反馈外部请求的连接器Connector,和负责处理请求的容器Container:其中连接器和容器相辅相成,一起构成了基本的 web服务Service。每个Tomcat服务器可以管理多个Service。各Service 之间相互独立。

Service:对外提供的web服务。主要包含Connector和 Container两个核心组件,以及其他功能组件。

1 Connector

Connector: 负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。

2 Container

每个Service 会包含一个Container容器。Container:负责对内处理业务逻辑。其内部由 Engine、Host、Context和wrapper 四个容器组成,用于管理和调用Servlet相关逻辑,其作用分别是:

  • Engine:引擎,用来管理多个虚拟主机,一个Service最多只能有一个Engine。

  • Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;

  • Context:代表一个 web 应用,包含多个Servlet封装器;

  • wrapper:封装器,容器的最底层。每一Wrapper封装着一个Servlet,负责对象实例的创建、执行和销毁功能。

Engine、Host、Context和 wrapper,这四个容器之间属于父子关系。容器由一个引擎管理多个虚拟主机。每个虚拟主机可以管理多个web应用。每个web应用会有多个Servlet封装器。

(五)Tomcat请求过程

  1. 用户在浏览器中输入网址,请求被发送到本机端口8080,被在那里监听的 Connector获得。
  2. Connector 把该请求交给它所在的Service 的 Engine (Container)来处理,并等待Engine的回应。
  3. 请求在Engine、Host、Context和Wwrapper 这四个容器之间层层调用,最后在Servlet 中执行对应的业务逻辑、数据存储等。
  4. 执行完之后的请求响应在Context、Host、Engine容器之间层层返回,最后返回给Connector,并通过Connector 返回给客户端。

(二)Tomcat安装

(一)Tomcat 详细介绍相关推荐

  1. Tomcat详细介绍和使用总结

    文章目录 Tomcat 介绍 Tomcat作为Servlet容器的基本功能 Tomcat的组成结构 Tomcat的工作模式 Tomcat 版本 Tomcat 安装和配置 安装 配置 启动与关闭 Tom ...

  2. tomcat详细介绍

    tomcat是java语言编写的软件 JVM是java虚拟机的缩写 java虚拟机本质就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令. java语言的可移植性正是建立在j ...

  3. tomcat的服务器目录在哪个文件夹,Tomcat目录结构详细介绍

    打开tomcat的解压之后的目录可以看到如下的目录结构: 1.Tomcat的bin目录: bin目录主要是用来存放tomcat的命令,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以. ...

  4. Hadoop生态系统的详细介绍

    hadoop生态系统的详细介绍 简介 Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算.今 ...

  5. Dockerfile 文件结构、docker镜像构建过程详细介绍

    [Docker那些事]系列文章 Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT指令的区别 构建Docker镜像指南,含实战 ...

  6. chromedriver放在哪个目录下_python | Linux各目录及每个目录的详细介绍 - MR_黄Python之路...

    [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里. /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录,是用户主目录的基点 ...

  7. tomcat详细日志配置

    tomcat详细日志配置 在server.xml里的<host>标签下加上 <Valve className="org.apache.catalina.valves.Acc ...

  8. Cookie和Session的详细介绍和使用规范

           Cookie和Session的详细介绍和使用规范 Cookie的由来(浏览器端的会话技术--保存数据技术) Cookie的需求分析 场景: 现象:进入淘宝的登陆页面,显示了我上次登录的用 ...

  9. hadoop生态系统的详细介绍-详细一点

    前提 日常喜欢看一些微信分享的好文,总结下来,可以作为过滤器吧(节约更多人的时间!),在这里引用的是别人的文章!对原文的作者表示感谢!确实写的很好! hadoop生态系统的详细介绍 简介 Hadoop ...

最新文章

  1. checkbox管理
  2. 使用named_mutex实现读写锁,实现进程之间读共享写独占
  3. [原]逆向iOS SDK -- _UIImageAtPath 的实现(SDK 5.1)
  4. 景观连接度指数怎么算都是0的解决方案
  5. vue根据条件显示字段
  6. 华为无盘服务器,无盘服务器操作系统
  7. CentOS 7.5 安装Zabbix4.4.4和Grafana6.4.4监控系统安装
  8. NRF24L01入门总结
  9. 现在有什么好用的切换ip工具吗?
  10. android浏览器实现收藏功能,Lua布局fusionapp 收藏功能与历史记录实现
  11. 十年育林,百度NLP已枝繁叶茂
  12. STM32CubeMX和STM32CubeIDE组合,定义STM32开发新方式
  13. 解决了.Net 2003“试图调试项目时发生错误”的问题
  14. #超全#行人重识别数据集整理,附下载链接和介绍
  15. 成功的背后--原CSDN国服排名第一大神逆袭之路
  16. eclipse jee配置tomcat
  17. 降调软件测试自学,普通话测试及变调.ppt
  18. 在线教育陷入停滞期 内容不力难盈利
  19. 【动态规划】股票买入卖出点计算
  20. 剑指offer笔记(九)栈和队列

热门文章

  1. 四大组件之Service(一)-双子座的Service-Start Service与Bind Service
  2. java根据汉字获取拼音的方法
  3. STM32F1与STM32CubeIDE编程实例-设备驱动-EEPROM-AT24C256驱动
  4. java身份证号码校验工具类
  5. spacevector=[] matlab,向量空间模型(vectorspacemodel)
  6. 会议笔记_一种带时间约束的影响力最大化算法
  7. 生产质量分析方案,实现车企“质量”和“销量”共赢!
  8. 酷比魔方i7手写版linux网卡驱动,酷比魔方i7手写板,Ubuntu 18.04,RTL8723BU wifi驱动安装...
  9. 2017回顾优米网历年定位
  10. stata15无法识别调用plus外部命令,报错:command XXX is unrecognized如何解决?