簡體   English   中英

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

[英]Java - getServletContext().getAttribute() returns null

我有一個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;
}

您錯誤地重寫了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();
}

我懷疑您有一個不調用super(config)的servlet init(ServletConfig config)方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM