我无法初始化我的 ServletContextListener。 .java class 不会编译。谁能指出我发生了什么事?

I'm unable to initialize my ServletContextListener. The .java class will not compile. Can anyone point me into what is going on?

错误消息表明我没有正确覆盖抽象 class and/or 方法。有趣的是,我正在遵循书中的代码;它应该是一个可编译的示例(Head First Java Servlets 和 JSP)

Command/Error:

javac -classpath /usr/local/Cellar/tomcat/8.5.13/libexec/lib/servlet-
api.jar:classes:. -d classes 
src/com/example/MyServletContextListener.java 
src/com/example/MyServletContextListener.java:6: error: 
MyServletContextListener is not abstract and does not override abstract 
method contextDestroyed(ServletContextEvent) in ServletContextListener
public class MyServletContextListener implements ServletContextListener 
{ 
  ^1 error

这是我的代码:

package com.example;
import javax.servlet.*;


public class MyServletContextListener implements ServletContextListener{


  public void contextInitialized(ServletContextEvent event){

    ServletContext sc = event.getServletContext();
    String dogBreed = sc.getInitParameter("breed");
    Dog d = new Dog(dogBreed);
    sc.setAttribute("dog", d);

  }


  public void contextDestroyed(ServletContext event) {

    //System.out.println("1");
  }

}

您会注意到我尝试覆盖 contextDestroyed()(现在已注释掉),因为错误暗示它可能是问题所在,但我得到了相同的结果。然而,我正在使用的书甚至只是说不用担心,因为我们不需要清理,因为上下文只会在应用程序关闭时消失。

<context-param>
  <param-name>adminEmail</param-name>
  <param-value>someemail@gmail.com</param-value>
  <param-name>mainEmail</param-name>
  <param-value>someother@place.com</param-value>
  <param-name>breed</param-name>
  <param-value>Great Dane</param-value>
</context-param>

<servlet>
  <servlet-name>ListenerTester</servlet-name>
  <servlet-class>com.example.ListenerTester</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>ListenerTester</servlet-name>
  <url-pattern>/ListenTest.do</url-pattern>
</servlet-mapping>


<listener>
  <listener-class>com.example.MyServletContextListener</listener-class>
</listener>



</web-app>

编译时这个 web.xml 在哪里重要吗?我已经在同一个目录中尝试过它,并在我作为教程的一部分设置的 etc 目录中进行了尝试。我原以为它只在运行时才重要。另外,仅供参考,我在同一个 web.xml.

中有多个 servlet

这是我的版本信息: java 版本“1.8.0_121” Java(TM) SE 运行时环境(build 1.8.0_121-b13) Java HotSpot(TM) 64 位服务器 VM(内部版本 25.121-b13,混合模式)

错误消息告诉你到底出了什么问题:

MyServletContextListener is not abstract and does not override abstract 
method contextDestroyed(ServletContextEvent) in ServletContextListener

contextDestroyed 方法参数的 class 需要 ServletContextEvent 而不是 ServletContext