2017-07-28 32 views
-2

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

+2

它的參數應該是「ServletContextEvent」類型,而不是「ServletContext」。 –

+1

問'contextDestroyed(ServletContextEvent)',並且你重載'contextDestroyed(ServletContext事件)' – Vishrant

回答

1

錯誤消息告訴你什麼是錯的:

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

contextDestroyed方法的類參數需要是ServletContextEventServletContext

相關問題