`
lzh166
  • 浏览: 298035 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于类加载器的一个应用测试

阅读更多
新建一个web项目然后新建一个servlet,在servet的doGet方法中我们循环的遍历出所有的类加载器(由低到高)
ClassLoader loader = this.getClass().getClassLoader();
		while(loader != null){
			out.println(loader.getClass().getName()+"<br>");
			loader = loader.getParent();
		}


接着将这个web项目部署到web应用服务器上(tomcat5.0),访问结果如下:
WebappClassLoader
StandardClassLoader
AppClassLoader
ExtClassLoader
好了,通过结果我们可以看出它是由WebappClassLoader加载器加载的,其上面还有四个类加载器,其中有三个是jdk提供的(BootStrap是内嵌在虚拟机中),下面我们就将servlet打成.Jar包放到我们的tomcat所用的jdk安装目录下的jre/lib/ext/下中让
ExtClassLoader去加载,以上操作完成后下面我们就再次访问这个servlet
结果出错了。http500错误!
下面我们分析一下出错原因:当ExtClassLoader加载该serlvet程序的时候,会首先根据类加载器的委派机制交给它的父亲(BootStrap)去加载,由于它父亲没有找到该类,所以就又交给它来加载,当他加载这个servlet的时候,他发现我们的这个servlet类extends HttpServlet所以它就又去加载httpservlet类,结果确没有找到,所以就报错了,因为这个jar包类是由tomcat提供的,因此我们需要拷贝httpservlet类到我们ext目录下,把tomcat lib中的servlet-api.jar拷贝到ext目录下面就可以解决这个问题了。
下面是关于分析原因图:




  • 大小: 32 KB
分享到:
评论

相关推荐

    java类加载器

    该模型规定除了顶层的启动类加载器外,其余的类加载器都应当有一个父类加载器。类的加载请求会首先传递给父类加载器处理,如果父类加载器无法处理,则交给子类加载器处理。这种机制有效地避免了子类加载器去重复加载...

    ModRunJava类加载器可以直接从Maven存储库加载并运行类

    ModRunJava 类加载器将这个功能进一步扩展,使得在运行时也能动态解决类的依赖关系,无需预先将所有依赖打包到一个大的可执行文件中。 使用ModRunJava 类加载器有以下几个主要优点: 1. **实时依赖解析**:当类...

    Java类重新加载101对象类和类加载器Java开发Jav

    然而,如果一个类加载器实例仍然存在,那么由它加载的所有类都不会被卸载,因为它们的类加载器引用链依然存在。因此,合理地管理和设计自定义类加载器是防止内存泄漏的关键。 在“Java类重新加载101对象类和类加载...

    类加载机制PPT+代码

    在实际应用中,类加载器有多种,包括Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和AppClassLoader(应用程序类加载器)。它们按照双亲委派模型工作,即子类加载器先尝试加载类,...

    day17-类加载器和反射.zip

    Java的类加载机制遵循“双亲委派模型”,这意味着当一个类加载器收到加载类的请求时,它会先委托给父类加载器,只有当父类加载器无法找到该类时,子类加载器才会尝试自己去加载。这种设计保证了核心库的稳定性和安全...

    Java Unit Test 和 XML 类加载器

    在实际应用中,单元测试与XML类加载器常常结合使用。例如,在Spring框架中,我们可以编写JUnit测试来验证通过XML配置创建的bean的行为。测试过程中,我们可以利用Spring的TestContext框架,它提供了一种方便的方式来...

    Java之——类热加载

    Java的类加载器分为Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和App ClassLoader(应用程序类加载器)。自定义类加载器可以继承`java.lang.ClassLoader`,并覆盖`loadClass()`...

    websphere6,7上修改类装载顺序为应用程序优先

    WebSphere应用服务器默认的类加载顺序是先从系统类加载器(System ClassLoader)开始,然后是扩展类加载器(Extension ClassLoader),最后是应用程序类加载器(Application ClassLoader)。这种机制可能导致应用中...

    JVM类加载分析

    3. Application ClassLoader:应用类加载器,也称为系统类加载器,负责加载用户类路径(classpath)上的类。 二、类加载过程 类的加载过程包括三个主要步骤:加载、连接和初始化。 1. 加载:读取.class文件并生成...

    Java代码执行漏洞中类动态加载的应用1

    显式加载也被称为类动态加载,它允许我们自定义类加载器加载任意类。 在自定义ClassLoader时,`java.lang.ClassLoader`是所有类加载器的基类。我们可以创建一个继承自ClassLoader的子类,重写其方法来实现特定的...

    Java类加载器层次结构原理解析

    代码测试部分展示了如何通过`ClassLoader.getSystemClassLoader()`获取当前应用的类加载器,然后通过`getParent()`方法向上追溯到扩展类加载器和引导类加载器。由于引导类加载器是原生代码实现,没有对应的Java对象...

    apache-tomcat-8.5.87-src 类加载器WebappClassLoaderBase修改,web项目加密解密

    在Java中,类加载器是根据双亲委托模型工作的,即当一个类加载器收到加载类的请求时,它会先委托给父类加载器,只有当父类加载器无法找到对应的类时,才会尝试自己加载。在Tomcat中,WebappClassLoaderBase的父类...

    Android-Android热修复框架基于类加载机制的代码修复

    - 修复引擎则是一个自定义的类加载器,它会优先加载补丁包中的类,若未找到则回退到系统默认的类加载流程。 3. **基于类加载机制的修复流程**: - 当应用启动时,修复引擎首先加载补丁包,将补丁中的类映射到内存...

    动态编译、加载java类

    3. **URLClassLoader**: 这是Java标准库中的一个类加载器,它可以从指定的URL加载类。通过创建`URLClassLoader`实例并传入包含源码或编译后类的目录或JAR文件的URL,可以在运行时加载新编译的类。 4. **反射...

    类加载机制与动态代理的测试题

    - 双亲委派模型是指在类加载过程中,如果一个类加载器收到了类加载请求,它首先不会自己尝试去加载这个类,而是把类加载请求委托给父类加载器完成。只有父类加载器无法完成加载时,才会尝试自己加载。 2. **Spring...

    动态调用其他Apk中的类so加载失败问题测试工程

    这些类加载器允许我们在运行时加载不在原始 APK 中的类。对于.so文件,Android 提供了`System.loadLibrary()`方法,它会根据应用的`lib`目录加载相应的原生库。 3. **跨应用加载.so问题** 当试图从一个应用(AppA...

    性能调优专题-jvm类加载机制-performance-jvmclassloader.zip

    Java中的类加载器分为Bootstrap ClassLoader、Extension ClassLoader和AppClassClassLoader,以及用户自定义的类加载器。Bootstrap ClassLoader负责加载JDK核心库,Extension ClassLoader加载扩展库,而...

    《 从NoSuchMethodError看jvm编译和class加载方式》的测试项目代码

    即当一个类被加载时,它会首先尝试由启动类加载器(Bootstrap ClassLoader)加载,如果该类不在启动类加载器的路径中,则会委托给扩展类加载器(Extension ClassLoader),再不行则继续委托给应用程序类加载器...

    ClassLoaderTest:测试如何正确关闭类加载器,以便可以关闭基础jar文件上的文件句柄

    `ClassLoaderTest`是一个特定的测试用例,专注于如何有效地管理和关闭类加载器,以防止资源泄漏,特别是针对加载了基础jar文件的情况。当我们使用自定义的URLClassLoader时,尤其需要注意类加载器的生命周期管理,...

Global site tag (gtag.js) - Google Analytics