Servlet规范

一、Servlet规范简介

Servlet:又叫服务端小程序,是服务端执行业务逻辑的特殊的java代码类。之所以是特殊的java类是因为所有的Servlet都必须实现Servlet接口,用于方便Servlet容器的解耦和调用。
ServletContext:Servlet上下文,其中包含了多个Servlet和这些Servlet共享的数据。一个ServletContext就代表一个web应用,里面保存了应用的所有配置信息。
Filter:过滤器,服务逻辑是在Servlet程序中实现的,但是有时候需要对逻辑进行通用的定制化操作,所有Servlet中提供了Filter组件来提供定制化操作。
Listener:监听器,web应用在容器中运行时会有许多事件,用户可以通过订阅这些事件来达到定制化的目的,比如Spring框架的启动就在这个ServletContext启动事件中初始化的。

在这里插入图片描述

二、Servlet容器结构

Servlet容器Tomcat:

1、一个Tomcat就代表Server实例
2、一个Server实例实例中可以有多个Service,每一个Service实例通过端口号区分,即不同的Service监听不同的端口号来响应服务
3、每个Service中有多个连接器和一个Container(Engine),之所以有多个连接器是因为Tomcat支持多种I/O模型(NIO/NIO2/APR)和应用协议(HTTP/AJP),不同的连接器处理不同协议类型的请求;容器Engine则负责业务处理。
4、一个Engine容器中可以有多个主机站点Host,通过主机域名来区分
5、一个主机Host中可以有多个Context上下文,即一个主机中可以不出多个应用,通过上下文(应用)名称来区分。
6、一个Context上下文中包含多个Wrapper容器,每个Wrapper容器中包含一个Servlet小程序,用户处理业务逻辑
在这里插入图片描述

Servlet映射过程

Servlet映射过程就是找到目标Servlet去执行请求的过程,我们以下面url为例来看看tomcat是如何定位到要调用哪个Servlet的。http://user.alibaba.com:8080/search-application/search
1、根据端口8080找到监听8080端口的Service。
2、根据http协议,选择连接器
3、经过连接器生成ServletRequest请求对象,并交个容器Engine执行。
4、Engine根据域名user.alibaba.com找到Host主机。
5、根据/search-application找到对应的应用上下文Context。
6、根据/search找到与web.xml配置文件中配置匹配的Servlet。

生产环境现状:

实际生产环境中上面的配置和部署成本很高,加上现在硬件成本比较廉价,我们往往会采用下面的部署方式,即一个Server实例一个Service实例,对应几个连接器和一个Engine 容器,Servlet容器中也只有一个host和一个应用上下文Context以及应用上下文中的若干个Wrapper容器和与之对应的Servlet。
在这里插入图片描述

web.xml的配置过程加载详解:https://www.cnblogs.com/shoshana-kong/p/10682662.html


版权声明:本文为weixin_41909330原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。