Tomcat深入解析(Tomcat看这一篇就够了)

Tomcat是什么

服务器分为JavaEE应用服务器和web容器(也就是web服务器。)
那么这两种服务器有什么区别呢?
JavaEE应用服务器是Java EE 规范的具体实现, 可以执行/驱动基于 JavaEE 平台开发的 web 项目。绝大部分的应用服务器都是付费产品
web服务器:只实现了 JavaEE 平台下部分技术标准,如 Servlet,Jsp,JNDI,JavaMail。Web 容器是开源免费的。而Tomcat就是一种免费的Web服务器

Tomcat的安装

  • tomcat是绿色软件,去官网安装直接解压直接可以使用
  • 官网:http://tomcat.apache.org/
  • 同时需要配置环境变量(因为Tomcat是Java写的,所以需要配置环境变量,不然会出现黑框显示又消失的场景)JAVA_HOME:C:\Program Files\Java\jdk1.8.0_17 PATH:%JAVA_HOME%\bin; CLASS_PATH:%JAVA_HOME%\lib;(前两个是安装Java时配置的环境变量)
  • 注意下载的时候不要下载测试版,会出现很多问题

Tomcat的目录解析

tomcat目录

  • bin目录:bin 目录主要是用来存放 tomcat 的命令文件,主要有两大类,一类是以.sh 结尾的(linux命令),另一类是以.bat 结尾的(windows 命令)。
  • conf目录:conf 目录主要是用来存放 tomcat 的一些配置文件
  • lib目录:lib 目录主要用来存放 tomcat 运行需要加载的 jar包
  • logs目录:logs 目录用来存放 tomcat 在运行过程中产生的日志文件
  • temp目录:temp 目录用户存放 tomcat 在运行过程中产生的临时文件。(清空不会对 tomcat 运行带来影响,但是不要删除这个文件夹
  • webapps目录:webapps 目录用来存放应用程序,当 tomcat 启动时会去加载 webapps 目录下的应用程序。可以以文件夹、war 包的形式发布应用。
  • work目录:work 目录用来存放 tomcat 在运行时的编译后文件,例如 JSP 编译后的文件

Tomcat中config的配置文件

Tomcat 的配置文件由 4 个 xml 组成,分别是 context.xml、web.xml、server.xml、tomcat-users.xml。每个文件都有自己的功能与配置方法。下面来一一介绍:

  • Context.xml:Context.xml 是 Tomcat 公用的环境配置。 Tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器 。
  • Web.xml:Web 应用程序描述文件,都是关于是 Web 应用程序的配置文件。所有 Web 应用的web.xml 文件的父文件。
  • sever.xml:(这个非常重要,之后会再进行深入讲解)是 tomcat 服务器的核心配置文件,server.xml 的每一个元素都对应了 tomcat 中的一个组件,通过对 xml 中元素的配置,实现对 tomcat 中的各个组件和端口的配置
  • tomcat-user.xml:配置访问 Tomcat 的用户以及角色的配置文件

Tomcat打开与关闭

  • 打开:运行bin目录下的startup.bat文件(运行之后会出现部分乱码,原因是他默认的编码格式是UTF-8而Windows支持的编码格式是GBK,我们只需要修改config目录下的 logging.properties 文件重新指定编码方式就可以解决乱码问题—将java.util.logging.ConsoleHandler.encoding = UTF-8修改为java.util.logging.ConsoleHandler.encoding = GBK)
  • 关闭:关闭启动窗口或者运行bin目录下的 shutdown.bat 文件

Tomcat的访问

  • 首先需要打开Tomcat
  • 访问 Tomcat 的 URL 格式:http://ip:port
  • 访问本机 Tomcat的URL格式:http://localhost:8080(tomcat监听的是8080端口)

Tomcat监听端口的修改

Tomcat 默认监听端口为 8080。可以通过修改server.xml 文件来改变 Tomcat 的监听端口

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
//修改的地方就是8080

Tomcat中的角色和用户

Tomcat中有很多角色,每个角色拥有特定的权限,我们可以创建某个角色,之后将用户设定为某个角色,就可以操作Tomcat的某些功能,一个用户可以分配多个角色
角色分类:
manager-gui 角色:允许访问 HTML GUI 和状态页面
manager-script 角色: 允许访问文本界面和状态页面
manager-jmx 角色:允许访问 JMX 代理和状态页面
manager- status角色:仅允许访问状态页面
为用户添加角色
在config文件夹下的tomcat-users.xml文件下配置
在倒数第二行添加

,如果想添加多个角色,只需要在role引号中”admin-gui,角色名称“

Tomcat的作用

tomcat是一个可以处理请求并产生相应的应用程序,他的本质上是一个应用程序,他实现了JavaEE平台下的一些规范,所以我们可以在tomcat上运行我们编写的Servlet和Jsp

Tomcat工作原理

tomcat工作原理
上图可以分为三个部分:客户端、tomcat服务器、数据库
客户端:可以基于某种网络协议发送请求的都可以作为客户端
tomcat服务器:有三个功能:web服务器、js容器、servlet容器(tomcat中的容器也可以称作引擎,引擎的作用:根据请求的资源,来找到(解析)资源所对应的jsp或者servlet,来把他做一个执行;web服务器的作用:监听请求端口,)
一次请求和一次响应的处理过程:客户端发送请求数据包,web服务器监听到客户端发送过来的请求数据包,他将请求数据包转发给引擎,引擎拿到请求之后,引擎会对拿到请求数据包的一个解析,并把解析的结构放到一个httpservletRequest对象中,然后根据请求行中的资源去找到所对应的jsp或servlet进行一个执行,执行完之后,会将结果返回给一个Java对象,Java对象再返回给web服务器,web服务器会返回给客户端

Tomcat体系架构

Tomcat体系架构
上图分为两个部分:客户端(左侧)和tomcat服务器(右侧)

  • tomcat支持的协议:HTTP协议、https协议、AJP协议、以及一些其他协议,但是tomcat默认只支持HTTP协议,如果想要支持其他协议,我们需要对tomcat进行一些额外的配置
  • tomcat是由多个组件构成,最外层是Server组件,Server组件内又包含一个Service组件,Service组件中又包含Connector组件和Engine组件,Engine组件中包含Host组件,Host组件中包含Context组件,每个组件都有自己的作用,他们之间协同配合共同完工作(这些组件的配置都包含在config目录下的server.xml文件中)
    server.xml文件中对各个文件的配置(可以清晰的看到组件之间的关系,一些注释和其他的东西在这里省略)
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8888" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
      </Host>
      <Host name="www.wjh.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context path="/wh" docBase="D:\demo"/>
      </Host>
    </Engine>
  </Service>
</Server>

各个组件的作用(可以先简单的了解,之后会有更深的认识)
- Server组件
启动一个Server实例(即一个jvm),Sever实例也就是tomcat实例,(Servle采用单进程多线程的方式来运行,单进程指的就是tomcat服务器)启动tomcat服务器,它会监听 8005 端口以接收 shutdown 命令。Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个 Server 实例,必须配置它们使用不同的端口。
- Service组件
Service 主要用于关联一个引擎和与此引擎相关的连接器(指的就是上文所说的web服务器),每个连接器通过一个特定的端口和协议接收请求并将其转发至关联的引擎进行处理。因此,Service 要包含一个引擎一个或多个连接器。
- Connector组件
支持处理不同请求的组件,一个引擎可以有一个或多个连接器,以适应多种请求方式。默认只开启了处理 Http 协议的连接器。如果需要使用其他协议,需要在 Tomcat 中配置该协议的连接器。
- Engine组件
Engine 是 Servlet 处理器的一个实例,即 servlet 引擎,定义在 server.xml 中的 Service 标记中。Engine 需要 defaultHost 属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的 host 组件
- Host组件
位于 Engine 容器中用于接收请求并进行相应处理的虚拟主机。通过该容器可以运行Servlet 或者 JSP 来处理请求
- Context组件
Context是Host的子标签,代表指定一个Web应用,它运行在某个指定的虚拟主机(Host)上;每个 Web 应用都是一个 WAR 文件,或文件的目录

Tomcat处理请求过程

Tomcat处理请求过程
1、用户访问 localhost:8080/test/index.jsp,请求被发送到 Tomcat,被监听 8080 端口并处理 HTTP/1.1 协议的 Connector 获得。
2、Connector 把该请求交给它所在的 Service 的 Engine 来处理,并等待 Engine 的回应。
3、Engine 获得请求 localhost/test/index.jsp,匹配所有的虚拟主机 Host。
4、Engine 匹配到名为 localhost 的 Host 虚拟主机来处理/test/index.jsp 请求(即使匹配不到会请求交给默认 Host 处理),Host 会根据/test 匹配它所拥有的所有的 Context。
5、匹配到的 Context 获得请求/index.jsp。
6、构造 HttpServletRequest 对象和 HttpServletResponse 对象,作为参数调用 JspServlet的 doGet()或 doPost()执行业务逻辑、数据存储等程序。
7、Context 把执行完之后的结果通过 HttpServletResponse 对象返回给 Host。
8、Host 把 HttpServletResponse 返回给 Engine。
9、Engine 把 HttpServletResponse 对象返回 Connector。
10、Connector 把 HttpServletResponse 对象返回给客户 Browser。

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值