servlet启动加载顺序
时间: 2024-09-24 13:24:00 浏览: 34
Servlet的加载顺序通常遵循以下步骤:
1. **部署**: 当Web应用部署到服务器上时,servlet容器(如Tomcat、Jetty等)会读取web.xml文件中的Servlet配置。
2. **解析web.xml**: 容器解析web.xml文件,找到所有的servlet元素及其相关的配置信息,比如servlet的名称、类路径、初始化参数等。
3. **创建Servlet实例**: 对于每个servlet,容器会在内存中为其创建一个实例。这一步骤包括类的加载,如果类不在classpath中,容器会尝试从WEB-INF/classes或WEB-INF/lib目录下查找。
4. **初始化servlet**: 创建完实例后,容器会对每个servlet调用其`init()`方法,这是Servlet生命周期中的初始化阶段,此时可以设置资源和执行一些预操作。
5. **注册servlet**: 初始化完成后的servlet会被添加到容器的服务中,通常关联到特定的URL模式。
6. **请求处理**: 当客户端发送请求到应用时,容器根据请求的URL查找对应的servlet。如果匹配,servlet实例将接收请求并执行相应的业务逻辑。
7. **响应生成**: servlet处理完请求后,会生成HTTP响应,并返回给客户端。
相关问题
Tomcat 类加载器加载顺序
Tomcat 类加载器的工作原理是基于 Java 的双亲委派模型(Parent-First Class Loader Model)。这种模型定义了类加载的过程:
1. **根加载器** (Bootstrap ClassLoader):由 JVM 自身提供,负责加载 Java 核心 API 和一些基础库。
2. **应用服务器类加载器** (Server ClassLoader):如 Tomcat 的 `ClassLoader`,也称为 "Common ClassLoader"。它负责加载 Web 应用程序中的所有类。当应用程序启动时,每个Web应用程序都会创建一个单独的实例。
3. **应用上下文类加载器** (Context ClassLoader):对于每个 Servlet 容器(例如 web.xml 中的 `<Context>`),都会有一个独立的上下文类加载器。这个加载器默认会继承服务器类加载器,即可以访问到其他已经加载的类。
4. **用户自定义类加载器**:开发者可以在需要的时候创建自定义的类加载器,它们通常位于应用的 `WEB-INF/classes` 或者 `WEB-INF/lib` 目录下,并且有自己的查找路径。这些类加载器不会影响已有的类加载器,而是作为独立的层次添加进来。
当一个类被请求时,首先由最上层的根加载器尝试加载。如果找不到,则逐级向下搜索,直到找到该类或达到容器底部的类加载器为止。如果没有找到,那么就会抛出 ClassNotFoundException 异常。
Servlet、过滤器、监听器,它们的启动顺序为
Servlet、过滤器、监听器的启动顺序为:
1. 首先加载web.xml文件中配置的所有监听器(Listener),并按照配置顺序依次初始化;
2. 接着加载所有的过滤器(Filter),并按照配置顺序依次初始化;
3. 最后加载所有的Servlet,并按照配置顺序依次初始化。
在Web应用程序启动时,Servlet容器会创建一个ServletContext对象,它是Servlet、过滤器和监听器之间的交互接口。Servlet容器首先加载所有的监听器,并在Web应用程序启动时初始化它们。然后,Servlet容器加载所有的过滤器,并在Web应用程序启动时初始化它们。最后,Servlet容器加载所有的Servlet,并在Web应用程序启动时初始化它们。在这个过程中,所有的组件都可以访问同一个ServletContext对象,以便在启动阶段进行交互和共享信息。
阅读全文