tomcat - 导入 javax.servlet 失败

标签 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/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 的符号链接(symbolic link)

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.jarmyjar2,jar/some/classes/folder 目录中的所有类都可供您使用。如果 /some/classes/folder 中有 myjar3.jar,则上述声明不会将其添加到类路径中。

更新McDowell指出,Java 6 允许wildcards在类路径中,它将拾取指定文件夹中的所有 jar。通配符仅适用于JAR,类不会被拾取,除非在没有通配符的情况下再次指定文件夹。通配符也不递归。所以:

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

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

关于tomcat - 导入 javax.servlet 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1645275/

相关文章:

java - 我正在创建一个 Maven 项目并且我是初学者..我收到了这个错误。可以帮助解决这是我的 pom.xml & web.xml

java - JProfiler:无法检测远程 JVM

java - 如何在 Eclipse 中使用 cargo start 启动/停止/重新部署 Maven Web 应用程序

java - 动态调用方法时如何在 servlet 中显示输出

java - response.sendRedirect 应在新窗口中打开

excel - 如何将不同excel文件和工作表中的数据导入一个主excel文件

java - 导入文件夹中更上方的 Java 类

tomcat - Liferay/Tomcat : Where do I put my own selection of spring-framework jars?

java - 如何替换 HttpServletResponse 输出流?

file - 有没有办法让 Arduino 服务器将现有的 .html 文件发送到 Arduino 客户端?