SEVERE: Ошибка listenerStart в Java-приложении

Я впервые пытаюсь использовать ServletContextListener для выполнения функции perticular каждый раз, когда приложение развертывается. Для этого я взял простой файл класса java и реализовал на нем ServletContextListener и объявил listner в web.xml, но при развертывании он дает ошибку в виде

SEVERE: Error listenerStart in netbeans ..

Apache tomcat server logs in netbeans..

15 ноября 2013 г. 11:59:03 AM org.apache.catalina.core.StandardContext listenerStart SEVERE: ошибка настройки приложения-слушателя класса app.classes.ContextListenerProcess java.lang.IllegalAccessException: класс org.apache.catalina.core.DefaultInstanceManager может не получить доступ к классу класса app.classes.ContextListenerProcess с модификаторами ""

Вот мой файл класса java, реализующий ServletContextListener

package app.classes;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;


@WebListener()
class ContextListenerProcess implements ServletContextListener {

@Override
public void contextDestroyed(ServletContextEvent sce) {
}

@Override
public void contextInitialized(ServletContextEvent sce) {
 // Do your startup work here
 System.out.println("Processing Started .....");
}
}

и вот мой web.xml, добавляющий класс ContextListenerProcess...

<listener>
<listener-class>app.classes.ContextListenerProcess</listener-class>
 </listener>

Пожалуйста, ребята, помогите мне решить проблему. Спасибо заранее.

2 ответа

Я попробовал пример кода, и это сработало для меня.

package app.classes;

 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
 import javax.servlet.annotation.WebListener;


 /**
 * Application Lifecycle Listener implementation class ContextListenerProcess
 *
 */
 @WebListener
 public class ContextListenerProcess implements ServletContextListener {

 /**
 * Default constructor. 
 */
 public ContextListenerProcess() {
 // TODO Auto-generated constructor stub
 }

 public void contextDestroyed(ServletContextEvent sce) {
 }

 public void contextInitialized(ServletContextEvent sce) {
 // Do your startup work here
 System.out.println("Processing Started .....");
 }
 }

и это мой web.xml

<!--?xml version="1.0" encoding="UTF-8"?-->
<!-- Use this definition if using a Java EE 6 container This also stops Eclipse 
 from complaining that 3.0 is not a valid version <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" 
 http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> -->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
 <welcome-file-list>
 <welcome-file>index.html</welcome-file>
 </welcome-file-list>
 <listener>
 <listener-class>app.classes.ContextListenerProcess</listener-class>
 </listener>
 <servlet>
 
 <display-name>WebListenerServlet</display-name>
 <servlet-name>WebListenerServlet</servlet-name>
 <servlet-class>app.classes.WebListenerServlet</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>WebListenerServlet</servlet-name>
 <url-pattern>/index.html</url-pattern>
 </servlet-mapping>
</web-app>

после того, как я запустил приложение с этой конфигурацией, он был успешным, я вижу сообщение " Processing Started..... на консоли при запуске tomcat. Я добавляю только

<dependency>
 <groupid>javax.servlet</groupid>
 <artifactid>javax.servlet-api</artifactid>
 <version>3.0.1</version>
 </dependency>

Разница между вашим кодом и моим заключается в том, что вы помещаете скобки после аннотации @WebListener, вы должны удалить ее, а ваш класс ContextListenerProcess не имеет модификатора доступа, что означает, что он по умолчанию, он должен быть общедоступным.


Класс ContextListenerProcess должен быть общедоступным, а не частным.

licensed under cc by-sa 3.0 with attribution.