Servlet 容器用来加载和管理业务类。

HTTP 服务器不直接跟业务类打交道,而是把请求交给 Servlet 容器去处理,Servlet 容器会将请求转发到具体的 Servlet,如果这个 Servlet 还没创建,就加载并实例化这个 Servlet,然后调用这个 Servlet 的接口方法。因此 Servlet 接口其实是Servlet 容器跟具体业务类之间的接口。因此 Servlet 接口和 Servlet 容器的出现,达到了 HTTP 服务器与业务类解耦的目的。

Servlet 接口定义了下面五个方法:

public interface Servlet {

void init(ServletConfig config) throws ServletException;

ServletConfig getServletConfig();

void service(ServletRequest req, ServletResponse res)throws ServletException, IOException;

String getServletInfo();

void destroy();

}

service

service 方法是最重要的方法,具体业务类在这个方法里实现处理逻辑。这个方法有两个参数:ServletRequest 和 ServletResponse。ServletRequest 用来封装请求信息,ServletResponse 用来封装响应信息,因此本质上这两个类是对通信协议的封装。

比如 HTTP 协议中的请求和响应就是对应了 HttpServletRequest 和 HttpServletResponse 这两个类。你可以通过 HttpServletRequest 来获取所有请求相关的信息,包括请求路径、Cookie、HTTP 头、请求参数等。此外,我在专栏上一期提到过,我们还可以通过 HttpServletRequest 来创建和获取 Session。而 HttpServletResponse 是用来封装 HTTP 响应的。

init 和 destroy

Servlet 容器在加载 Servlet 类的时候会调用 init 方法,在卸载的时候会调用 destroy 方法。我们可能会在 init 方法里初始化一些资源,并在 destroy 方法里释放这些资源,比如 Spring MVC 中的 DispatcherServlet,就是在 init 方法里创建了自己的 Spring 容器。

ServletConfig

作用就是封装 Servlet 的初始化参数。你可以在tomcat的 web.xml 给 Servlet 配置参数,并在程序里通过 getServletConfig 方法拿到这些参数。

Servlet 规范提供了两种扩展机制:Filter和Listener

Filter是过滤器,这个接口允许你对请求和响应做一些统一的定制化处理,比如你可以根据请求的频率来限制访问,或者根据国家地区的不同来修改响应内容。过滤器的工作原理是这样的:Web 应用部署完成后,Servlet 容器需要实例化 Filter 并把 Filter 链接成一个 FilterChain。当请求进来时,获取第一个 Filter 并调用 doFilter 方法,doFilter 方法负责调用这个 FilterChain 中的下一个 Filter。

Listener是监听器,这是另一种扩展机制。当 Web 应用在 Servlet 容器中运行时,Servlet 容器内部会不断的发生各种事件,如 Web 应用的启动和停止、用户请求到达等。 Servlet 容器提供了一些默认的监听器来监听这些事件,当事件发生时,Servlet 容器会负责调用监听器的方法。当然,你可以定义自己的监听器去监听你感兴趣的事件,将监听器配置在 web.xml 中。比如 Spring 就实现了自己的监听器,来监听 ServletContext 的启动事件,目的是当 Servlet 容器启动时,创建并初始化全局的 Spring 容器。

Filter 和 Listener 的本质区别:

Filter 是干预过程的,它是过程的一部分,是基于过程行为的。

参考来源:极客时间

Listener 是基于状态的,任何行为改变同一个状态,触发的事件是一致的。

