# lagou-minicat **Repository Path**: java-quickstart/lagou-minicat ## Basic Information - **Project Name**: lagou-minicat - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-04 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 李志勇的作业 ## 阶段二模块一 ### 作业⼀(编程题) 开发Minicat V4.0,在已有Minicat基础上进⼀步扩展,模拟出webapps部署效果 磁盘上放置⼀个webapps⽬录,webapps中可以有多个项⽬,⽐如demo1,demo2,demo3... 具体的项⽬⽐如demo1中有serlvet(也即为:servlet是属于具体某⼀个项⽬的servlet),这样的话在 Minicat初始化配置加载,以及根据请求url查找对应serlvet时都需要进⼀步处理 编码思路: 1. demo目录下demo1和demo2是两个webapp项目,两个项目中都有同名servlet (servlet.LagouServlet,继承了minicat的HttpServlet类) 2. `mvn install`安装minicat,接着demo1和demo2执行`mvn install`安装到webapps目录下 3. minicat的server.xml文件配置host指向webapps项目 4. 执行Bootstrap类启动minicat,每个webapp绑定不同的classLoader,通过classLoader加载webapp目录下的classes和lib 5. 访问`http://localhost:8080/demo1/lagou`使用demo1的servlet处理,访问`http://localhost:8080/demo2/lagou`使用demo2的servlet处理 [minicat视频演示](./minicat视频演示.mp4) ### 作业⼆(简答题) 请详细描述Tomcat体系结构(图⽂并茂) ![tomcat](tomcat体系结构.png) #### Server 一个Server可以包含多个Service ##### Service 一个Service由多个Connector和一个Container组成,可以包含共享的线程池 ###### Connector tomcat的连接器,负责接收请求,并将请求交给Container处理 * Endpoint 负责监听Socket连接,建立TCP 3次握手,并将Socket连接交给Processor处理 * Processor 接收Socket读取输入流,封装tomcat自身的Request和Response,将Request和Response交给CoyoteAdapter处理 * ProtocolHandler 处理协议和IO,tomcat提供6个实现类:AjpNioProtocol,AjpAprProtocol,AjpNio2Protocol,Http11NioProtocol,Http11Nio2Protocol,Http11AprProtocol,一般使用Http11NioProtocol * Adapter 实现类CoyoteAdapter,将不同协议的请求内容适配成标准的HttpServletRequest和HttpServletResponse,再交给Container处理 ###### Container Servlet容器,负责加载和管理Servlet,将请求交给具体的Servlet处理 * Engine Servlet容器引擎,一个Engine管理多个Host,负责将请求发送到对应的Host处理 * Host 表示虚拟主机,一个Host可以包含多个Context,负责将请求发送到对应的Context处理 * Context 表示一个web应用,一个Context可以包含多个Wrapper,负责将请求发送到对应的Wrapper处理 * Wrapper 表示一个Servlet,最终调用Servlet.service方法 #### tomcat启动流程 ![tomcat启动流程](tomcat启动流程.png) #### tomcat请求处理流程 ![tomcat请求处理流程](tomcat请求处理流程.png)