Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译错误:包javax.servlet不存在_Java_Servlets_Compilation_Compiler Errors - Fatal编程技术网

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

编译错误:包javax.servlet不存在,java,servlets,compilation,compiler-errors,Java,Servlets,Compilation,Compiler Errors,我有一个导入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需要查找导入的依赖

我有一个导入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.*;
导入jakarta.servlet.http.*;
另见:

    • 它是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文件(“;d:…\lib\servlet.jar”在Windows下,在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

      将servlet-api.jar添加到类路径中。它将被放入Tomcat的lib文件夹中。

      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;
      

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

      如果您使用的是maven项目,那么将以下依赖项添加到pom.xml中

      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.0.1</version>
          <scope>provided</scope>
      </dependency>
      
      
      javax.servlet
      javax.servlet-api
      3.0.1
      假如
      
      这是我找到的。在我的环境变量中添加/usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar作为Mac上的类路径

      如果使用bash:~/.bash\u 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)
      或者,您可以重新启动计算机,使其为当前用户工作。

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

      <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.2</version>
          <scope>provided</scope>
      </dependency>
      
      
      javax.servlet.jsp
      jsp api
      2.2
      假如
      
      从位置您的安装路径\tomcat\lib\servlet api.jar复制文件“servlet api.jar,并将文件粘贴到您的Java目录您的安装路径\Java\jdk1.8.0\u 121\jre\lib\ext


      这将起作用(已测试)。

      即使尝试了建议的解决方案,它也不能解决我的问题,因为我输入了许多java路径实例

    • 我从“path,java_HOME,JRE_HOME”中删除了所有与java相关的path(不同版本的java),并从fresh中创建

    • 我已设置(路径可能会根据不同的安装而更改)
      A.JAVA\u主页为C:\Program Files\JAVA\jdk1.8.0\u 191
      BJRE\U主页为C:\Program Files\Java\jdk1.8.0\U 191\JRE\lib
      C在路径C:\Program Files\Java\jdk1.8.0\U 191\bin中添加二进制文件路径
      D类路径为C:\apache-tomcat-7.0.93\lib

    • 如果在更改/编辑系统/用户变量时命令提示符已打开,则切勿尝试使用相同的命令提示符。关闭它并打开一个新的

    • 参考图像: 可能的解决方案(在ubuntu上测试)

    • 开放式终端类型
      geany.bashrc
    • 转到顶部并粘贴此
      export CLASSPATH=$CLASSPATH:/web/apache-tomcat-8.5.39/lib/servlet-api.jar
    • 现在保存并关闭
    • 现在试着运行这个程序

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

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

    • 打开命令提示符
    • 类型
    • 它将获取导入Servlet、HttpServlet等所需的所有jar文件 并编译java文件

    • 您可以添加多个类路径,例如

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