Web服务器-Tomcat详细原理与实现

Tomcat 安装与使用

:MAC 安装配置使用Tomcat - 掘金

安装后本计算机就相当于一台服务器了!!!

方式一:使用本地安装的Tomcat

1、将项目文件移动到Tomcat的webapps目录下。

2、启动Tomcat

3、在浏览器输入想要加载的项目资源URL即可

方式二:使用IDEA中集成的Tomcat

在IDEA内配置Tomcat直接搜

写好业务类,在web.xml文件中配置servlet和映射

html 复制代码
    <servlet>
        <servlet-name>bbsServlet</servlet-name>
        <servlet-class>com.itheima.servlet01.BbsServlet</servlet-class>
    </servlet>

<!--    映射-->
<!--    首先是由URL请求得到servletname接着找到servlet-class 就找到了后端业务类-->
    <servlet-mapping>
        <servlet-name>bbsServlet</servlet-name>
        <url-pattern>/bbs/findAll</url-pattern>
    </servlet-mapping>

一、Tomcat基础

Tomcat 是一个免费开源轻量级的 Web 应用服务器。适合在并发量不是很高的中小企业项目中使用。

服务器:安装了服务器软件的计算机。

1、文件目录结构

2、功能组件结构

Tomcat 俩封装的核心功能:连接器 Connector、容器 Container。连接器和容器构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。

3、功能组件关系

一个container可对应多个connector。但是仅仅当一个container和一个connector组合在一起才可以处理一个service。

4、Coyote与Catalina

Coyote负责具体的协议的解析;Catalina负责实现最终的请求逻辑。

二、Tomcat架构

一、连接器Connector

0、 Tomcat 连接器框架Coyote

Tomcat支持的IO模型:

Tomcat支持的协议:

协议分层:

1、连接器核心功能

一、监听网络端口,接收和响应网络请求。

二、网络字节流处理。将收到的网络字节流转换成 Tomcat Request 再转成标准的 ServletRequest 给容器,同时将容器传来的 ServletResponse 转成 Tomcat Response 再转成网络字节流。

2、连接器模块设计

为满足连接器的两核心功能,需要一个通讯端点来监听端口;需要一个处理器来处理网络字节流;最后还需要一个适配器将处理后的结果转成容器需要的结构。

3、连接器结构图

容器支持servletRequest和servletResponse对象,Processor支持Request和Response,中间依靠Adapter进行转化。

二、容器Container

Tomcat 容器框架------Catalina

0、Catalina核心地位

1、Catalina架构

四个容器Engine、Host、Context 和 Wrapper之间属于父子关系。

2、Container架构

3、源码分析

三、Tomcat启动流程

0、基本流程

初始化:父组件调用init方法初始化自身,并初始化子组件

启动:父组件调用start方法启动自身,并启动子组件

四核心任务:

加载Tomcat的配置文件,初始化容器组件,监听对应的端口号,准备接受客户端请求。

1、Lifecycle

在上述启动中 Server、service、Container、executor、connector都调用了生命周期中的init start方法。

四、请求处理流程

逐字段解析URL首先根据域名确定虚拟主机Host,接着根据context应用程序确定,最后根据字段wrapper确定最终的执行方法。

Web应用配置

1、ServletContext初始化参数

ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。

使用<context-parm>添加ServletContext初始化参数(键值对)

java 复制代码
<context-param>
        <param-name>project01_parm</param-name>
        <param-value>itcast</param-value>
</context-param>

使用getServletContext().getInitParameter()获取初始化参数(传参为param-name)

java 复制代码
String value = request.getServletContext().getInitParameter("project01_param");

2、

相关推荐
whyutianict_vv19 分钟前
云计算 HCIE 认证体系解析:HCIA/HCIP/HCIE 三级科目与知识边界
linux·运维·云计算
0+1117 小时前
Linux --从 poll 到 epoll多路转接
linux·服务器·1024程序员节
青瓦梦滋7 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
桌面运维家8 小时前
旧电脑跑不动课程软件,VDI云桌面怎样接着用?
运维·服务器·虚拟化·pve·vdi·云桌面
zhang133830890758 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
知已难寻8 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
2601_9498477510 小时前
bcrypt.js 跨端三方库仓颉适配全流程
linux·运维·ubuntu
m0_6399069410 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端
今天重构了吗11 小时前
Linux 上 rm -rf 删错了能找回吗
运维·服务器
KaiwuDB11 小时前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式