网站大量收购独家精品文档,联系QQ:2885784924

7.载入器.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.载入器.ppt

贝毅君 浙江大学软件学院 Java类载入器 Tomcat载入器 Loader接口 WebappLoader 类 创建类载入器 设置仓库 类的重新载入 WebappClassLoader 类 示例应用程序 JVM使用3种类载入器来载入所需要的类。 引导类载入器 – Bootstrap Class Loader (native方法实现) 扩展类载入器 – ExtClassLoader (Launcher类内部类) 系统类载入器 – AppClassLoader (Launcher类内部类) JAVA这3种类载入器之间是父子继承关系,其中引导类载入器位于层次结构的最上层,系统载入器位于层次结构最下层。 Java类加载器 Java类加载器 引导性类加载器用于启动Java虚拟机。当javax被执行的时候,就会启动引导类载入运行JVM所需要的类 - 启动引导类加载 System.getProperty(“sun.boot.class.path”)所指定的路径和jar 。本地代码实现该引导性加载器。 扩展性加载器负责载入标准扩展目录下的类。加载System.getProperty(“java.ext.dirs”)所指定的路径或jar。 系统类加载器是默认的类载入器,它会搜索环境变量CLASSPATH中指明的路径和JVM文件。加载System.getProperty(“java.class.path”)所指定的路径或jar。 Java类加载器 安全性 假如恶意用户编写一个名为java.lang.Object类,它可以访问硬盘中的任意目录。由于JVM 是信任java.lang.Object类的,这样这个类就可以绕过安全管理器了。 解决办法: JVM使用了类载入器的代理模型。当使用了代理模型,当一个类被载入的时候,会将载入类的任务交给其父载入类,然后父载入类(扩展类载入器)将载入任务交给其父载入器(引导类载入器)。引导类载入首先查找载入类,存在则载入,不存在交给扩展载入器载入,扩展载入器找不到再交给系统载入器查找。如果最终都找不到则抛出异常。 Java类加载器 安全管理器让java代码访问外部资源的时候收到一层过滤。可以在java应用启动的时候指定安全策略。 private void test() { ClassLoader currentLoader = this.getClass().getClassLoader(); System.out.println(当前加载器: + currentLoader.getClass().getName()); ClassLoader currentLoaderClassLoader = currentLoader.getClass().getClassLoader(); if (currentLoaderClassLoader == null){ System.err.println(当前加载器的类加载器不存在); System.out.println(); } System.out.println(当前加载器的父加载器: + currentLoader.getParent().getClass().getName()); JAVA类加载模拟测试 if (currentLoader.getParent().getParent() != null) { System.out.println(祖父加载器: + currentLoader.getParent().getParent().getClass().getName()); } } } 通过main方法进行测试 输出结果如下: 当前加载器:sun.misc.Launcher$AppClassLoader 当前加载器的父加载器:sun.misc.Launcher$ExtClassLoader 当前加载器的类加载器不存在 Tomcat类载入器 WebappLoader调用WebappClassLoader内部的loadClass() 方法来加载类 Tomcat使用自定义类载入器的3个原因: 为了在载入器中指定一些规则 Servlet只能引用部署在 WEB-INF/classes目录及其子目录下的类 Servlet只能访问 WEB-INF/lib目录下库 为了缓存已经载入的类 为了实现类的预加载 Tomcat类载入器 Loader接口 Tomcat中载入器必须实现org.apache.catalina.Loader接口 Loader接口方法 addRepository()、findRepository() getClassLoader() setContainer()、getContainer() modifie

文档评论(0)

tangtianxu1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档