繁体   English   中英

编译错误:包 javax.servlet 不存在

[英]Compile error: package javax.servlet does not exist

我有一个包,我在其中导入 javax.servlet.* 和 javax.servlet.http.* 当我尝试在命令提示符下编译它时出现错误

包 javax.servlet 不存在

我使用 JDK 1.7.0 和 Tomcat 6.0。

您需要将 Tomcat 的/lib/servlet-api.jar文件的路径添加到编译时类路径中。

javac -cp .;/path/to/Tomcat/lib/servlet-api.jar com/example/MyServletClass.java

类路径是 Java 需要查找导入依赖项的地方。 否则,它将默认为包含为. 在上面的例子中。 ; 是 Windows 的路径分隔符; 如果您使用的是基于 Unix 的操作系统,则需要使用:代替。

如果您仍然面临相同的编译错误,并且您实际上使用的是 Tomcat 10 或更新版本,那么您应该将源代码中的导入从javax.*迁移到jakarta.*

import jakarta.servlet.*;
import jakarta.servlet.http.*;

也可以看看:

如果您正在使用 maven 项目,则将以下依赖项添加到您的 pom.xml

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

它是 JSP 还是 Servlet?

嗯,这两个包实际上并没有像 java.io 那样内置在 Java 中。 相反,它们带有支持 Servlet 的 Web 服务器(例如 Tomcat)。 因此,在 Java 编译器能够编译我们的 Servlet 之前,我们需要让它知道在哪里可以找到这两个包中的类。

所需的类通常存储在名为 servlet.jar 的文件中。 该文件的确切位置取决于您使用的特定 Web 服务器软件,但对于 Tomcat,您可以在 Tomcat 主安装目录的 lib 子目录中找到它(例如 d:\\Program Files\\Apache Group\\jakarta- tomcat-3.2.3\\lib\\servlet.jar)。 为了让 Java 编译器能够编译 Servlet,您需要将此文件添加到 Java 类路径中。 默认情况下,Java 仅在当前目录(“.”)中查找类。 因此, ”。” 是默认的类路径。 如果更改类路径以包含 servlet.jar 文件(Windows 下为“.;d:...\\lib\\servlet.jar”,Unix 下为“.:/usr/.../lib/servlet.jar” ),那么 Servlet 应该可以正常编译。

您可以指定在运行 javac.exe 时使用的类路径,如下所示:

d:\\javadev> javac -classpath ".;d:\\Program Files\\Apache Group\\ jakarta-tomcat-3.2.3\\lib\\servlet.jar" MyServlet.java

或者在 Linux javac 中使用 : 而不是 ;

server1> javac -classpath ".:./servlet/servlet.jar" MyServlet.java

在 linux 环境中,软链接显然不起作用。 您必须使用物理路径。 例如,在我的机器上,我在/usr/share/tomacat7/lib/servlet-api.jar有一个软链接,使用它作为我的类路径参数导致编译失败并出现相同的错误。 相反,我不得不使用/usr/share/java/tomcat-servlet-api-3.0.jar这是软链接指向的文件。

这就是为我解决问题的原因:

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>

从位置YOUR_INSTILLATION_PATH\\tomcat\\lib\\servlet-api.jar复制文件“ servlet-api.jar ”并将该文件粘贴到您的 Java 目录中YOUR_INSTILLATION_PATH\\Java\\jdk1.8.0_121\\jre\\lib\\ext

这将工作(测试)。

JSP 和 Servlet 是服务器端编程。 因为它是像 Tomcat 这样的服务器中的内置包。 这条路可能是明智的

C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\jsp-api.jar
C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar

只是你想做的是按以下方式添加

Right Click> My Computer>Advanced>Environment Variables>System variables

Do> New..> Variable name:CLASSPATH
           Variable value:CLASSPATH=.;C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar;

将 servlet-api.jar 添加到您的类路径中。 它将在 Tomcat 的 lib 文件夹中可用。

这是我发现的。 在我的环境变量中添加 /usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar 作为 Mac 上的 CLASSPATH。

如果使用 bash: ~/.bash_profile $CLASSPATH=/usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar

如果使用 zsh: ~/.zshrc export CLASSPATH="usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar"

立即强制它工作,运行source .bash_profile (或 .zshrc) 或者可以重新启动计算机,它适用于当前用户。

即使在尝试了建议的解决方案之后,它也没有解决我的问题,因为在那里我输入了许多 java 路径实例。

  1. 我从“路径,JAVA_HOME,JRE_HOME”中删除了所有与java相关的路径(不同版本的java)并从新创建。

  2. 我已经设置(路径可能会根据不同的安装而改变)
    一种。 JAVA_HOME 为 C:\\Program Files\\Java\\jdk1.8.0_191
    JRE_HOME 为 C:\\Program Files\\Java\\jdk1.8.0_191\\jre\\lib
    C。 在路径中添加二进制文件路径:C:\\Program Files\\Java\\jdk1.8.0_191\\bin
    d. 类路径为 C:\\apache-tomcat-7.0.93\\lib

  3. 如果在执行更改/创建系统/用户变量时已经打开,请不要尝试在相同的命令提示符下。 关闭它并打开新的。

参考图片: 在此处输入图片说明

发生这种情况是因为java没有提供Servlet-api.jar直接导入,所以你需要像从Tomcat一样从外部导入它,为此我们需要提供我们将从中导入Servlet的lib文件夹的类路径及其相关班级。

对于 Windows,您可以应用此方法:

  1. 打开命令提示符
  2. 类型
 javac -classpath "C:\Program Files\Apache Software Foundation\Tomcat 9.0\lib\*;" YourFileName.java 
     
  1. 它将获取导入 Servlet、HttpServlet 等所需的所有 jar 文件并编译您的 java 文件。

  2. 您可以添加多个类路径 例如。

javac -classpath "C:\Users\Project1\WEB-INF\lib\*; C:\Program Files\Apache Software Foundation\Tomcat 9.0\lib\*;" YourFileName.java

http://www.java2s.com/Code/JarDownload/javax.servlet/javax.servlet.jar.zip

从该位置下载zip文件,解压后放入如下路径

%JAVA_HOME%/jre/lib/ext/

将文件放在没有任何目录

可能的解决方案(在ubuntu 上测试)

  1. 打开终端类型geany .bashrc
  2. 转到顶部并粘贴此
    export CLASSPATH=$CLASSPATH:/web/apache-tomcat-8.5.39/lib/servlet-api.jar
  3. 现在保存并关闭
  4. 现在尝试运行该程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM