Tomcat 类加载器加载顺序
时间: 2024-08-14 11:06:11 浏览: 67
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 异常。
相关问题
tomcat类加载机制
Tomcat的类加载机制主要涉及到以下几个方面:
1. Bootstrap ClassLoader:这是Java虚拟机内置的类加载器,用于加载Java核心库,如java.lang包中的类。
2. System ClassLoader:又称为应用程序类加载器,用于加载应用程序classpath下的类。
3. Common ClassLoader:用于加载Tomcat公共类库中的类,如Tomcat的servlet-api.jar。
4. Webapp ClassLoader:用于加载Web应用程序中的类,如WEB-INF/classes下的类和WEB-INF/lib下的jar包中的类。
Tomcat在启动时会先由Bootstrap ClassLoader加载Tomcat自身的类库,然后由System ClassLoader加载Tomcat启动脚本中配置的classpath下的类,接着由Common ClassLoader加载Tomcat公共类库中的类,最后由Webapp ClassLoader加载Web应用程序中的类。
在加载Web应用程序中的类时,Tomcat会使用双亲委派机制,即先由Webapp ClassLoader尝试加载类,如果Webapp ClassLoader无法加载则委托给Common ClassLoader,如果Common ClassLoader仍无法加载则委托给System ClassLoader,最终如果System ClassLoader也无法加载则委托给Bootstrap ClassLoader。
这种双亲委派机制保证了类加载的顺序和一致性,避免了类的重复加载,也防止了恶意代码的注入。
嵌入式tomcat过滤器
嵌入式Tomcat过滤器是一种Java技术在Web应用程序中的功能,用于处理HTTP请求和响应流程。过滤器允许开发者在特定阶段对请求或响应进行定制操作,比如身份验证、日志记录、数据修改等,而无需直接修改Servlet代码。
嵌入式Tomcat的过滤器主要分为以下几个步骤:
1. **定义过滤器**:在web.xml或Spring的WebMvcConfigurer中,你可以定义一个或多个Filter,指定它们的名称、URL模式、顺序等。
2. **生命周期管理**:过滤器会在服务器启动时加载,请求到达时执行,请求处理后销毁。可以通过`doFilter()`方法的上下文来访问HttpServletRequest、HttpServletResponse和FilterChain对象。
3. **过滤过程**:`doFilter()`方法是核心,它会依次调用每个过滤器,直到达到下一个或请求结束。如果某个过滤器决定不继续传递请求(如返回响应),则调用`chain.doFilter()`会跳过剩余的过滤器。
4. **使用类型**:通常有四种类型的过滤器:
- **预请求过滤器**(Pre-Request Filter):在请求被处理器处理之前执行。
- **请求过滤器**(Request Filter):在请求进入处理器之前执行。
- **后请求过滤器**(Post-Request Filter):在请求离开处理器之后但在响应发送之前执行。
- **错误过滤器**(Error Filter):当发生错误时执行,可以捕获和处理异常。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)