网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Java的模板引擎Velocity初体验.
.关于Struts和Webwork2的比较.
.Java开发工具Eclipse使用中报错的.
.学一个简单的JFreeChart使用方法.
.利用Java Applet编程实现动画特技.
.IsReady 属性.
.关于扰乱器与反编译.
.Java环境中封装多MIDIet程序.
.重锤痛击??兼学习JAVA,娱乐为一.
.运算符总结.
.诊断 Java 代码: 设计“可测试的.
.覆盖DispatchAction中的分发方法.
.使用JDOM操作XML系列文章二 从数.
.JScript 的运算符.
.javaswing9.27课程.
.Java游戏起步:(一)线程与线程.
.Javascript实例教程(19) 使用HoT.
.java日记:学习java一年体会2.
.J2SE综合——关于private构造函数.
.Java的表达式.

Tomcat类加载机制

发表日期:2008-1-5


    Tomcat Server在启动的时候将构造一个ClassLoader树,以保证模块的类库是私有的
    Tomcat Server的ClassLoader结构如下:

代码
  1.     Bootstrap  
  2.                       
  3.     System   
  4.             
  5.     Common  
  6.      /             \  
  7. Catalina  Shared  
  8.                       /    \  
  9.        WebApp1  WebApp2  

其中:
- Bootstrap - 载入JVM自带的类和$Java_HOME/jre/lib/ext/*.jar
- System - 载入$CLASSPATH/*.class
- Common - 载入$CATALINA_HOME/common/...,它们对TOMCAT和所有的WEB APP都可见
- Catalina - 载入$CATALINA_HOME/server/...,它们仅对TOMCAT可见,对所有的WEB APP都不可见
- Shared - 载入$CATALINA_HOME/shared/...,它们仅对所有WEB APP可见,对TOMCAT不可见(也不必见)
- WebApp - 载入ContextBase?/WEB-INF/...,它们仅对该WEB APP可见

每个运行中的线程都有一个成员contextClassLoader,用来在运行时动态地载入其它类,系统默认的 contextClassLoader是systemClassLoader,所以一般而言java程序在执行时可以使用JVM自带的类、$ JAVA_HOME/jre/lib/ext/中的类和$CLASSPATH/中的类,可以使用Thread.currentThread(). setContextClassLoader(...);更改当前线程的contextClassLoader,来改变其载入类的行为

ClassLoader被组织成树形,一般的工作原理是:
1) 线程需要用到某个类,于是contextClassLoader被请求来载入该类
2) contextClassLoader请求它的父ClassLoader来完成该载入请求
3) 假如父ClassLoader无法载入类,则contextClassLoader试图自己来载入
注重:WebApp?ClassLoader的工作原理和上述有少许不同:
它先试图自己载入类(在ContextBase?/WEB-INF/...中载入类),假如无法载入,再请求父ClassLoader完成

由此可得:
- 对于WEB APP线程,它的contextClassLoader是WebApp?ClassLoader
- 对于Tomcat Server线程,它的contextClassLoader是CatalinaClassLoader

 进入讨论组讨论。

上一篇:javascript实现划词标记+划词搜索功能 人气:592
下一篇:使用jetty配置 开发web应用 人气:2034
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