学习Tomact很长时间了,还是对Tomact整个的类加载过程不太明白。今天就来总结一下,其实非常的简单。

 首先看一下Tomact的目录结构

 

目录 描述
/bin存放在Window平台及Linux平台上启动和关闭Tomact的脚本
    /conf 存放Tomact服务器的各种配置文件,其中最重要的配置文件是server.xml
/lib存放Tomact服务器及所有Web应用都可以访问到的JAR文件
/logs存放Tomact的日志文件
/webapps在Tomact上发布JavaWeb应用时,默认把WEB应用文件存放于此目录下
/WorkTomact的工作目录,Tomact在运行时把生成一些工作工作文件放于此目录下。


 看了上面的目录结构后,咱们再来看一下一般Web应用里面的目录结构

 

 上面就是一个简单的Web项目的目录结构,最后web项目部署到Tomact后,会把.java文件最后编译成.class文件。在这里顺便说一下,web的输出路径。

 最后的项目,经过Tomact编译后,会把所有的.java文件,输出到一个WEB-INF/classes文件夹中,其中放置就是编译好的.class文件,以及项目中用到的各种配置文件。并且在WEB-INF中也放置这我们需要的jar,在WEB-INF/lib目录中,还有就是我们的需要的JSP文件等等。

 综上所述,用Myelicpse或者其他编译工具,来编译我们web项目的话,最终会把项目所有的东西都生成到WEB-INF中,那么此时就有疑问了,在Tomact中也有lib,项目中也有lib,这两者有什么区别呢?

 Tomact的lib子目录,存放的JAR文件不仅能被Tomact访问,还能被所有在Tomact中发布的JavaWeb项目应用所访问 JavaWeb应用的lib子目录,存放的jar文件只能被当前的JavaWeb项目所访问。

 看了这么多,估计挺晕的,下面来举个例子,来说明一下Tomact中类加载器是如何工作的。

  下面就以Tomact需要加载一个Sample的类为例

 (1)在JavaWeb应用的WEB-INF/classes目录下查找Sample.class文件
 (2)在JavaWeb应用的WEB-INF/lib目录下的JAR文件中查找Sample.class文件
 (3)在Tomact的lib子目录下直接查找Sample.class文件
 (4)在Tomact的lib子目录下的JAR文件中查找Sample.class文件
   如果上述都没有找到的话,就会抛出异常。

  说了这么多,了解了Tomact的类加载顺序的话,也给我我们一点启示,如果以后做分布式系统的话,可以把公共的jar都放置到Tomact的lib目录中,那么此时就可以减少每个在Tomact中发布模块的大小,减少了服务器的压力。

Logo

更多推荐