2017-07-28 1 views
-2

Le message d'erreur indique que je ne remplace pas la classe abstraite et/ou la méthode de manière appropriée. Fait intéressant, je suis le code qui est dans un livre; et il est censé être un exemple compilable (Head First Java Servlets et JSP)Je n'arrive pas à initialiser mon ServletContextListener. La classe .java ne compilera pas. Quelqu'un peut-il me signaler ce qui se passe?

Commande/Erreur:

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 

Voici mon code:

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"); 
    } 

} 

Vous remarquerez que j'ai essayé impérieuses contextDestroyed() (maintenant commenté), car l'erreur implique que c'est peut-être le problème, mais j'obtiens le même résultat. Cependant, le livre que j'utilise dit simplement de ne pas s'en soucier parce que nous n'avons pas besoin de nettoyer parce que le contexte ne disparaît que lorsque l'application tombe en panne.

<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> 

Est-ce que cela importe où ce fichier web.xml est lorsque je compile? J'ai essayé avec lui dans le même répertoire, et dans le répertoire etc que j'ai installé dans le cadre du tutoriel. J'aurais pensé que cela n'avait d'importance qu'à l'exécution. Aussi, en tant que fyi, j'ai plusieurs servlets dans le même web.xml.

voici ma version info: version Java "1.8.0_121" Java (TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot (TM) 64 bits serveur VM (build 25,121-b13, mode mixte)

+2

Son paramètre doit être de type 'ServletContextEvent', pas' ServletContext'. –

+1

demandant 'contextDestroyed (ServletContextEvent)' et vous surchargez 'contextDestroyed (événement ServletContext)' – Vishrant

Répondre

1

le message d'erreur vous dit exactement ce qui est faux:

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

la classe du paramètre pour la méthode contextDestroyed doit être ServletContextEvent pas ServletContext