目录
1、什么是tomcat?
定义: Tomcat服务器是一个免费开放源代码的web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。【百度百科:tomcat_百度百科】
配置:在tomcat/conf存放了各种配置文件如:server.xml、tomcat-user.xml、web.xml;
a、server.xml服务器相关的配置
server:创建tomcat的Server,默认的实现类是StandardServer
server.service:表示创建了一个service,默认实现类StandardService,注意一个server服务器可以对应多个service服务
server.service.Connector:链接器,可配置多个,默认情况下配置了HTTP/1.1、AJP/1.3,配置tomcat服务器监听端口以及支持的协议
server.service.Executor:默认情况下链接器使用的线程池是独立的,如果想共用一个线程池,这块配置Executor后,将Connector使用的线程池指向Executor表示共用一个线程池。
server.service.engine:是servlet引擎的顶层容器,内部包含host、context、wapper
server.service.engine.host:设置访问的网络名称比如localhost, baidu.com、以及项目访问的路径(appbase=webapps)
server.service.engine.context:配置一个web应用,指向外部的目录结构(D://project),以及访问路径(/myapp)
b、tomcat-user.xml:配置tomcat的角色用户信息
c、web.xml:配置servlet、filter、welcome-page、error-page
使用:
tomcat/bin目录下有相关的脚本: 比如startup.bat(启动) shutdown.bat(关闭)
原理(简单):
tomcat服务器主要是干了两件事情,第一是接收客户端的http请求,然后处理http请求报文,最后转化成servlet的请求报文;第二是管理所有的servlet,客户端请求找到对应的servlet处理对应的业务逻辑并返回结果。
2、tomcat顶层架构?
核心功能:
1)、处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化。
2)、加载和管理 Servlet ,以及具体处理 Request 请求。因此Tomcat 设计了两个核心组件连接器( Connector )和容器( Container )来分别做这 两件事情。连接器负责对外交流,容器负责内部处理。
细节:
1)、连接器:
Coyote美/kaɪˈoʊti/>是tomcat连接器框架的名称,客户端通过与Coyote与服务器建立连接、发送请求并建立响应。
组成:EndPoint:Coyote通信端点,即通信监听的接口,是具体 Socket 接收和发送处理器,是对传输层的抽象,因此EndPoint 用来实现 TCP/IP 协议的。
Processor:Coyote 协议处理接口 ,如果说 EndPoint 是用来实现 TCP/IP 协议的,那么Processor用来实现 HTTP 协议, Processor 接收来自 EndPoint 的
Socket ,读取字节流解析成Tomcat Request 和 Response 对象,并通过 Adapter将其提交到容器处理,Processor是对应用层协议的抽象。
ProtocolHandler:Coyote 协议接口, 通过 Endpoint 和 Processor , 实现针对具体协 议的处理能力,如:Http11NioProtocol
Adapter:由于协议不同,客户端发过来的请求信息也不尽相同, Tomcat 定义了自己的 Request 类来“ 存放 ” 这些请求信息。 ProtocolHandler 接口负责解析请求并生成 Tomcat Request 类。但是这个Request 对象不是标准的 ServletRequest ,也就意味着,不能用 Tomcat Request作为参数来调用容器。 Tomcat 设计者的解决方案是引入 CoyoteAdapter ,这是适配器模式的经典运用,连接器调用CoyoteAdapter 的 Sevice 方法,传入的是 Tomcat Request对象, CoyoteAdapter 负责将 Tomcat Request 转成 ServletRequest ,再调用容器的Service 方法。
2)、container:
负责处理用户的servlet请求,并返回对象给web用户的模块
组成: Engine:表示整个Catalina的Servlet引擎,用来管理多个虚拟站点,一个Service最多只能有一个Engine,但是一个引擎可包含多个Host
Host:代表一个虚拟主机,或者说一个站点,可以给Tomcat配置多个虚拟主机地址,而一个虚拟主机下可包含多个Context
Context:表示一个Web应用程序, 一个Web应用可包含多个Wrapper
Wapper:表示一个Servlet,Wrapper 作为容器中的最底层,不能包含子容器
3、tomcat优化方案?
参考:百度安全验证https://baijiahao.baidu.com/s?id=1762714311831564986&wfr=spider&for=pc
1)、增加 Tomcat 的内存分配:可以通过调整 Tomcat 的启动脚本来增加其分配的内存,比如在 catalina.sh 或 catalina.bat 中设置环境变量 CATALINA_OPTS 为 -Xms512m -Xmx1024m,其中 -Xms 表示 Tomcat 启动时分配的最小内存, -Xmx 表示 Tomcat 允许使用的最大内存。
2)、调整 Tomcat 的线程池设置:Tomcat 默认使用的线程池是 org.apache.tomcat.util.threads.ThreadPoolExecutor,可以通过修改 server.xml 中的 Connector 节点下的 maxThreads、minSpareThreads 和 acceptCount 参数来调整线程池的大小和性能。
3)、优化 Tomcat 的缓存设置:可以通过调整 server.xml 中的 Connector 节点下的 enableLookups、maxKeepAliveRequests 和 keepAliveTimeout 等参数来优化 Tomcat 的缓存设置,减少网络连接的开销。
4)、启用压缩:可以在 server.xml 中的 Connector 节点下启用压缩来减少网络传输的数据量,提高网站的响应速度,比如设置 compression 参数为 on、compressionMinSize 参数为 2048 等。
5)、启用静态资源缓存:可以通过在 web.xml 中配置 filter,启用静态资源缓存,减少服务器的负载,提高访问速度。
6)、使用 CDN 加速静态资源:可以使用 CDN(内容分发网络)来加速静态资源的传输,减少服务器的负载,提高网站的访问速度。
7)、避免使用过多的 Session:可以在编写 Web 应用程序时避免过多地使用 Session,因为 Session 会占用服务器的内存资源,从而影响 Tomcat 的性能。
8)、避免过多的 JDBC 操作:可以在编写 Web JDBC 操作数据库,因为数据库的访问是非常耗时的,从而影响 Tomcat 的性能。