我有MainServletContext
implements 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;
}
答案 0 :(得分:6)
您错误地覆盖了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();
}
答案 1 :(得分:0)
我怀疑你有一个不调用super(config)的servlet init(ServletConfig config)方法。