Tomcat介绍


一、Tomcat介绍

Apache Tomcat最早是由Sun开发的,在1999年被捐献给ASF(Apache 软件基金会 Apache Software Foundation),隶属于Jakarta(雅加达)项目,现在已经独立为一个顶级项目。因为Tomcat 技术先进、性能稳定,同时也是一个免费的开放源代码的Web 应用服务器,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,被很多企业普遍使用,也是开发和调试JSP程序的首选。成为目前比较流行的Web 应用服务器。

官方网站:http://tomcat.apache.org/

1、Tomcat 概念

  • Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。Sprint Boot 、 Sprint Cloud等Java开发框架,集成Tomcat
  • Tomcat是Java语言开发的,服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
  • Tomcat一般来说虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet [sərvlit] 和JSP容器,单独运行在后端
  • 目前Tomcat最新版本为11.0。
  • Java容器还有weblogic。

2、Tomcat的核心组件

Tomcat 由一系列的组件构成,其中核心的组件有三个:

  • Web 容器:完成 Web 服务器的功能。
  • Servlet [sərvlit] 服务程序容器:名字为 catalina,用于处理 Servlet [sərvlit] 代码。
  • JSP 容器:用于将 JSP 动态网页翻译成 Servlet [sərvlit] 代码。 java 程序 --- > servlet 代码 > Tomcat web容器 -- > web服务 --> 用户

3、Java Servlet 的概念

  • Java Servlet [sərvlit] 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求 和 HTTP 服务器上的数据库或应用程序之间的中间层。
  • 使用Servlet [sərvlit],可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。与CGI(公共网关接口)功能相类似。

4、JSP的概念

  • JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头,以%>结束。
  • JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。
  • JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

5、Tomcat顶层架构

  • Tomcat中最顶层的容器是Server,代表着整个服务器,一个Server可以包含至少一个Service,用于具体提供服务。 Service主要包含两个部分:Connector [kəˈnektər] 和Container是Tomcat的心脏就是这两个组件,这两个组件的作用:
    • Connector [kəˈnektər] 用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;
    • Container用于封装和管理Servlet [sərvlit],以及具体处理Request请求。
    • 一个Tomcat中只有一个Server,一个Server可以包含多个Service,一个Service只有一个Container,但是可以有多个Connector [kəˈnektər] s,因为一个服务可以有多个连接,如同时提供Http和Https链接,也可以提供向相同协议不同端口的连接。
    • 多个Connector [kəˈnektər] 和一个Container就形成了一个Service,有了Service就可以对外提供服务了,
  • Server控制整个Tomcat的生命周期,为Service提供生存环境,控制Service生命、掌握其生死大权。另外,上述的包含关系或者说是父子关系,都可以在tomcat的conf目录下的server .xml配置文件中看出。
  • server.xm1中定义会让Tomcat启动一个server实例(即一个JVM),它监听在8005端口以接收“SHUTDOWN”命令,如果接收到了就会关闭Tomcat。
  • 各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。

图片

6、Container 结构分析:

每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器:

1、Engine: 引擎,用来管理多个站点,一个Service最多只能有一个Engine;

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

3、Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;

4、Wrapper: 每一Wrapper封装着 一个Servlet [sərvlit];负责对象实例的创建、执行和销毁功能。

7、Tomcat请求过程

1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector [kəˈnektər] 获得;

2、Connector [kəˈnektər] 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;

3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet [sərvlit] 中执行对应的业务逻辑、数据存储等。

4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector [kəˈnektər] ,并通过 Connector [kəˈnektər] 返回给客户端。

tomcat的同类产品

  • Resin 服务器

Resin是Caucho公司的产品,速度非常快。可以显示动态内容,也可以显示静态内容,但是用户数量少,参考文档也少,使用起来不太方便,一旦涉及到相关文件和内容的更新,系统会自动重新部署并重启。

  • Jetty 服务器

Jetty是一个纯粹的基于Java的web服务器,也是一个开源项目。架构简单,速度快,修改简单,但是对java的支持不如tomcat全面,

  • WebLogic 服务器

WebLogic 是BEA公司的产品,可进一步细分为 WebLogic Server、WebLogic Enterprise 和 WebLogic Portal 等系列,其中 WebLogic Server 的功能特别强大。WebLogic 支持企业级的、多层次的和完全分布式的Web应用,并且服务器的配置简单、界面友好。对于那些正在寻求能够提供Java平台所拥有的一切应用服务器的用户来说,WebLogic是一个十分理想的选择。但是不开源且收费

JBoss、WebSphere

二、Apache nginx tomcat比较

Apache是用C写的; Nigix是用C写的; Tomcat是用Java写的。

Tomcat是Apache的拓展,更实质的说是Java应用服务器,用于处理JSP后台语言开发的应用,主要用于处理JSP动态网页。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器(主要用于解析servlet/JSP,同时具备http服务),单纯的Tomcat性能有限,在很多地方表现有欠缺,如活动连接支持、静态内容、大文件和HTTPS等,因此多数都是Apache+Tomcat+JavaSDK的集成。严格的来说,Apache/Nginx 应该叫做[HTTP Server]而Tomcat 则是一个「Application Server」,或者更准确的来说,是一个「Servlet/JSP」应用的容器(Ruby/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上)。

Apache

优点:模块多,功能全面,性能稳定,适合静态HTML

缺点:配置相对复杂,自身不支持动态页面

Nginx

优点:功能较多,负载均衡、反向代理等,速度比Apache快

缺点:轻量级web服务器,功能不如Apache全面

Tomcat

优点:能够处理动态请求,可以独立于Apache运行,支持JSP

缺点:对静态内容和大文件的支持有所欠缺