java - 我们可以在 contextInialized 方法中调用 getServletContext() 吗?

标签 java servlets servletcontextlistener

在此代码中创建实现 contextInitializer 接口(interface)的 servlet,

然后使用此行访问 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 实现此接口(interface)。听者有不同的目的。只需覆盖 HttpServlet#init()如下:

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

关于java - 我们可以在 contextInialized 方法中调用 getServletContext() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2320972/

相关文章:

java - ServletContextListener 问题 | HTTP 状态 404 -

java - HTTP 状态 500 - servlet 异常的 Servlet.init()

java - 转换为字节时 JUnit 出错?

java - 在 Eclipse 中,Tomcat 6 使用范围为 'provided' 的 javax.servlet-api 3.0.1

java - 链表数组

java - 如何从两个 HTML 表单/子表单向 MySql 数据库插入数据

java - 如何为 HTTP servlet 容器选择最大线程数?

java - 在上下文初始化期间使用服务

java - ServletContextListener 在重启时丢失 JNDI 连接

java - ArrayList Scanner 输入帮助 Java