一 Tomcat:正统的类加载器架构
目录结构中有3组目录(“/common/*”,“/server/*”和“/shared/*”)可以存放java类库,加上web应用程序自身的目录“/WEB-INF/*”,一共4组
放置在/common目录中:类库可悲Tomcat和所有Web应用程序共同使用
放置在/server目录中:类库可被Tomcat使用,对所有Web应用程序不可见
放置在/shared目录中:类库可被所有的Web程序共同使用,但对Tomcat自己不可见
放置在/WebApp/WEB-INF目录中:类库仅仅可以被此Web应用程序使用,对Tomcat和其他Web应用程序都不可见
WebApp类加载器和Jsp类加载器通常会存在多个实例,每个Web应用程序对应一个WebApp类加载器,每个JSP文件对应一个Jsp类加载器
当服务器检测到JSP文件被修改时,会替换掉目前的JasperLoader的实例,并通过再建立一个新的Jsp类加载器来实现Jsp文件的HotSwap功能
二 OSGi:灵活的类加载器架构
OSGi中的每个模块(称为Bundle)与普通的Java类库差别不大,两者一般都是JAR格式封装,并且内部存储都是Java Package和Class。但是一个Bundle可以声明它依赖的Java Package(通过Import-Package描述),也可以声明它允许到处发布的Java Package(通过Export-Package描述)。