`
dicmo
  • 浏览: 66967 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Coder 爱翻译 How Tomcat Works 第八章 第一部分

    博客分类:
  • j2ee
阅读更多
Chapter 8: Loader

在前几章你有一个简单的加载器实现,它用来加载servlet类。本章讲解标准web应用加载器。一个serlvet容器需要一个定制的加载器,它不能简单地使用系统类加载器,因为它不能确定servlet正在运行情况。如果它打算加载所有的servlet和其它需要的类,servlet通过系统类加载器,然后一个servlet应该可以访问运行在JVM中CLASSPATH环境变量下的任何类和类库。这样就会出现安全问题。一个servlet只允许加载在WEB-INF/classes目录和它子目录下的类和部署在WEV-INF/ilb目录下的类。这就是为什么一个servlet容器需要有它自己的加载器。在servlet容器里的每一个web应用程序有自己的加载器。一个加载器应用某种规则来加载类。在Catalina里,一个加载器由org.apache.catalina.Loader接口代表。

另外一个Tomcat需要它自己的加载器的原因是:支持在一个在WEB-INF/classes和WEB-INF/lib下的类被改变时可以动态重新部署。在Tomcat中的类加载器的实现使用一个独立的线程来检查servlet和类文件的时间戳。要支持动态重新加载,一个类加载器必须实现org.apache.catalina.loader.Reloader接口。

本章第一部分简单回顾java中的类加载机制。接下来讲述所有加载器都必须实现的Loader接口。本章的应用程序也演示了Tomcat怎么使用它的加载器。

本章的两项扩展:repository 和resources。一个repository是类加载器将要搜索的地方。Resources参考一个类中的DirContext对象,DirContext对象的文档库(document base)指向context的文档库。

Java Class Loader

每次你创建一个java类的实例,类首先会被加载到内存。JVM使用一个类加载器来加载类。通常是类加载器搜索一个核心java类库和包含在CLASSPATH环境变量的所有目录。如果没有发现所需要的类。它将抛出一个java.lang.ClassNotFoundException异常。

从J2SE1.2起,JVM有三个类加载器:bootstrap class loader,(自启动类加载器) extension class loader,(扩展类加载器)和system class loader(系统类加载器)。三个类加载器中相互存在父子关系:自启动类加载器位于层次结构的最高层,而系统类加载器位于最底层。

自启动类加载器由JVM使用。当你使用java.exe程序时,它就开始工作。这样,它必须使用native code来实现。因为它用来加载JVM所需要的类。它也负责加载所有的核心java类,像:java.lang 和java.io包下的类。自启动类加载器搜索核心类库,像:rt.jar, i18n.jar等。
这些类库的搜索依赖于JVM的版本和操作系统。

扩展类加载器负责加载在标准扩展目录下的类。这样使程序员的操作变得更加容易,因为你只需要把JAR文件按复制到扩展目录下就可以了,这些jar文件就会被自动地搜索。扩展类库在不同的供应商之间是有区别的。Sun的JVM的标准扩展目录是/jdk/jre/lib/ext。
系统类加载器是默认的类加载器,它搜索CLASSPATH环境变量下的目录和JAR文件。

但是,JVM使用哪个类加载器呢?使用角色委托模式,这样会更安全。每次加载一个类,系统类加载器首先会被调用。但是它不会马上加载这个类。它那这个加载任务委派给它的父类加载器,扩展类加载器。而扩展类加载器也把这个任务委派给它的父类加载器,自启动类加载器。自启动类加载器总是给加载一个类的第一次机会来加载它。如果自启动类加载器不能找到需要的类,扩展类加载器就试图去加载这个类。如果扩展类加载器也加载失败,系统类加载器就接手这个加载任务。如果最后系统类加载器也不能找到这个类,就会抛出java.lang.ClassNotFoundException异常。为什么需要以这样的来回方式的加载一个类?

角色委托模式对安全控制十分重要。你可以使用安全管理器来限制访问某一个目录。一些有恶意企图的人可以写一个叫做java.lang.Object的类,它就可以用来访问你在硬盘上的任何目录。因为JVM信任这个java.lang.Object类,所以它不会监控它的活动。结果,如果这个java.lang.Object允许加载,安全管理器很容易被麻痹,这个类就会蒙混过关。幸运的是,因为角色委托模式的存在,这种情况就不会发生。

当一个特殊的java.lang.Object类在程序的某个地方被调用。系统类加载器把这个请求委派给扩展类加载器,然后扩展类加载器委派给自启动类加载器。自启动类加载器搜索它的核心类库,找到标准java.lang.Object,然后实例化它。结果,这个特殊的java.lang.Object将永远不会被加载。

Java中的类加载机制允许你可以通过继承抽象类java.lang.ClassLoader来写自己的类加载器。Tomcat需要一个定制的类加载器的原因就是:

 To specify certain rules in loading classes. 明确某种加载类的规则
 To cache the previously loaded classes. 缓存一个之前加载过的类
 To pre-load classes so they are ready to use. 预加载一个我们将要使用的类
2
0
分享到:
评论
3 楼 dicmo 2010-12-07  
he_wen 写道
兄弟你的速度怎么与我的是同步的。。。

有疑问?我一个月前看是看这本书的。然后有时间理解后接顺带翻译下
2 楼 he_wen 2010-12-07  
兄弟你的速度怎么与我的是同步的。。。
1 楼 mozhengxin 2010-12-07  
不错 继续翻译完吧!

相关推荐

    How tomcat works 中文版

    � jsp / servlet 开发人员,想了解 tomcat 内部机制的 coder ; � 想加入 tomcat 开发团队的 coder ; � web 开发人员,但对软件开发很有兴趣的 coder ; � 想要对 tomcat 进行定制的 coder 。 在阅读之前,希望...

    tomcat原理解析书(how-tomcat-works)中文版

    适合读者 1.jsp/servlet 开发人员,想了解 tomcat 内部机制的 coder; 2.想加入 tomcat 开发团队的 coder; 3.web 开发人员,但对软件开发很有兴趣的 coder; 4.想要对 tomcat 进行定制的 coder。

    Bad Programming Practices 101 Become a Better Coder by Learning How (Not) epub

    Bad Programming Practices 101 Become a Better Coder by Learning How (Not) to Program 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

    The Clean Coder

    Martin, "The Clean Coder: A Code of Conduct for Professional Programmers" Prentice Hall | 2011 | ISBN: 0137081073 | 256 pages | PDF | 6 MB Programmers who endure and succeed amidst swirling ...

    phpcoder.rar

    phpcoder安装包。 直接下载安装即可。

    HDL-Coder详细教程

    HDL-Coder详细教程,有详细例子,源于官方例程,中文教程

    php coder编辑器

    PHPCoder用于快速开发和调试PHP应用程序,它很容易扩展和定制,完全能够符合开发者的个性要求.PHPCoder是一个非常实用的,功能强大的编程环境,而且它是免费的!

    simulink hdl coder 用户手册pdf

    HDL CODER 的用户手册,学习hdl coder参考用书,详细介绍了用simulink开发fpga的过程

    MediaCoder答题器

    MediaCoder答题器

    coder的建表语句

    coder的建表语句

    Embedded Coder.rar

    texasinstrumentsc2000.mlpkginstall 支持TI的C2000系列工具包,要求MATLAB R2017a及其以上版本。 安装方法:打开matlab,调整路径到mlpkginstall文件所在目录;在current folder窗口里双击mlpkginstall文件即可开始...

    mediacoder专业版

    mediacoder 5685专业版,无普通版的限制

    MediaCoder使用说明文档

    MediaCoder使用说明文档, mediaCoder usermanual,

    range coder.pdf

    range coder, algorithm, compressing.

    MediaCoder.5755专业破解版

    MediaCoder行业版一款针对VOD及KTV视频点播行业开发的,用于转换和处理带有多音轨内容的视频节目的软件。它具备业界领先的视频编码引擎,在高性能转码的同时保持高画质,并通过丰富的视频滤镜增强画面视觉效果。作为...

    matlab Embedded Coder Getting Started Guide.pdf

    Embedded Coder用于产生嵌入式处理器、目标快速原型板和大规模生产中使用的微处理器的可读的、紧凑的、快速的C和C++代码。Embedded Coder支持附加的MATLAB Coder™和Simulink Coder™配置选项,以及对生成代码的功能...

    MediaCoder64位专业破解版

    MediaCoder-Premium-x64 MediaCoder是最早开始使用GPU进行视频编码加速的影音转码软件之一。通过将原本完全依赖CPU的计算工作转移到GPU上进行,H.264和H.265编码所需的时间被大幅缩短。

    AI自动生成SQL语句的开源代码 sqlcoder-main.zip

    开源的AI自动生成SQL语句源代码,这款SQLCoder-70B-Alpha在文本到SQL的转换能力上超越了包括GPT-4在内的所有通用模型,它能更准确地理解你的需求,并生成相应的SQL查询。SQLCoder2和SQLCoder-7B模型已经向公众开放,...

    Mediacoder 使用帮助文档

    Mediacoder 入门使用说明+各种编码常用参数设置。

Global site tag (gtag.js) - Google Analytics