我们可以称getServletContext()内部contextInialized方法?
-
22-09-2019 - |
题
创造实现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方法,所以你应该是好去。