错误消息表明我没有适当地重写抽象类和/或方法。有趣的是,我遵循书中的代码。它应该是一个编译的例子(深入浅出Java servlet和JSP)我无法初始化我的ServletContextListener。 .java类不会编译。任何人都可以指出我究竟发生了什么?
命令/错误:
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>[email protected]</param-value>
<param-name>mainEmail</param-name>
<param-value>[email protected]</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运行时环境(建1.8.0_121-B13) 的HotSpot的Java(TM)64位服务器VM(建立25.121-B13,混合模式)
它的参数应该是“ServletContextEvent”类型,而不是“ServletContext”。 –
问'contextDestroyed(ServletContextEvent)',并且你重载'contextDestroyed(ServletContext事件)' – Vishrant