tomcat
2021-11-20 16:22:10 38 举报
AI智能生成
Tomcat是一个开源的Web应用服务器,它是Apache软件基金会的一个项目。Tomcat提供了一个运行JSP和Servlets的容器,它实现了Java Servlet和JavaServer Pages(JSP)技术规范。Tomcat被广泛用于构建和部署Java Web应用程序,如电子商务网站、在线教育平台等。 Tomcat具有轻量级、高性能、易于配置和管理等优点。它支持多种操作系统,包括Windows、Linux和Mac OS X。此外,Tomcat还提供了丰富的扩展功能,可以通过插件来增强其功能。
作者其他创作
大纲/内容
文件结构
bin
各种操作脚本
config
context.xml
server.xml
tomcat-user.xml
lib
tomcat需要的jar包
logs
webapp
work
Tomcat把有jsp生成Servlet放在目录下
架构结构
server
service
Connector
ProtocolHandler
Endpoint
AbstractEndpoint
Acceptor内部类
监听请求
AsyncTimeout内部类
检查异步request的超时
Handler接口
用于处理收到的socket,在内部调用processor进行处理
Processor
将Endpoint接收到的Socket封装成Request
Adapter
将Request交给Container进行具体的处理。
Catalina
(Engine)
(Engine)
Host
(webapp)
(webapp)
Context
(WEB-INF)
(WEB-INF)
Wrapper
servelt
servelt
每个Wrapper封装一个servelt请求
概述
Server标签设置的端口号为8005,shutdown=”SHUTDOWN” ,表示在8005端口监听“SHUTDOWN”命令,如果接收到了就会关闭Tomcat。
Tomcat中只有一个Server,一个Server可以有多个Service,一个Service可以有多个Connector和一个Container;
Server掌管着整个Tomcat的生死大权;
Service 是对外提供服务的;
Connector用于接受请求并将请求封装成Request和Response来具体处理;
Container用于封装和管理Servlet,以及具体处理request请求;
Connector最底层使用的是Socket来进行连接的,Request和Response是按照HTTP协议来封装的,所以Connector同时需要实现TCP/IP协议和HTTP协议
Connector运行模式
同步阻塞(BIO)
linux环境tomcat7默认使用方式
并发量高时,线程数较多,浪费资源
配制项:protocol=”HTTP/1.1”
一个线程处理一个请求
同步非阻塞(NIO)
利用Java的异步IO处理,可以通过少量的线程处理大量的请求,
可以复用同一个线程处理多个connection(多路复用)。
可以复用同一个线程处理多个connection(多路复用)。
linux环境tomcat8默认使用方式
配制项:protocol=”org.apache.coyote.http11.Http11NioProtocol”
异步非阻塞(APR)
(Apache Portable Runtime/Apache可移植运行时)
(Apache Portable Runtime/Apache可移植运行时)
及AIO又叫NIO2
从操作系统层面解决io阻塞问题;与NIO的区别主要是操作系统的底层区别.
可以做个比喻:比作快递,
NIO就是网购后要自己到官网查下快递是否已经到了(可能是多次),然后自己去取快递;
AIO就是快递员送货上门了(不用关注快递进度)。
可以做个比喻:比作快递,
NIO就是网购后要自己到官网查下快递是否已经到了(可能是多次),然后自己去取快递;
AIO就是快递员送货上门了(不用关注快递进度)。
配制项:protocol=”org.apache.coyote.http11.Http11AprProtocol”
缺点
安装困难
配置apr模式之后还需要安装 apr 、 apr-utils 、tomcat-native包
运行高并发应用的首选模式
Container处理请求
使用Pipeline-Valve管道来处理(职责链模)
使用Pipeline-Valve管道来处理(职责链模)
与普通职责链的区别
每个Pipeline都有特定的Valve,而且是在管道的最后一个执行,这个Valve叫做BaseValve,BaseValve是不可删除的;
在上层容器的管道的BaseValve中会调用下层容器的管道。
四个子容器
StanderEngineValve
StanderHostValve
StanderContextValve
StanderWrapperValve
处理流程
connector调用EnginePipeline
依次会执行EngineValve1、EngineValve2等等,最后会执行StandardEngineValve,在StandardEngineValve中会调用Host管道
依次执行Host的HostValve1、HostValve2等,最后在执行StandardHostValve
再依次调用Context的管道和Wrapper的管道,最后执行到StandardWrapperValve。
当执行到StandardWrapperValve的时候,会在StandardWrapperValve中创建FilterChain,
并调用其doFilter方法来处理请求,这个FilterChain包含着我们配置的与请求相匹配的Filter和Servlet,
其doFilter方法会依次调用所有的Filter的doFilter方法和Servlet的service方法,这样请求就得到了处理!
并调用其doFilter方法来处理请求,这个FilterChain包含着我们配置的与请求相匹配的Filter和Servlet,
其doFilter方法会依次调用所有的Filter的doFilter方法和Servlet的service方法,这样请求就得到了处理!
当所有的Pipeline-Valve都执行完之后,并且处理完了具体的请求,
这个时候就可以将返回的结果交给Connector了,
Connector再通过Socket的方式将结果返回给客户端。
这个时候就可以将返回的结果交给Connector了,
Connector再通过Socket的方式将结果返回给客户端。
工作模式
按照作为servlet容器分类
独立的servlet容器
servlet容器是web服务器的一部分
进程内的servlet容器
servlet容器是作为web服务器的插件和java容器的实现,
web服务器插件在内部地址空间打开一个jvm使得java容器在内部得以运行。
反应速度快但伸缩性不足;
web服务器插件在内部地址空间打开一个jvm使得java容器在内部得以运行。
反应速度快但伸缩性不足;
进程外的servlet容器
servlet容器运行于web服务器之外的地址空间,并作为web服务器的插件和java容器实现的结合。
反应时间不如进程内但伸缩性和稳定性比进程内优;
反应时间不如进程内但伸缩性和稳定性比进程内优;
请求模式分类
作为应用程序服务器
请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等
作为独立服务器
请求来自于web浏览器
部署方式
利用tomcat自动部署
把web应用拷贝到webapps目录。Tomcat在启动时会加载目录下的应用,并将编译后的结果放入work目录下。
使用Manager App控制台自动部署
在tomcat主页点击“Manager App” 进入应用管理控制台,可以指定一个web应用的路径或war文件。
修改config/server.xml文件部署
修改conf/server.xml文件,增加Context节点可以部署应用。
增加自定义的web文件部署
在conf/Catalina/localhost/ 路径下增加 xyz.xml文件,内容是Context节点,可以部署应用。
0 条评论
下一页