Question

Création servlet qui implémente l'interface contextInitializer dans ce code,

accès au fichier puis à l'intérieur contextinitialized() en utilisant cette ligne

InputStream input = getServletContext().getResourceAsStream("/WEB-INF/file.properties"));

cette exception est survenue

java.lang.NullPointerException         at      
    javax.servlet.GenericServlet.getServletContext(GenericServlet.java:160)

idées?

Était-ce utile?

La solution

ServletContextEvent l'argument qui vous donne la HttpServlet#init() comme suit:

protected void init() throws ServletException {
    InputStream input = getServletContext().getResourceAsStream("/WEB-INF/file.properties"));
    // ...
}

Autres conseils

Je ne suis pas familier avec l'interface ContextInitializer vous faites référence, mais en fonction de l'exception que vous obtenez ma première réaction est que non, vous ne pouvez pas appeler getServletContext dans la méthode contextInitialized. Si vous consultez http://www.docjar.com/ html / api / javax / servlet / GenericServlet.java.html , vous verrez que, à la ligne 160, il essaie d'obtenir le contexte de la ServletConfig, et apparemment l'objet ServletConfig pour cette servlet n'est pas initialisé encore.

Votre meilleur pari (à mon avis) serait d'exécuter le code que vous êtes désireux de courir à un point où les deux ServletConfig et ServletContext sont initialisés - puisque je ne suis pas familier avec quel environnement vous travaillez avec ( comme je l'ai dit, je ne suis pas au courant ContextInitializer, donc je ne sais pas d'où cela vient), je ne peux vraiment trop pour autant que votre cycle de vie de servlet va.

En fonction de ce que vous essayez de faire exactement, vous pouvez envisager d'avoir votre flux d'entrée comme un champ statique. A l'intérieur de votre méthode doGet / doPost, vous devriez vérifier pour voir si elle a été initialisé - si elle a, alors grand, continuer comme d'habitude; et si elle n'a pas, puis l'initialiser si nécessaire. Votre contexte et config devraient être disponibles dans doGet / doPost, donc vous devriez être bon d'aller.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top