创造实现servlet contextInitializer 接口,在这样的代码,

然后访问的文件里面 contextinitialized() 使用这种线

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

这一例外发生

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

任何想法?

有帮助吗?

解决方案

ServletContextListener#contextInitialized() 给你的 ServletContextEvent 论点,提供了你的 getServletContext() 法。

因此,这应该做的:

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

这就是说,通常不需要你servlet以实现这个接口。听者具有不同的目的。只是复盖 HttpServlet#init() 如下:

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

其他提示

我不熟悉的ContextInitializer接口您参考,但基于你得到我的第一反应异常是否定的,你不能打电话的getServletContext的contextInitialized方法中。如果你看看 http://www.docjar.com/ HTML / API /使用javax / servlet的/ GenericServlet.java.html ,你会看到,在线路160,它试图从该的ServletConfig的背景下,显然,ServletConfig对象这个servlet未初始化爱好。

您最好的选择(在我看来)将执行你想在那里的ServletConfig,ServletContext也是两者都初始化一个点运行的代码 - 因为我不熟悉您正在使用什么样的环境(就像我说的,我不熟悉ContextInitializer,所以我不知道这是从哪里来的),我真的不能帮助太多,只要你的servlet的生命周期中去。

根据你想要做什么,你可能会考虑让你的输入流作为一个静态字段。里面你的doGet / doPost方法,你会检查,看它是否被初始化 - 如果有,那也不错,在正常矣;如果没有,则初始化是必要的。你的背景和配置应该在的doGet / doPost方法,所以你应该是好去。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top