Tomcat学习笔记

Tomcat 的介绍

1.tomcat
是一个服务软件。我们以后工作大部分都是开发 web 项目。 web 项目要运行起来
都要借助服务器。 tomcat 服务器是目前市场占有率最高的一个服务器。
2.springboot
内嵌三个默认服务器。 tomcat 就是其中一个。
a.tomcat b.jetty c.undertow

Tomcat 的目录结构

T omcat 的 lib 文件夹

Ecj.jar :可以动态的编译 jsp 文件。普通文件都是运行前先编译好, jsp 是在运行的过程中去
编译。需要用到特殊的编译工具。
在这里插入图片描述

Tomcat 的 各个配置文件

Catalina .policy

tomcat
的安全策略文件

tomcat 运行未知的 web 应用时,为了防止 java 代码对服务器系统产生安全影响。比如删
除系统文件,重启系统等。需要对 java 代码进行安全控制。这时候就要配置这个文件。
更加详细资料可以自行学习
java 安全管理器 Security Manager 。

Catalina.properties

每个tomcat服务器都要有自己的类加载器。因为一个服务器需要解决下面几个问题:

  1. 部署在同一服务器上的不同项目的类应该相互隔离。
    2.部署在同一个服务器上的两个项目应该可以共享一些java类库。
    3.服务应该保证自己的安全不受项目类库的影响。
    4.jsp应该支持热加载。
    由于这些问题,tomcat在部署项目时就指定了多个classpath。被放置不同位置的类库具备不同的访问范围和服务对象。
    在tomcat里面有三个classpath(common,server,shared),另外加上web项目自身的web-inf,一共四个。
    common目录里面的类库可以被所有的web项目和tomcat使用。
    server目录里面的类库只能被tomcat使用。
    shared只能被项目使用。
    web-inf下面只能被项目自己访问。
    对于tomcat6版本,为了简化大多数的应用场景将common,server,shared三者合并到了一个文件夹lib里面,相当于以前的common。如果默认设置不能满足需要,用户可以设置catalina.properties重新启用老版本的设置

Context.xml

全局的
context 配置文件。
context
是 tomcat 中的一个重要的类。这个类是对一个项目的封装。 tomcat 中的一个项目就
对应一个 context 对象。

logging.properties

tomcat
的日志配置文件,底层使用了 jdk Logging 记录日志。日志信息的位置和格式都是在
这里面配置的。

tomcat users.xml

配置
tomcat 的用户的。
演示如何登陆到服务器里面。对服务器进行控制。

Web.xml

Tomcat 下的 web.xml 文件为全局配置 配置公共信息
DefaultServlet和JspServlet 通过 Server.xml 了解 tomcat 的大组件把 tomcat 源码导入到 myeclipse 里面
从官网上下载的源码需要使用
ant 进行编译构建。编译构建好后可以导入到 myeclipse 里面。
运行时添加
加 java 虚拟机参数
-Dcatalina.home=" D: apache tomcat 8.5.34 src output build

T omcat 的各个组件

在这里插入图片描述

Server 组件:是对整个 tomcat 服务器的封装。服务

需要监听关闭事件。
在这里插入图片描述
安装成功后,首先启动
Tomcat ,然后在 cmd 下输入
telnet
localhost 8005
然后输入
SHUTDOWN 即可关闭 Tomcat
Listener 即监听器,负责监听特定的事件,当特定事件触发时, Listener 会捕捉到该事件,并
做出相应处理。 Listener 通常用在 Tomcat 的启动和关闭过程。 Listener 可嵌在 Server 、 Engine 、
Host 、 Context

GlobalNamingResources

GlobalNamingResources
用于配置 JNDI

Service

Service
包装 Ex ecutor 、 Connector 、 Engine ,以组成一个完整的服务。
Server
可以包含多个 Service 组件

Executors

Tomcat 的线程池对象
常见的属性有:
Name :线程池的名字
namePrefix:线程池里面线程名的前缀。可以通过 jconsole 工具观察到。
maxThreads
tomcat 中线程的最大个数。默认是 200.
minSpareThreads:线程池内线程个数的下限。默认是 25.

Connector

