我第一次尝试在每次部署应用程序时都使用ServletContextListener执行特定功能。为此,我采取了一个简单的Java类文件并在其上实现了ServletContextListener并在web.xml中声明了列表器,但是在部署时给出错误为
SEVERE: Error listenerStart in netbeans ..
Apache tomcat server logs in netbeans..
[Nov 15,2013 11:59:03 AM org.apache.catalina.core.StandardContext listenerStart严重:配置类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 .....");
}
}
这是我的添加ContextListenerProcess类的web.xml ...
<listener>
<listener-class>app.classes.ContextListenerProcess</listener-class>
</listener>
请大家帮我解决问题。在此先感谢..
我已经尝试了您的代码示例,并且对我有用。
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>
<description></description>
<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>
在使用此配置运行应用程序后,它成功完成了,当启动tomcat时,我在控制台上看到Processing Started .....
消息。我只添加
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
您的代码和我的代码之间的区别是,您将@WebListener注释放在方括号中,应该将其删除,并且ContextListenerProcess类没有访问修饰符,这意味着它是默认的,应该是公共的。
您的ContextListenerProcess
类需要是公共的,而不是包私有的。
我也收到此错误。我将tomcat更改为8.5.24,这解决了我的问题。