Peut-on appeler getServletContext () à l'intérieur méthode contextInialized?
-
22-09-2019 - |
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?
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.