我知道这是一个常见错误,但请耐心等待。我一直在追求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选项在命令行上指定类路径,但我最终得到了相同的结果。
答案 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.jar
,myjar2,jar
和/some/classes/folder
目录中的所有类。如果myjar3.jar
中有/some/classes/folder
,则上述声明不将其添加到类路径中。
更新正如McDowell所指出的那样,Java 6允许类路径中的wildcards能够获取指定文件夹中的所有jar。通配符仅适用于 JAR ,除非再次指定没有通配符的文件夹,否则将选择 类。通配符也不是递归的。所以:
CLASSPATH=/loc1/*:/loc1:/loc2/*
会使/loc1
文件夹中的所有jar和所有类以及/loc2
文件夹中的所有jar(但不是类)都可用。
/loc1/nested/some.jar
)。
答案 1 :(得分:0)
你在控制台或* .bat文件中写东西。
SET CLASSPATH = C:\ java \ apache-tomcat-7.0.53 \ lib \ servlet-api.jar