Pergunta

Criando servlet que implementa contextInitializer interface neste código,

Em seguida, acessando o arquivo dentro contextinitialized() usando esta linha

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

esta exceção ocorreu

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

alguma ideia ?

Foi útil?

Solução

o ServletContextListener#contextInitialized() dá a você o ServletContextEvent argumento que fornece a você o getServletContext() método.

Assim, isso deve fazer:

public void contextInitialized(ServletContextEvent event) {
    InputStream input = event.getServletContext().getResourceAsStream("/WEB-INF/file.properties"));
    // ...
}

Dito isto, você normalmente não quer que seu servlet implemente essa interface. O ouvinte tem um propósito diferente. Apenas substitua o HttpServlet#init() do seguinte modo:

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

Outras dicas

Não estou familiarizado com a interface contextinitializer a que você se refere, mas com base na exceção em que você está recebendo minha primeira reação é que não, você não pode chamar GetServletContext dentro do método contextinitializado. Se você conferir http://www.docjar.com/html/api/javax/servlet/genericServlet.java.html, você verá que, na linha 160, está tentando obter o contexto do ServletConfig e, aparentemente, o objeto ServletConfig para esse servlet ainda não foi inicializado.

Sua melhor aposta (na minha opinião) seria executar o código que você deseja executar em um ponto em que o ServletConfig e o ServletContext são inicializados - já que não estou familiarizado com o ambiente com o qual você está trabalhando (como eu disse , Não estou familiarizado com o Contextinitializer, então não sei de onde isso veio), não posso realmente deixar de ajudar o seu ciclo de vida de servlet.

Dependendo do que exatamente você está tentando fazer, considere ter seu fluxo de entrada como um campo estático. Dentro do seu método Doget/DoPost, você veria se ele foi inicializado - se for, ótimo, continue normalmente; E se não o fizer, inicialize -o conforme necessário. Seu contexto e configuração devem estar disponíveis no Doget/DoPost, então você deve estar pronto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top