The history of servlet:
  1. public interface Servlet {
  2. void init(ServletConfig config) throws ServletException;
  3. ServletConfig getServletConfig();
  4. void service(ServletRequest req, ServletResponse resthrows ServletException, IOException;
  5. String getServletInfo();
  6. void destroy();
  7. }

init destroy
容器加载 servlet 类的时候调用 init 方法,在卸载的时候会调用 destroy 方法;
ServletConfig 这个类,作用就是封装servlet 的初始化参数。你可以在web.xml 给servlet 配置参数,并在程序里通过 getServletConfig 方法拿到这些参数。

抽象类用来实现接口和封装通用的逻辑,GenericServlet抽象类

HttpServlet extends GenericServlet

Http Server 封装 servletRequest

  1. | - MyWebApp
  2. | - WEB-INF/web.xml -- 配置文件,用来配置 Servlet
  3. | - WEB-INF/lib/ -- 存放 Web 应用所需各种 JAR
  4. | - WEB-INF/classes/ -- 存放你的应用类,比如 Servlet
  5. | - META-INF/ -- 目录存放工程的一些信息

ServletContext

Filter 过滤器

Listener 监听器

Tomcat&Jetty 在启动时给每个Web应用创建一个全局的上下文环境,这个上下文就是 ServletContext,其为后面的 Spring容器 提供宿主环境。

Tomcat&Jetty 在启动过程中触发容器初始化事件,Spring ContextLoaderListener 会监听到这个事件,它的contextInitialized 方法会被调用,在这个方法中,Spring 会初始化全局的 Spring根容器,这个就是 Spring的IoC容器IoC容器 初始化完毕后,Spring 将其存储到 ServletContext 中,便于以后来获取。

Tomcat&Jetty 在启动过程中还会扫描 Servlet,一个Web应用中的Servlet可以有多个,以 SpringMVC 中的DispatcherServlet 为例,这个Servlet实际上是一个标准的前端控制器,用以转发、匹配、处理每个Servlet请求。

Servlet一般会延迟加载,当第一个请求达到时,Tomcat&Jetty 发现 DispatcherServlet 还没有被实例化,就调用DispatcherServlet的init方法,DispatcherServlet在初始化的时候会建立自己的容器,叫做SpringMVC 容器,用来持有 Spring MVC 相关的Bean。同时,Spring MVC还会通过ServletContext拿到Spring根容器,并将Spring根容器设为SpringMVC容器的父容器,请注意,Spring MVC容器可以访问父容器中的Bean,但是父容器不能访问子容器的Bean, 也就是说Spring根容器不能访问SpringMVC容器里的Bean。说的通俗点就是,在Controller里可以访问Service对象,但是在Service里不可以访问Controller对象。

tomcat /work 存放jsp编译后产生的 Class 文件

catalinna.log 记录tomcat 启动过程的信息,JVM参数以及操作系统等日志信息
catalinna.out tomcat标准输出 stdout stderr
localhost.log web应用在初始化过程中遇到的未处理的异常
localhsot_acess_Log 请求日志,ip地址,请求的路径时间,请求协议,状态码
manager.log tomcat 自带的manager等项目的日志信息