常用的ClassLoader分析

时间:2022-07-25
本文章向大家介绍常用的ClassLoader分析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

我们创建一个简单的Web应用,里面只有一个HelloWorldServlet,然后在这个Servlet中打印加载它的ClassLoader,代码如下:

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorldServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response){
        ClassLoader classLoader = this.getClass().getClassLoader();
        while (classLoader!=null){
            System.out.println(classLoader.getClass().getCanonicalName());
            classLoader = classLoader.getParent();
        }
    }
}

将这个web应用通过方式配置在server.xml中,代码如下

    <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
            <Context path = "/examples" docBase = "E:workspacewebTest" reloadable = "true"/>

上面这段代码打印出来:

org.apache.catalina.loader.WebappClassLoader
org.apache.catalina.loader.standardClassLoader
sun.misc.Launcher$AppClassLoader
sum.misc.Launcher$ExtClassLoader

可见,是由WebappClassLoader加载的。

如果,将一个web应用直接放在webapp目录下,那么tomcat就通过standardClassLoader直接加载,而不是通过WebappClassLoader来加载。