2013-07-15 182 views
0

我有一個MainServletContextimplements ServletContextListener存儲屬性爪哇 - 。getServletContext()方法的getAttribute()返回null

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的init方法

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

後的堆棧跟蹤信息,請 –

+0

肯定的是,它被張貼 – ssgao

回答

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(); 
} 
+0

謝謝很多解決方案。 – ssgao

0

我懷疑你有沒有調用超(配置)一個servlet的init(ServletConfig類配置)方法。

+0

感謝您的回答,我說我的init方法在OP – ssgao