美文网首页
Tomcat学习笔记1

Tomcat学习笔记1

作者: 兮兮码字的地方 | 来源:发表于2020-09-04 21:50 被阅读0次

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();

}

1,Servlet 接口其实是 Servlet 容器跟具体业务类之间的接口。

2,ServletRequest 用来封装请求信息,ServletResponse 用来封装响应信息,本质上这两个类是对通信协议的封装。

3,在 init 方法里初始化一些资源,并在 destroy 方法里释放这些资源,比如 Spring MVC 中的 DispatcherServlet,就是在 init 方法里创建了自己的 Spring 容器。

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

5,Servlet 规范提供了 GenericServlet 抽象类。Servet 规范还提供了 HttpServlet 来继承 GenericServlet,并且加入了 HTTP 特性。这样我们通过继承 HttpServlet 类来实现自己的 Servlet,只需要重写两个方法:doGet 和 doPost。

6,Web 应用的目录结构:

| -  MyWebApp

      | -  WEB-INF/web.xml        -- 配置文件,用来配置Servlet等

      | -  WEB-INF/lib/          -- 存放Web应用所需各种JAR包

      | -  WEB-INF/classes/      -- 存放你的应用类,比如Servlet类

      | -  META-INF/              -- 目录存放工程的一些信息

7,为充分考虑到可扩展性,Servlet 规范提供了两种扩展机制:Filter 和 Listener。

8,Filter 是过滤器(干预过程),工作原理:Web 应用部署完成后,Servlet 容器需要实例化 Filter 并把 Filter 链接成一个 FilterChain。当请求进来时,获取第一个 Filter 并调用 doFilter 方法,doFilter 方法负责调用这个 FilterChain 中的下一个 Filter。

9,Listener 是监听器(基于状态),Servlet 容器提供了一些默认的监听器来监听各种事件,当事件发生时,Servlet 容器会负责调用监听器的方法。也可以定义自己的监听器去监听感兴趣的事件,将监听器配置在web.xml中。比如 Spring 就实现了自己的监听器,来监听 ServletContext 的启动事件,目的是当 Servlet 容器启动时,创建并初始化全局的 Spring 容器。

10,Tomcat目录结构

/bin:存放 Windows 或 Linux 平台上启动和关闭 Tomcat 的脚本文件。

/conf:存放 Tomcat 的各种全局配置文件,其中最重要的是server.xml。

/lib:存放 Tomcat 以及所有 Web 应用都可以访问的 JAR 文件。

/logs:存放 Tomcat 执行时产生的日志文件。

/work:存放 JSP 编译后产生的 Class 文件。

/webapps:Tomcat 的 Web 应用目录,默认情况下把 Web 应用放在这个目录下。

Tomcat 总体架构

11,Tomcat 设计了两个核心组件连接器(Connector)和容器(Container)。连接器负责对外交流,容器负责内部处理。

12最顶层是 Server,这里的 Server 指的就是一个 Tomcat 实例。一个 Server 中有一个或者多个 Service,一个 Service 中有多个连接器和一个容器。连接器与容器之间通过标准的 ServletRequest 和 ServletResponse 通信。

13,Tomcat 支持的 I/O 模型有:

NIO:非阻塞 I/O,采用 Java NIO 类库实现。

NIO.2:异步 I/O,采用 JDK 7 最新的 NIO.2 类库实现。

APR:采用 Apache 可移植运行库实现,是 C/C++ 编写的本地库。

14,Tomcat 支持的应用层协议有:

HTTP/1.1:这是大部分 Web 应用采用的访问协议。

AJP:用于和 Web 服务器集成(如 Apache)。

HTTP/2:HTTP 2.0 大幅度的提升了 Web 性能。

15, Endpoint 接收到 Socket 连接后,生成一个 SocketProcessor 任务提交到线程池去处理,SocketProcessor 的 run 方法会调用 Processor 组件去解析应用层协议,Processor 通过解析生成 Request 对象后,会调用 Adapter 的 Service 方法。

容器的层次结构

16,Tomcat 设计了 4 种容器,分别是 Engine、Host、Context 和 Wrapper。这 4 种容器不是平行关系,而是父子关系。(分层的架构,使得 Servlet 容器具有很好的灵活性)

Tomcat 的server.xml配置文件:

17, Tomcat 是用组合模式来管理这些容器的。具体实现方法是,所有容器组件都实现了 Container 接口,因此组合模式可以使得用户对单容器对象和组合容器对象的使用具有一致性。这里单容器对象指的是最底层的 Wrapper。

18, 连接器中的 Adapter 会调用容器的 Service 方法来执行 Servlet,最先拿到请求的是 Engine 容器,Engine 容器对请求做一些处理后,会把请求传给自己子容器 Host 继续处理,依次类推,最后这个请求会传给 Wrapper 容器,Wrapper 会调用最终的 Servlet 来处理。这个调用过程是使用 Pipeline-Valve 管道(责任链模式)实现的。

public interface Valve {

  public Valve getNext();

  public void setNext(Valve valve);

  public void invoke(Request request, Response response)

}

19,整个调用过程由连接器中的 Adapter 触发的,它会调用 Engine 的第一个 Valve,Wrapper 容器的最后一个 Valve 会创建一个 Filter 链,并调用 doFilter 方法,最终会调到 Servlet 的 service 方法。

20,Valve 和 Filter 区别:Valve 是 Tomcat 的私有机制,与 Tomcat 的基础架构 /API 是紧耦合的。Servlet API 是公有的标准,所有的 Web 容器包括 Jetty 都支持 Filter 机制。另一个重要的区别是 Valve 工作在 Web 容器级别,拦截所有应用的请求;而 Servlet Filter 工作在应用级别,只能拦截某个 Web 应用的所有请求。如果想做整个 Web 容器的拦截器,必须通过 Valve 来实现。

相关文章

  • Tomcat学习笔记(史上最全tomcat学习笔记)

    Tomcat学习笔记(史上最全tomcat学习笔记) tomcat介绍 Tomcat是Apache 软件基金会(A...

  • Tomcat学习笔记1

    Servlet 接口 public interface Servlet { void init(ServletC...

  • 文章目录

    Markdown学习 Markdown学习 Java学习 Servlet学习笔记 Java问题 Tomcat问题修...

  • Servlet

    一、了解tomcat容器 个人学习笔记,所以很乱~ 先上几篇好文洗脑? 深入理解Tomcat架构Servlet 体...

  • Tomcat学习笔记

    Tomcat启动笔记 使用以下命令给予.sh文件运行权限 sudo /usr/local/Cellar/tomca...

  • Tomcat学习笔记

    1.Tomcat简述 Tomcat是Apache基金下的轻量级的Servlet容器的应用服务器,具有开源,免费,轻...

  • Tomcat学习笔记

    1. tomcat 组件以及各自的职责 |-Bootstrap: tomcat运行入口,完成CommonClass...

  • Tomcat&

    Tomcat的学习 1.tomcat的解释 tomcat作用是发布网页中的. tomcat是web服务器 web容...

  • CentOS7下Tomcat安装配置(yum)

    本文章仅作为个人笔记 1.判断是否有Tomcat源 运行 yum search tomcat 2.添加Tomc...

  • CentOS7下常用应用安装(安装包)

    本文章仅作为个人笔记 一:Tomcat7.0.78 tomcat官网:http://tomcat.apache...

网友评论

      本文标题:Tomcat学习笔记1

      本文链接:https://www.haomeiwen.com/subject/dxptektx.html