Tomcat 无法导入javax.servlet

Tomcat 无法导入javax.servlet,tomcat,servlets,import,javac,Tomcat,Servlets,Import,Javac,我知道这是一个常见的错误,但请容忍我。我一直在研究类路径问题,我认为这不是问题所在。我犯了这样的错误 ./src/process.java:2: package javax.servlet does not exist import javax.servlet.*; 我安装了Tomcat和JavaSDK,我知道Tomcat应该提供ServletAPI。但它到底在找什么文件呢 我有以下设置: JAVA_HOME=/usr/JAVA/jdk1.6.0_16 CLASSPATH=/usr/share

我知道这是一个常见的错误,但请容忍我。我一直在研究类路径问题,我认为这不是问题所在。我犯了这样的错误

./src/process.java:2: package javax.servlet does not exist
import javax.servlet.*;
我安装了Tomcat和JavaSDK,我知道Tomcat应该提供ServletAPI。但它到底在找什么文件呢

我有以下设置: 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选项,但最终得到了相同的结果。

您需要将类路径设置为专门指向您的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目录中的所有类都将对您可用。如果您在/some/classes/folder中有myjar3.jar,则上述声明不会将其添加到classpath中

正如所指出的更新,Java6允许在类路径中拾取指定文件夹中的所有JAR。通配符仅适用于JAR,除非再次指定没有通配符的文件夹,否则不会拾取类。通配符也不是递归的。因此:

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

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

您可以在控制台或*.bat文件中编写一些内容

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


值得指出的是,Java6引入了通配符,用于从目录中提取JAR。这里的文档:当时是类路径!:谢谢你澄清这一点。我想我错误地认为类路径类似于LD_LIBRARY_PATH,而不是别的。