无法导入javax.servlet

时间:2009-10-29 17:19:55

标签: tomcat servlets import javac

我知道这是一个常见错误,但请耐心等待。我一直在追求CLASSPATH问题而我不会认为就是问题。我收到这样的错误。

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

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

我有以下设置: JAVA_HOME =的/ usr /爪哇/ jdk1.6.0_16 CLASSPATH =的/ usr /共享/ JAVA;在/ usr /共享/爪哇/ 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选项在命令行上指定类路径,但我最终得到了相同的结果。

2 个答案:

答案 0 :(得分:5)

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

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

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

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

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

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

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

会使/loc1文件夹中的所有jar和所有类以及/loc2文件夹中的所有jar(但不是类)都可用。

。将无法获取更深层次的嵌套jar(/loc1/nested/some.jar)。

答案 1 :(得分:0)

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

  

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