錯誤消息表明我沒有適當地重寫抽象類和/或方法。有趣的是,我遵循書中的代碼。它應該是一個編譯的例子(深入淺出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