免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1685 | 回复: 1
打印 上一主题 下一主题

关于classpath设置问题的解答 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-08-03 00:36 |只看该作者 |倒序浏览
一、原理     
JVM在运行时会产生三个ClassLoader, 它们分别是Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader:

Bootstrap ClassLoader 加载核心类库static const char classpathFormat[] ="%/lib/rt.jar:""%/lib/i18n.jar:""%/lib/sunrsasign.jar:""%/lib/jsse.jar:""%/lib/jce.jar:""%/lib/charsets.jar:""%/classes";这里我们可看到为什么在classpath里为什么不加载这些类
Extension ClassLoader 加载扩展类,即/lib/ext中的类。
AppClassLoader 加载Classpath中指定的类。
从上面可以看出,所有web应用程序的类都是AppClassLoader来加载的,三者的关系为:AppClassLoader的Parent是ExtClassLoader,而ExtClassLoader的Parent为Bootstrap ClassLoader。加载一个类时,首先BootStrap先进行寻找,找不到再由ExtClassLoader寻找,最后才是AppClassLoader。ClassLoader这种加载类的模型被称为是委托模型。
 从上面的理论可以看到,一般情况下web应用程序的类都是通过 AppClassLoader来进行加载的,当然你也可以选把web应用程序类放在扩展目录下让ExtClassLoader去加载,这样做当然很不适合,因为一般情况下的web程序应用类由于关联的关系都必须按一定的目录结构存放,所以必须让AppClassLoader来加载这些类了。
 这是你选择设置classpath的理由。
二、方法
 为了让AppClassLoader找到你需要应用的类,你必须用classpath指定类的路径。例如sybase的驱动放在E:\weblib\msbase.jar的这个包里,那么在classpath里指定一个路径:E:\weblib\msbase.jar,当应用程序要使用了sybase的驱动时自动在这个包里去寻找,反之,如果没有classpath的这个设置,试想AppClassLoader从哪里去找你要应用的类呢?当然要注意的AppClassLoader寻找是一种委托模型(原理篇里已说明了寻找的次序)。依此类推所有你需要用的应用类你都必须在classpath里进行设置。

我这里有一个例子:
 环境是e:\tomcat 4.1 ,e:\jbuilder8\jdk1.4,e:\sybase数据库
e:\sybase\ASEP\3pclass.zip;e:\sybase\ASEP\monclass.zip;E:\jbuilder8\jdk1.4;E:\jbuilder8\jdk1.4\lib;E:\jbuilder8\jdk1.4\jre\lib;e:\Oracle\Ora81\orb\classes\yoj.jar;e:\Oracle\Ora81\orb\classes\share.zip;e:\Oracle\Ora81\orb\classes\share.zip;e:\Tomcat 4.1\common\lib\servlet.jar;e:\Oracle\Ora81\orb\classes\yoj.jar;e:\Oracle\Ora81\orb\classes\share.zip;e:\weblib\jConnect55.tar;e:\weblib\jConnect55\classes\jconn2.jar;e:\weblib\jConnect55\classes\jTDS2.jar;e:\weblib\jConnect55\classes;e:\weblib\classes12.zip;e:\weblib\nls_charset12.zip;e:\weblib\mssqlserver.jar;e:\weblib\msbase.jar;e:\weblib\msutil.jar;E:\Tomcat 4.1\webapps\test\WEB-INF\classes;E:\Tomcat 4.1\webapps\web1000\WEB-INF\classes;E:\Tomcat 4.1\webapps\web1000\WEB-INF\classes\com;
理解了这个以后,剩下的工作就是满世界去找可以满足你的需求的类。
希望我已经说明白这个问题了。

论坛徽章:
0
2 [报告]
发表于 2003-08-03 15:03 |只看该作者

关于classpath设置问题的解答

Your explanation is very clear.
It's very helpful for me.

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP