2

我知道这是一个常见的错误,但请耐心等待。我已经解决了 CLASSPATH 问题,但我认为这不是问题所在。我收到这样的错误。

./src/process.java:2: package javax.servlet does not exist
import javax.servlet.*;

我安装了 Tomcat 和 Java SDK,并且我知道 Tomcat 应该提供 servlet API。但它到底在寻找什么文件?

我有以下设置: JAVA_HOME=/usr/java/jdk1.6.0_16 CLASSPATH=/usr/share/java;/usr/share/java/tomcat6

tomcat 的基本目录:/usr/share/tomcat6 在这个目录中,/usr/share/tomcat6/lib 只是一个指向 /usr/share/java/tomcat6 的符号链接

tomcat6-servlet-2.5-api-6.0.18.jar 在 /usr/share/java/tomcat6 中,还有什么我需要告诉 javac 以便它使用这个库吗?我还需要另一个库吗?

对于背景,我正在尝试运行一个 hello world servlet。代码如下:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class process extends HttpServlet {

public void doGet( HttpServletRequest request, 
                   HttpServletResponse response)
              throws ServletException, IOException {

    PrintWriter out = response.getWriter();
    out.println("Hello World");

}
}

当我用 javac 编译它时,我得到以下错误(其中这是根本原因):

./src/process.java:2: package javax.servlet does not exist
import javax.servlet.*;
^
./src/process.java:3: package javax.servlet.http does not exist
import javax.servlet.http.*;
^

我尝试使用 -cp 选项在命令行上指定类路径,但最终得到了相同的结果。

4

2 回答 2

5

您需要将您的类路径设置为专门指向您的 JAR:

CLASSPATH=/usr/share/java/tomcat/tomcat6-servlet-2.5-api-6.0.18.jar

当您在类路径中指定一个文件夹时,它仅用于定位该文件夹中的所有。JAR 本身就是类的库(打包文件夹,如果你愿意的话),因此必须单独列出。因此,例如,您可以执行以下操作:

CLASSPATH=/some/location/myjar1.jar:/other/location/myjar2.jar:/some/classes/folder

在这种情况下,您可以使用myjar1.jar,myjar2,jar和目录中的所有类。/some/classes/folder如果您有myjar3.jarin /some/classes/folder,则上述声明不会将其添加到类路径中。

更新正如McDowell所指出的,Java 6 允许在类路径中使用通配符,这将获取指定文件夹中的所有 jar。通配符仅适用于JAR ,除非再次指定没有通配符的文件夹,否则不会提取类。通配符也不是递归的。所以:

CLASSPATH=/loc1/*:/loc1:/loc2/*

将使文件夹中的所有 jar 和所有类以及/loc1文件夹中的所有 jar(但不是类)/loc2可用。/loc1/nested/some.jar不会拾取更深的嵌套罐子 ( )。

于 2009-10-29T17:22:53.810 回答
0

你在控制台或 *.bat 文件中写一些东西。

SET CLASSPATH=C:\java\apache-tomcat-7.0.53\lib\servlet-api.jar

于 2014-04-21T08:16:15.580 回答