Servlet 容器相关推荐

  1. 【spring boot2】第8篇:spring boot 中的 servlet 容器及如何使用war包部署

    嵌入式 servlet 容器 在 spring boot 之前的web开发,我们都是把我们的应用部署到 Tomcat 等servelt容器,这些容器一般都会在我们的应用服务器上安装好环境,但是 spr ...

  2. SpringBoot之配置嵌入式Servlet容器

    1.概述 文章目录 1.概述 2.如何修改SpringBoot的默认配置 3.定制和修改Servlet容器的相关配置 4.注册Servlet三大组件 5.替换为其他嵌入式Servlet容器 6.嵌入式 ...

  3. Java使用Jetty实现嵌入式Web服务器及Servlet容器

    Jetty是一个Java实现的开源的servlet容器,它既可以像Tomcat一样作为一个完整的Web服务器和Servlet容器,同时也可以嵌入在Java应用程序中,在Java程序中调用Jetty. ...

  4. Web服务器 Web容器 Servlet容器

    WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务. WWW 是 Internet 的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是 ...

  5. 熵增学院-Anders-剑走偏锋,了解Spring Boot内部Servlet容器

    2019独角兽企业重金招聘Python工程师标准>>> 还记得大明湖畔的servlet吗?其实Spring Boot支持内嵌的Tomcat, Jetty和Undertow服务器,多数 ...

  6. Web服务器、Servlet和Servlet容器

    Web服务器是向浏览器提供服务的程序.服务器是一种被动的程序,只有当其他计算机的浏览器向它们发出请求时才有所动作.在大多数情况下,这些动作是寻找并发送某个文档给提出请求的浏览器. Servlet是一种 ...

  7. 探秘Tomcat——一个简易的Servlet容器

    即便再简陋的服务器也是服务器,今天就来循着书本的第二章来看看如何实现一个servlet容器. 背景知识 既然说到servlet容器这个名词,我们首先要了解它到底是什么. servlet 相比你或多或少 ...

  8. SpringBoot配置嵌入式Servlet容器

    SpringBoot默认使用的是Tomcat作为嵌入式的Servlet容器,那么肯定会和外置的Tomcat有区别,那么就这些区别来谈一谈SpringBoot中对于容器的一些配置操作 如何定制和修改Se ...

  9. Spring Boot切换其他嵌入式的Servlet容器

    Spring Boot默认支持: Tomcat(默认使用) <dependency><groupId>org.springframework.boot</groupId& ...

  10. Spring Boot配置嵌入式Servlet容器的两种方法

    一.前言 SpringBoot默认使用Tomcat作为嵌入式的Servlet容器 二.如何定制和修改Servlet容器的相关配置: 1.修改和server有关的配置(ServerProperties[ ...

最新文章

  1. Java爬虫——B站弹幕爬取
  2. 获取文件名和路径函数
  3. vue 将字符串最后一个字符给替换_一步一步的实现Vue(一)
  4. python list遍历
  5. 从技术面试官的角度来谈谈简历和面试
  6. python查询sql_Python处理SQL语句(提供SQL查询平台使用)
  7. 未来计算机将具有图像识别 定理证明,[单选] 低温计与高温计所测温度的分界线为()。...
  8. 怎么将电脑的图片不用打开也能显示出来
  9. c语言atm实训报告总体框架图,实训报告-ATM.doc
  10. 推荐系统(原理介绍)
  11. yarn安装详细教程说明、升级教程、修改yarn的全局和缓存目录、yarn基本命令
  12. 《华为你学不会》读书笔记
  13. Nginx访问间歇性卡顿的解决办法
  14. 终端溯源图构建工具SPADE专题-1 SPADE工具安装
  15. 动态壁纸-软件制作-教程
  16. java 求最大公因数_三种算法求最大公约数——Java实现 | 学步园
  17. Daily Scrum Meeting 10.31
  18. font-variant-numeric
  19. 如何拦截各种软件的广告弹窗?
  20. 2022全球程序员薪资排行:中国倒数

热门文章

  1. loader-wizard.php,安装ioncube扩展
  2. 51单片机入门-1-最小系统基础概念
  3. word文档无法另存为/导出pdf解决办法
  4. OpenCV学习 之 IplImage*遍历每个像素点
  5. 地图测量面积工具app_面积测量精灵手机版下载
  6. 机器学习与数据挖掘的区别(一点个人理解)
  7. 我对数据分析的几点感悟
  8. Python实战|「甜点消消」游戏数据分析过程
  9. 你以为在做的是微服务?不!你做的只是分布式单体!
  10. Windows 10系统安装AutoCAD 2007