如何正确编译servlet & 两个jre目录和三个lib目录

摘要:
有三个lib目录!包含javax的jar包。servlet应该放在其中的某个位置。首先,在tomcat的安装目录下,找到servlet-api.jar。用winrar解压包后,可以看到内部结构是:javax-servlet-http与import语句的结构一致!经过验证,将servlet-api.jar包复制到jdk下jre下lib下的ext目录后,import语句编译成功!即:C:Program Files Java jdk1.5.0_08 jre lib ext.从外部导入的其他jar包都放在这个目录中。这两个jr基本相同,略有不同。两套jre适用于不同的工作职责!不是最外面的jre。Java、web、start等使用通用jre。

    以下文章转载自a personal blog:For Future,因为昨天下午在cmd模式下编译servlet失败,后来在网上找到这篇文章帮我解决了该问题,我觉得挺值得收藏的,并且这篇文章对"两个jre"和"三个lib"的功能简单扼要的解释清楚了.
-----------------------------------------
    lib目录下放置着jar包。程序中的import语句找的就是这些文件!例如:import javax.servlet.RequestDispatcher;
    问题在于,在cmd模式下编译,系统会提示:CheckAccount.java:5: 软件包 javax.servlet 不存在!

    在安装jdk之后,仔细观察下安装路径下的文件夹,其中共计两处包含jre目录!共有三处lib目录!包含javax.servlet的jar包就应该被安置在其中的某一处。首先在tomcat的安装目录下,找到servlet-api.jar(位于D:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar)。这个包用winrar解压之后看到内部结构为:
        javax\servlet\http
    
同import语句的结构一致!

    我的硬盘里,lib文件夹的位置如下:
        D:\Program Files\Java\jdk1.6.0_02\jre\lib
        D:\Program Files\Java\jre1.6.0_02\lib
        D:\Program Files\Java\jdk1.6.0_02\lib
    分别为jdk下的libjre下的libjdk下的jre下的lib

    经过验证,把servlet-api.jar包拷贝进入jdk下的jre下的lib下的ext目录后,import语句顺利通过编译!即:C:\Program Files\Java\jdk1.5.0_08\jre\lib\ext相关的,其他从外部导入的jar包,都放在这个目录下。例如:在工程中导入mysql驱动jar包“mysql-connector-java-3.0.17-ga-bin.jar”,其本质是拷贝了该jar包到ext目录下。其他情况,再添加oracle驱动jar包也类似处理。

再来解释下,为什么会有两处jre目录?三个lib目录分别什么作用?
    
安装JDK后,Java目录下有jdk和jre两个文件夹,但jdk下还有一个jre文件夹,而且这个jre比前面那个jre在bin目录下多了个server文件夹!
    普通用户装jre即可。开发人员需要安装jdk,其中包括jre。所以jdk目录下包括jre目录。两个jre大体相同,有细微的差别。
    两套 jre ,是针对不同的工作职责!不同的 jre 负责各自范围的内容。
    当用户只需要执行 java 的程序时,那么C:\Program Files\Java\jre1.5.0_08的 jre 就 ok !
    当用户是 java 程序员,则需要 java 开发环境。编译时,系统就会优先去找C:\Program Files\Java\jdk1.5.0_08\bin下的“ java 、 javac ”这些命令所在目录或者他们的父目录的 jre 。即开发环境下运行的是 jdk 下的 jre 。

再说三个lib目录:
    
JDK下的lib包括java开发环境的jar包,是给JDK用的,例如JDK下有一些工具,可能要用该目录中的文件。例如,编译器等。
    JRE下的lib只是运行java程序的jar包,是为JVM运行时候用的。包括所有的标准类库,和扩展类。
    JDK下的JRE下的lib是开发环境中,运行时需要的jar包。最典型的就是导入的外部驱动jar包。因为编译时,系统找的是jdk下的jre。而不是最外层的jre。
-----------------------------------------
    最后我在这里补充几点:
    1. 在使用Eclipse的时候不需要指定的CLASSPATH,Eclipse会自己搜索.
    2. 独立目录下的jre是通用jre,安装时是可选的(选择了,则会覆盖已有版本)。jdk目录下的jre则是必须的。如果你在eclipse里指定jdk的路径(jre的路径不用你指定,会自己去找的),那么用的就是这个jre。而java, web, start等,用的则是通用jre。

免责声明:文章转载自《如何正确编译servlet & 两个jre目录和三个lib目录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇managed, unmanaged (托管,非托管)音乐播放新贵—Exaile on Fedora 8下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VC++程序调试

1前言 当程序的运行结果与程序员预想的不一样,如死机,计算值不正确,出现内存访问冲突等,就需要进行调试 2进行调试前的准备工作 因为程序调试是一项十分耗时的工作,很难估计出将要花费多长时间,因此在调试前,一定要做好充分准备,尽量避免做无用功: 1.构造好的测试步骤,让程序出错有规律性或出错的概率越大越好 2.被调试程序及相关库是最符合要求的版本 3.工程临时...

交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别

自己之前一直没搞清楚这两个交叉编译器到底有什么问题,特意google一番,总结如下,希望能帮到道上和我有同样困惑的兄弟….. 一. 什么是ABI和EABI 1) ABI: 二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture) 在计算机中,应用二进制接口...

青蛙学Linux—软件安装

与Windows下通过双击EXE安装包安装软件不同,Linux下可以使用多种方法来安装软件。由于Linux开源的特性,所以在Linux上运行的很多软件都是开源软件,开源软件一般都会提供源码,有了源码我们就可以自己通过编译源码来安装软件;不同的Linux发行版提供了不同的软件包管理方式,如RedHat所使用的RPM和Debain使用的dpkg包管理器,通过包管...

第二十一章 C++中的头文件和源文件

一、C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件...

Java技术自学经验分享

随着互联网行业的高速发展,编程无疑越来越深入人心。而Java是当前世界非常流行的编程语言之一,代表着很高的薪资和很好的待遇。现在社会也确实有很多人渐渐的对java产生了不小的兴趣,也想在Java这个领域分一份羹,但苦于入不得其门,本文针对Java初学者介绍一下Java的学习方法。 近期对Java这门语言也有了比以前更深刻的认识,学习了Java的一些基本语法,...

IDEA手动增加lib目录

IDEA手动增加lib目录 IDEA手动增加lib目录 赱乂2018-05-29 17:01:4719315收藏4 分类专栏:idea开发工具 版权 1、在src下创建lib目录,将jar包放入其中 2、右键lib文件夹,选择Add as Library即可...