gpt4 book ai didi

Java - getServletContext().getAttribute() 返回 null

转载 作者:行者123 更新时间:2023-11-29 06:37:55 35 4
gpt4 key购买 nike

我有一个MainServletContext,它实现了存储属性的ServletContextListener

public void contextInitialized(ServletContextEvent sce) {

ServletContext servletContext = sce.getServletContext();

// successfully get a non-null stockMap
servletContext.setAttribute("stockMap", stockMap);
}

我在web.xml中声明了它,看起来像

  <listener>
<listener-class>controller.MainServletContext</listener-class>
</listener>

现在我想从 servlet 类中获取此 stockMap

Map<SimpleStock, Stock> stockMap = (Map<SimpleStock, Stock>) getServletContext().getAttribute("stockMap");

我遇到了一个NullPointerException。请问有没有漏掉的步骤?

谢谢。

堆栈跟踪

java.lang.NullPointerException
javax.servlet.GenericServlet.getServletContext(GenericServlet.java:125)
controller.TopTenServlet.service(TopTenServlet.java:91)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

我的 Servlet 初始化方法

@Override
public void init(ServletConfig config) throws ServletException {
this.servletConfig = config;
}

最佳答案

您错误地覆盖了您的 init(ServletConfig) 方法。应该是

@Override
public void init(ServletConfig config) throws ServletException {
super.init(config); // would set: this.config = config;
this.servletConfig = config;
}

这就是为什么建议覆盖 init(ServletConfig)init() 便捷方法因为它可以防止您遇到的完全相同的问题。

@Override
public void init() throws ServletException {
this.servletConfig = config;
}

基类 GenericServlet#init(ServletConfig) 会将您的 init() 称为

@Override
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}

关于Java - getServletContext().getAttribute() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17665637/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com