Connector
是外部请求的入口。每个 connector 都监听不同的端口。
Connector
有两种: HTTP Connector 和 AJP Connector
AJP:TOMCAT
跟其他 http 服务器集成时,需要使用到这个协议。 tomcat 中他占用 8009 端口。
常用属性:
port
Connector 接收请求的端口
protocolConnector 使用的协议( HTTP/1.1 或 AJP/1.3
connectionTimeout
-每个请求的最长连接时间(单位 ms
redirectPort
-处理 http 请求时,收到一个 SSL 传输请求,该 SSL 传输请求将转 移到此端口处理

Engine

Engine
负责处理 Service 内的所有请求。它接收来自 Connector 的请求,并决定传给哪个 Host
来处理, Host 处理完请求后,将结果返回给 Engine Engine 再将结果返回给 Connector
常用属性:
name
Engine 的名字
defaultHost
-指定默认 Host 。 Engine 接收来自 Connector 的请求,然后将请求传递给
defaultHost defaultHost 负责处理请求
Service
内必须包含一个 Engine 组件
Service
包含一个或多个 Connector 组件, Service 内的 Connector 共享一个 Engine

Host

Host
负责管理一个或多个 Web 项目
常用属性:
name
Host 的名字
appBase
-存放 Web 项目的目录(绝对路径、相对路径均可)
unpackWARs
-当 appBase 下有 WAR 格式的项目时,是否将其解压(解成目录结构的 Web
项目)。设成
项目)。设成falsefalse,则直接从,则直接从WARWAR文件运行文件运行WebWeb项目项目
autoDeploy
autoDeploy-是否开启自动部署。设为-是否开启自动部署。设为truetrue,,TomcatTomcat检测到检测到appBaseappBase有新添加的有新添加的WebWeb项目项目时,会时,会自动将其部署自动将其部署

Context

Context
代表一个运行在 Host 上的 Web 项目。一个 Host 上可以有多个 Context
将一个
Web 项目( D: MyApp )添加到 Tomcat ,在 Host 标签内,添加 Context 标签


常用属性:
path
-该 Web 项目的 URL 入口。 path 设置为””,输入 http://localhost:8080 即可 访问 MyApp
path 设置为” ”/test/MyApp ”,输入 http://localhost:8080/test/MyApp 才能访问 MyApp
docBase
Web 项目的路径,绝对路径、相对路径均可
(相对路径是相对于
CATALINA_HOME webapps
reloadable
-设置为 true Tomcat 会自动监控 Web 项目的 /WEB INF/classes/ 和 /WEB INF/lib 变
化,当检测到变化时,会重新部署 Web 项目。 reloadable 默认值为 false 。通常项目开发过
程中设为 tru e ,项目发布的则设为 false
crossContext
-设置为 true ,该 Web 项目的 Session 信息可以共享给同一 host 下的其他 Web
项目。默认为 false

Realm

Realm
可以理解为包含用户、密码、角色的”数据库”。 Tomcat 定义了多种 Realm 实现:
JDBC Database Realm 、 DataSource Database Realm 、 JNDI Directory Realm 、 UserDatabase Realm

Valve

Valve
可以理解为 Tomcat 的拦截器,而我们常用 filter 为项目内的拦截器。 Valve 可以用于
Tomcat 的日志、权限等。 Valve 可嵌在 Engine 、 Host 、 Context 内

部署 web 应用的四种方式

利用 Tomcat 自动部署

利用
Tomcat 自动部署方式是最简单的、最常用的方式。若一个 web 应用结构为
D: workspace WebApp AppName WEB INF \**,只要将一个 Web 应用的 WebContent 级的
AppName 直接扔进 %Tomcat_ webapps 文件夹下,系统会把该 web 应用直接部署到
Tomcat 中。所以这里 不再赘述。

利用控制台进行部署

若一个
web 应用结构为 D: workspace WebApp AppName WEB INF \**,利用控制台进行部署
的方式如下:进入 tomcat 的 manager 控制台的 deploy 区域 在 Context path 中键入
" 可任意取名 在 WAR or Directory URL :键入 D: workspace WebApp AppName (表
示去寻找此路径下的 web 应用) 点击 deploy 按钮。
然后在
%Tomcat_ webapps 路径下将会自动出现 一个名为 XXX 的文件夹,其内容即是
D: workspace WebApp AppName 的内容,只是名字是 XXX 而已(这就是前面在 Context path
键入 XXX 的结果)。
以上说明利用控制台进行部署的实质仍然是利用
Tomcat 的自动部署。

利用 server.xml 文件来部署 web 应用

配置
tomcat 安装目录下的 conf/server.xml

标签里面添加


/aa 这个虚拟 路径映射到了 C: AA BB 目录下,修改完 servler.xml 需要重启 tomcat 服务器

增加自定义的 Web 部署文件


conf 目录下创建 Catalina 目录,在此目录下新建 localhost 目录,

localhost 目录下新建 bb.xml, 内容为:

不需要写
path ,虚拟目录就是文件名 bb,path 默认为 /bb ,添加 bb.xml 不需要重启 tomcat 服
务器

解读 bootStrap.java

我们发现调用
bat 文件相当于运行了 java bootstrap start
我们来看一个
bootStrap 的代码:
M
ain 函数里面有五个步骤:

  1. 创建 BootStrap 对象。
  2. 调用 bootStrap 的 init 方法。进行初始化操作
  3. 解析参数。判断出参数是 start
  4. 调用 setAwait true )方法。
    Bootstrap.setAwait(true)
    内部通过反射,设置 Catalina 的 await 属性 默认为 false)
    为 true
    启动
    Catalina 过程中,当 Catalina 将 Tomcat 的所有组件启动之后,会检查 await
    属性,如果为 true ,会调用 Catalina.await() await(),而 Catalina.await() 又会调用其内部的
    Server 的 await()
    Server.await()
    包含一个 while 循 环,此循环用于监听指定 socket 端口 默认为 8005)
    的连接,当某个连接传入的参数为” SHUTDOWN 默认为” SHUTDOWN 时,终
    止此 while 循环 端口号和终止 while 循环的参数,在 server.xml 的 Server 标签设置
    Server.await()
    用来维持 Bootstrap 的 main 方法 (main thread) 处于运行状态,而线
    程池中监听 http 请求的线程是守护线程 (daemon thread)

    Tomcat 的指定端口接收到关闭命令时, Server.await() 内的 while 循 环终止,然后
    Catalina 会调用 stop() 方法,关闭 Tomcat 的所有组件,最终 Bootstrap 的 main thread
    终止, Tomcat 关闭
  5. 调用 load 方法
  6. 调用 start 方法
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值