【问题标题】:Compile error: package javax.servlet does not exist编译错误:包 javax.servlet 不存在
【发布时间】:2012-02-29 21:11:11
【问题描述】:

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

包 javax.servlet 不存在

我使用 JDK 1.7.0 和 Tomcat 6.0。

【问题讨论】:

    标签: java servlets compilation compiler-errors


    【解决方案1】:

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

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

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

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

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

    如果您出于某种原因想继续使用 javax.*,那么您应该降级到 Tomcat 9 或更早版本,因为这是仍在使用旧的 javax.* 命名空间的最新版本。

    另见:

    【讨论】:

    • 不错,但是以后考虑用maven为你解决这类问题
    • 或者只是像 Eclipse 这样的 IDE。但是,我建议您继续努力学习,直到您几乎可以梦想为止。否则很难理解 IDE 是如何在幕后工作的。
    • 抱歉,如果我有多个 servlet 类,我该如何添加这些来解决这个问题?谢谢
    【解决方案2】:

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

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

    【讨论】:

    • Gradle 等价物是 dependencies { compile group: 'javax.servlet', name: 'servlet-api', version:'2.4' }
    • 工作就像一个魅力。谢谢。
    【解决方案3】:

    它是 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&gt; javac -classpath ".;d:\Program Files\Apache Group\ jakarta-tomcat-3.2.3\lib\servlet.jar" MyServlet.java

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

    server1&gt; javac -classpath ".:./servlet/servlet.jar" MyServlet.java

    【讨论】:

    • 我应该在编译文件的任何时候这样做吗?我的意思是有没有办法在我编译文件时设置类路径。
    • 要编译文件,即 *.java,您必须确保 servlet.jar 在类路径中。请注意,JSP 最终会被转换为 servlet,这些当然是 Java 文件。
    • 有人有建议:"如果你使用 Windows 添加 d:\Program Files\Apache Group\ jakarta-tomcat-3.2.3\lib\servlet.jar; 到 JAVA_HOME 变量也神奇”
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      这就是为我解决问题的方法:

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

      【讨论】:

        【解决方案6】:

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

        这将工作(测试)。

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

            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;
            

            【讨论】:

              【解决方案9】:

              即使尝试了建议的解决方案,它也没有解决我的问题,因为我输入了许多 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。 CLASSPATH 为 C:\apache-tomcat-7.0.93\lib

              3. 如果在执行更改/创建系统/用户变量时已打开相同的命令提示符,则切勿尝试。关闭它并打开一个新的。

              参考图片:

              【讨论】:

                【解决方案10】:

                这是因为 java 没有提供 Servlet-api.jar 直接导入,所以需要像 from Tomcat 一样从外部导入,为此我们需要提供 lib 文件夹的类路径导入 Servlet 及其相关的类。

                对于 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
                

                【讨论】:

                  【解决方案11】:

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

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

                  %JAVA_HOME%/jre/lib/ext/

                  将文件放在没有任何目录的地方

                  【讨论】:

                    【解决方案12】:

                    这是我发现的。在我的环境变量中添加 /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) 或者可以重新启动计算机,它适用于当前用户。

                    【讨论】:

                      【解决方案13】:

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

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

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2013-04-22
                        • 1970-01-01
                        • 2013-07-13
                        • 2014-05-15
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多