tomcat

  • 中小型服务器,
  • java编写,开源

Tomcat目录

tomcat
|—-bin :存放启动和关闭tomcat脚本;
|———startup.bat 启动脚本
|—-conf :存放不同的配置文件(server.xml和web.xml);
|—-doc:存放Tomcat文档;
|—-lib/japser/common:存放Tomcat运行需要的库文件(JARS);
|—-logs:存放Tomcat执行时的LOG文件;
|—-src:存放Tomcat的源代码;
|—-webapps:Tomcat的主要Web发布目录(包括应用程序示例);
|—-work:存放jsp编译后产生的class文件;清空能达到清缓存的效果

Tomcat架构设计

Tomcat - 图1

1. 心脏组件:Connector

Connector 组件是可以被替换,默认的 Connector 是 Coyote

Connector 最重要的功能就是接收连接请求然后分配线程让 Container 来处理这个请求,所以这必然是多线程的,多线程的处理是 Connector 设计的核心

负责接收浏览器的发过来的 tcp 连接请求,创建一个 Request 和 Response 对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理这个请求的线程,处理这个请求的线程就是 Container 组件要做的事了。

主要实现类 HttpConnector

2. 心脏组件:Servlet 容器“Container”

image.png

责任链的设计模式
Connector(父接口) 主要负责对外交流,Container 主要处理 Connector 接受的请求,主要是处理内部事务

2.1 子容器:

2.1.1 Engine 容器

2.1.2 Host 容器-站点

Host 是 Engine 的子容器,一个 Host 在 Engine 中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以便能够区分它们。它的子容器通常是 Context,它除了关联子容器外,还有就是保存一个主机应该有的信息。

2.1.3 Context 容器-应用程序

Context 代表 Servlet 的 Context,它具备了 Servlet 运行的基本环境,理论上只要有 Context 就能运行 Servlet 了。简单的 Tomcat 可以没有 Engine 和 Host。

Context 最重要的功能就是管理它里面的 Servlet 实例,Servlet 实例在 Context 中是以 Wrapper 出现的,还有一点就是 Context 如何才能找到正确的 Servlet 来执行它呢? Tomcat5 以前是通过一个 Mapper 类来管理的,Tomcat5 以后这个功能被移到了 request 中,在前面的时序图中就可以发现获取子容器都是通过 request 来分配的。

2.1.4 Wrapper 容器

Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了,所以调用它的 addChild 将会报错。

3. Service

一个 Service 可以设置多个 Connector,但是只能有一个 Container 容器

4. Tomcat 中其它组件

如安全组件 security
logger 日志组件
session 服务器开辟的一块内存空间
mbeans
naming 命名服务
Jasper jsp解析引擎
这些组件共同为 Connector 和 Container 提供必要的服务。

Tomcat Server处理请求过程

Tomcat - 图3

配置文件

1. sever.xml

1.1 端口作用

8005端口是用来关闭TOMCAT服务的端口。


连接器监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。

connectionTimeout=”20000”
redirectPort=”8443” />
连接器监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器
————————————————
版权声明:本文为CSDN博主「zhy-dream」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhydream77/article/details/82179896

2.设置jvm内存

2.1 Catalina.bat / catlina.sh

第二行添加

  1. JAVA_OPTS="-server -Xmx=256m -Xmx=512m -XX:PermSize=128m -XX:MaxPermSize=256m"

堆内存最小 -Xmx=256m,物理内存的四分之一
堆内存最大 -Xmx=512m ,物理内存的一半
-XX:PermSize=128m 永久代初始化大小
-XX:MaxPermSize=256m 永久代最大的内存空间(默认为64m)


web管理界面

Tomcat - 图4

server status

manager app

配置用户名密码/conf/tomcat-user.xml

host manager

优化运行模式

修改bio协议为nio2

Tomcat Connector有三种运行模式(BIO, NIO, APR)

  • BIO:
    一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。
  • NIO:
    利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。
  • APR:
    即Apache Portable Runtime,从操作系统层面解决io阻塞问题。Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。Linux如果安装了apr和native,Tomcat直接启动就支持apr。

Tomcat启动的时候,可以通过log看到Connector使用的是哪一种运行模式:
Starting ProtocolHandler [“http-bio-8080”]
Starting ProtocolHandler [“http-nio-8080”]
Starting ProtocolHandler [“http-apr-8080”]