2017-07-28 30 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

相关问题