【发布时间】:2012-01-10 22:35:09
【问题描述】:
我创建了简单的 Java Servlet:WelcomeServlet.java。
然后,我尝试通过以下方式编译此文件:
javac WelcomeServlet.java
结果我看到编译错误:
包 javax.servlet 不退出
我尝试通过 Google 找到解决此错误的方法。我找到了答案的第一部分:java 编译器没有看到 servlet-api.jar 文件。
我知道,它的 lib 文件夹中的 Apache Tomcat 包含 servlet-api.jar 文件。
所以,我有这个文件,但我必须把这个文件复制到哪里??
我尝试不同的文件夹:
echo %JAVA_HOME%
C:\Program Files\Java\jdk1.6.0_26
%PATH% 包含这一行:C:\Program Files\Java\jdk1.6.0_26\bin
所以,我复制:
%JAVA_HOME%\bin
%JAVA_HOME%\lib
%JAVA_HOME%\jre\lib
并导致相同的错误。 只有在我将 servlet-api.jar 复制到目录中之后: %JAVA_HOME%\jre\lib\ext
编译成功。
我的问题:为什么?为什么我必须复制到文件夹 %JAVA_HOME%\jre\lib\ext ??
这个时刻在文档中的什么地方描述?
还有其他问题,我们有一些官方文档或规范来描述 jdk 文件夹的文件夹结构?
【问题讨论】:
-
必须在类路径中放置servlet JAR。
-
您应该永远复制/移动现有库。这只会导致运行时类加载灾难。您必须通过指定代表类路径的
-cp或-classpath参数来告诉Java 编译器它们在哪里(它只是指向依赖类和JAR 的磁盘文件系统路径的集合)。请撤消所有复制/移动操作,并保持 JRE 和 Tomcat 的/lib文件夹不受影响。