2014-10-21 152 views
1

我想要在Java類中獲得servletContext以從WEB-INF目錄中讀取文件。我使用HttpServlet擴展了我的類並嘗試獲取上下文,如下面的代碼所示,但servlet配置返回爲null。我不使用任何jsp或控制器。我的意圖是從Java類中讀取直接放置在WEB-INF目錄中的文件。請讓我知道我怎樣才能不爲空servletConfig/servletContext在類:getServletConfig()/ getServletContext()返回空值

ServletConfig config = getServletConfig(); 
ServletContext context = config.getServletContext(); 
InputStream resourceContent = context.getResourceAsStream("/WEB-INF/samplefile"); 
+0

你的servlet中的代碼在哪裏?它在ctor嗎?您只會在從'HttpServlet'繼承的方法中獲得配置:'init,doGet'等。 – 2014-10-21 22:16:22

+1

僅僅因爲它從HttpServlet擴展而來,並不意味着它是一個由容器啓動和管理的servlet。你可以發佈整個servlet代碼嗎? – Leo 2014-10-21 22:16:38

回答

12

陷阱年輕球員。如果忽略

public void init(ServletConfig config) 

方法,你必須調用

super.init(config); 

的方法內。否則超認爲的null.它在Javadoc中提及的背景:

當重寫這種形式的方法,調用super.init(config).

NB你可以通過getServletContext().直接獲取上下文有沒有必要去通過getServletConfig().

+0

謝謝你的建議。我正在訪問一個普通的java類中的ServletContext,它是一個非web組件,即應用程序的最後一層。應用程序沒有前端。有關如何在沒有Web層的情況下訪問ServletContext的想法? – display4 2014-10-21 23:31:30

+0

你不能。一個'Servlet'只能運行在一個servlet容器中。 – EJP 2014-10-21 23:36:58

+0

@EJP:你是不是指'init(ServletConfig config)'而不是'ServletContex contextt'?提到的文檔@EJP可以在這裏找到(https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/GenericServlet.html#init%28javax.servlet.ServletConfig%29)。 – 2016-03-04 22:58:02

0

我有這個相同的問題,原來web.xml文件創建了錯誤的地方,並沒有被容器加載。

它需要在WEB-INF文件夾的根目錄下創建。理想情況下,讓Eclipse在您創建項目時爲您做這件事。