当前位置: 首页 > 知识库问答 >
问题:

Mac上的Tomcat 10无法识别servlet api。编译servlet时的jar

蓟辰沛
2023-03-14

我正在为tomcat网页创建一个Servlet,这个Servlet不会编译。

我正在使用servlet api。罐子

tomcat的目录结构如下:

  • 所有. jar文件都在。 /Tomcat/tomcat-10/lib/
  • 要编译的servlet存储在. /Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/
  • 豆子存放在. /Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/centerStage/

这是我用来编译一切的命令:

javac -cp .:./Tomcat/tomcat-10/lib/servlet-api.jar:./Tomcat/tomcat-10/lib/mysql-connector-java-8.0.28.jar -classpath ./Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/:./Tomcat/tomcat-10/lib/ ./Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/CenterStageServlet.java

当我尝试编译servlet时,我得到了9个指向HttpServlet类的错误:

./Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/CenterStageServlet.java:32: error: cannot find symbol
public class CenterStageServlet extends HttpServlet {
                                        ^
  symbol: class HttpServlet
./Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/CenterStageServlet.java:25: error: cannot find symbol
@WebServlet(name = "CenterStageServlet", 
 ^
  symbol: class WebServlet
./Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/CenterStageServlet.java:41: error: cannot find symbol
   public void doGet(HttpServletRequest request, HttpServletResponse response)
                     ^
  symbol:   class HttpServletRequest
  location: class CenterStageServlet
./Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/CenterStageServlet.java:41: error: cannot find symbol
   public void doGet(HttpServletRequest request, HttpServletResponse response)
                                                 ^
  symbol:   class HttpServletResponse
  location: class CenterStageServlet
./Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/CenterStageServlet.java:42: error: cannot find symbol
         throws IOException, ServletException {
                             ^
  symbol:   class ServletException
  location: class CenterStageServlet
./Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/CenterStageServlet.java:6: error: package jakarta.servlet does not exist
import jakarta.servlet.*;             // Tomcat 10
^
./Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/CenterStageServlet.java:7: error: package jakarta.servlet.http does not exist
import jakarta.servlet.http.*;
^
./Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/CenterStageServlet.java:8: error: package jakarta.servlet.annotation does not exist
import jakarta.servlet.annotation.*;  // Tomcat 10
^
./Tomcat/tomcat-10/webapps/CenterStage/WEB-INF/classes/CenterStageServlet.java:40: error: method does not override or implement a method from a supertype
   @Override
   ^
9 errors

Servlet代码:

package centerStage;

// To save as "<TOMCAT_HOME>\webapps\CenterStage\WEB-INF\classes\CenterStageServlet.java"
import java.io.*;
import java.sql.*;
import jakarta.servlet.*;             // Tomcat 10
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;  // Tomcat 10
//import javax.servlet.*;             // Tomcat 9
//import javax.servlet.http.*;
//import javax.servlet.annotation.*;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.sql.Date;
import java.time.LocalDate;

import centerStage.*;
 
@WebServlet(name = "CenterStageServlet", 
            urlPatterns = {"/appointment", "/availibility", "/barber", "/client", "/service"})    
            // Configure the request URL for this servlet (Tomcat 7/Servlet 3.0 upwards)


public class CenterStageServlet extends HttpServlet {

    // Variables
    
   // The doGet() runs once per HTTP GET request to this servlet.
   @Override
   public void doGet(HttpServletRequest request, HttpServletResponse response)
         throws IOException, ServletException {
 
       // Do some processing
   }

   // Other Methods
}

我已经核实了。我要找的jar位于/lib/目录中。

在这个Tomcat目录中编译其他Webapps不会给我任何问题,所以我不确定问题是什么。

任何帮助/建议都会很棒!

共有1个答案

陈铭晨
2023-03-14

好吧,事实证明这很简单。

当我移动servlet从~Tomcat/webapps/中心阶段/WEB-INF/类/到~Tomcat/webapps/中心阶段/WEB-INF/类/中心阶段/然后尝试编译javac-cp.:~/Tomcat/lib/servlet-api.jar:~/Tomcat/lib/mysql-connector-java-8.0.28.jar. /Tomcat/webapps/CenterStage/WEB-INF/classes/centerStage/*. java一切正常。

所以基本上,我应该有Servlet。java与JavaBeans位于同一目录中,一切正常。

 类似资料:
  • 问题内容: 我试图将新的(2016) 无 头版Chromium与Selenium / ChromeDriver一起使用(过去,我将Firefox与xfvb一起使用,但这有望变得更好)。 我根据此处找到的说明从源代码中编译了一个无头版本的Chromium(我没有找到任何预构建的二进制文件),然后使用以下代码通过Selenium启动它: 相同的代码适用于标准铬(如果我删除该选件) 但是,我得到以下错误

  • 假设我们在外部工件中有一个接口,我们无法更改: 以及此接口的一个实现,具有对应于父接口的更多成员。Lombok生成的getters/setters不能被编译器识别,所以我必须添加实际的getter方法来使下面的类可编译。 编译错误是接口方法未实现时的标准错误: my.package.测试实现不是抽象的,并且不会覆盖TestInterface中my.package.抽象方法isTest() 假设Lo

  • 实际上,我的项目有单元测试。它们都是在< code>/src/test/java/中配置的。最近我需要在< code >/src/androidTest/Java 中添加插装测试。为此,我在< code>build.gradle中添加了espresso依赖项。 之后,我选择了构建变体- 但是当我开始编码时,没有一个依赖项被识别出来: “无法解析符号 onView”、“无法解析符号视图交互”等...

  • 大家好,有人能帮助我为什么我不能选择“从帐户删除”按钮。如果您查看屏幕截图,selenium成功地点击了显示弹出窗口的星形标志。然后我想让selenium点击从帐户删除按钮,但它不起作用。感谢任何帮助 这是我的代码: 我得到的错误消息是: org.openqa.selenium.invalidselectorexception:给定的选择器//[@id='single producttr']/td

  • 问题内容: Java SE 6项目是否支持eclipselink jpa2的标准api?如果没有,那是我的问题。我是否需要在persistence.xml中为条件api指定特殊的内容? 这是我的条件查询: 这是我的意思实体: 问题答案: 关于您的代码 我没有检查条件查询本身的正确性,但是,正如克里斯所提到的,您正在将静态元模型类与不会暴露您所要查找的混合在一起。假设已经生成了元模型类,请删除第一行

  • 问题内容: 我在Windows 2012服务器上使用PowerShell,我从System32删除了所有Java命令,重新安装了jdk,将JAVA_HOME和Path设置为指向新安装。而且我仍然收到以下错误: 问题答案: 我从System32删除了所有Java命令 这就是Windows无法找到java.exe的原因。默认的JRE安装将Java放入System32目录,而CMD和Powershell