2014-10-21 3 views
1

Я хочу получить servletContext в классе Java для чтения файла из каталога WEB-INF. Я расширил свой класс с помощью HttpServlet и попытался получить контекст, как в приведенном ниже коде, но конфиг сервлета возвращается как null. Я не использую jsp или контроллер. Мое намерение состоит в том, чтобы прочитать файл, непосредственно помещенный в каталог WEB-INF из класса Java. Пожалуйста, дайте мне знать, как я могу получить не нулевой servletConfig/servletContext в классе:getServletConfig()/getServletContext() возвращающее значение null

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

Где находится этот код в вашем сервлете? Это в ctor? Вы получите конфиг только в методах, которые унаследованы от 'HttpServlet':' init, doGet' и т. Д. –

+1

только потому, что он простирается от HttpServlet, это не значит, что сервлет запускается и управляется контейнером. Можете ли вы опубликовать весь код сервлета? – Leo

ответ

12

Ловушка для молодых игроков. Если переопределить метод

public void init(ServletConfig config) 

, вы должны вызвать

super.init(config); 

внутри метода. В противном случае суперкласс видит контекст, как null. Он упоминается в Javadoc:

При переопределении этой формы методы, называют super.init(config).

NB Вы можете получить контекст непосредственно через getServletContext(). Там нет необходимости идти через getServletConfig().

+0

Благодарим вас за предложение. Я обращаюсь к ServletContext в простом Java-классе, который является не-веб-компонентом, то есть последним слоем приложения. Для приложения нет передней панели. Любые мысли о том, как я могу получить доступ к ServletContext без веб-уровня? – display4

+0

Вы не можете. «Сервлет» работает только в контейнере сервлетов. – EJP

+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). –

0

У меня была эта же проблема, и выяснилось, что файл web.xml был создан не в том месте и не был загружен контейнером.

Его необходимо создать в корне папки WEB-INF. В идеале пусть Eclipse сделает это для вас при создании проекта.