java开发中 为啥有些包放在lib文件夹中就行 而有些包要配置到classpath环境变量中去?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java开发中 为啥有些包放在lib文件夹中就行 而有些包要配置到classpath环境变量中去?相关的知识,希望对你有一定的参考价值。

比如 网站开发中 连接数据库时直接将驱动程序放在lib中就行 而写servlet时要把servlet-api.jar配置到classpath环境变量中去?

java web项目中,eclipse会自动到lib文件夹中查找需要依赖的jar,所以把驱动程序放到lib文件夹中去就可以,而servlet-api.jar是Tomcat内置的jar包,但是eclipse是缺省的,也就是需要指定该jar包的位置,即需要配置classpath,如果你拷贝该jar包到lib文件夹中,在运行时,Tomcat有如下加载顺序。

Tomcat的class加载的优先顺序一览
1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。
2.环境变量CLASSPATH中的jar和class文件。
3.$CATALINA_HOME/common/classes下的class文件。
4.$CATALINA_HOME/commons/endorsed下的jar文件。
5.$CATALINA_HOME/commons/i18n下的jar文件。
6.$CATALINA_HOME/common/lib 下的jar文件。
(JDBC驱动之类的jar文件可以放在这里,这样就可以避免在server.xml配置好数据源却出现找不到JDBC Driver的情况。)
7.$CATALINA_HOME/server/classes下的class文件。
8.$CATALINA_HOME/server/lib/下的jar文件。
9.$CATALINA_BASE/shared/classes 下的class文件。
10.$CATALINA_BASE/shared/lib下的jar文件。
11.各自具体的webapp /WEB-INF/classes下的class文件。
12.各自具体的webapp /WEB-INF/lib下的jar文件。
它会在第12步之前就加载了你需要的servlet-api.jar,所以不需要拷贝到lib文件夹中,说白了,配置classpath是为了让eclipse在你编写程序时找到那个jar。
参考技术A java开发中,eclipse会自动到lib文件夹中查找需要依赖的jar,所以把驱动程序放到lib文件夹中去就可以,而servlet-api.jar是Tomcat内置的jar包,但是eclipse是缺省的,也就是需要指定该jar包的位置,即需要配置classpath,如果拷贝该jar包到lib文件夹中,在运行时,Tomcat有如下加载顺序。具体操作建议去千锋教育系统学习,千锋教育实力雄厚,师资力量强大,值得每位学员的信任!

Java开发中经常遇到的小问题:
1、java.lang.ArithmeticException
算术运算异常, 因为除数为0,所以引发了算数异常。
2、java.lang.StringIndexOutOfBoundsException: String index out of range: -1
这是截取字符串substring()产生的下标越界异常。原因是可能是字符串为空,或长度不足1。
3、java.lang.NullPointerException空指针异常
出现该异常的原因在于某个引用为null,但却调用了它的某个方法,这时就会出现该异常。

想要了解更多有关java开发的相关信息,推荐咨询千锋教育。千锋励精图治,不改教育初心。十一年来,千锋以政策为引导,不断完善国内特色现代职业教育体系建设,充分发挥教研师资队伍使命,构建品质教育,加大创新型人才培养力度,为经济发展提供智力人才和智力支撑,成为新时期职业教育发展的新方向,在同行业中有很高的美誉度。实力强大,请每位学员放心选择!

java访问mysql数据库,为啥总是没有办法引入mysql的驱动包?

使用java访问mysql数据库,我把驱动包mysql-connecter-java5.0.jar放在了“F:\Java\lib”目录下,然后修改了classpath:“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\lib\servlet-api.jar;F:\Java\lib\mysql-connecter-java5.0.jar;”,编译时可以通过,但是在运行时总是抛出异常:
E:\>java ConnectToMySQLTest
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at ConnectToMySQLTest.main(ConnectToMySQLTest.java:9)

说是找不到这个包,请问该怎样解决?
恩,谢谢楼下的两位,可是我想在dos下编译,而且也不知道是哪里错了~

看的出来你是在编写Jsp,用的是tomcat,mysql-connecter-java5.0.jar是放在Apache Software Foundation\Tomcat 6.0\lib下,即可! 参考技术A 我想知道你是用什么软件开发的?
如果是用myeclipse的话你就直接导入mysql驱动的JAR包就可以了。
或者放在“项目……\WEB-INF\lib”刷新一下重新编译应该就可以了。
参考技术B 是用的eclipse或者myeclipse么?要是的话直接右键-build path-add external 。。。 把这个包加进来就行。

以上是关于java开发中 为啥有些包放在lib文件夹中就行 而有些包要配置到classpath环境变量中去?的主要内容,如果未能解决你的问题,请参考以下文章

idea中为啥配置了maven还需要额外的jar包必须放在web-inf的lib中吗

为啥我写的Servlet文件找不到javax.servlet包

java访问mysql数据库,为啥总是没有办法引入mysql的驱动包?

为啥有些程序需要 .lib 和 .dll 才能工作

导入了Gson.jar为啥会用不了?

servlet在哪个包下