0

我第一次尝试在每次部署应用程序时使用 ServletContextListener 执行特定功能。为此,我采用了一个简单的 java 类文件并在其上实现了 ServletContextListener 并在 web.xml 中声明了侦听器,但在部署时它给出了错误作为

SEVERE: Error listenerStart in netbeans ..

Apache tomcat server logs in netbeans..

2013 年 11 月 15 日上午 11:59:03 org.apache.catalina.core.StandardContext listenerStart 严重:配置类 app.classes.ContextListenerProcess java.lang.IllegalAccessException 的应用程序侦听器时出错:org.apache.catalina.core.DefaultInstanceManager 类可以不使用修饰符“”访问类 app.classes.ContextListenerProcess 的成员

这是我实现 ServletContextListener 的 java 类文件

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>

请大家帮我解决问题..提前谢谢..

4

3 回答 3

1

您的ContextListenerProcess课程需要是公共的,而不是包私有的。

于 2013-11-15T09:10:29.803 回答
0

我已经尝试了您的代码示例,它对我有用。

    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>

在我使用此配置运行应用程序成功后,我Processing Started .....在启动 tomcat 时在控制台上看到消息。我只加

         <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
        </dependency>

您的代码和我的代码之间的区别在于您在 @WebListener 注释之后放置了括号,您应该删除它并且您的 ContextListenerProcess 类没有访问修饰符,这意味着它是默认的,它应该是公共的。

于 2013-11-15T09:14:40.647 回答
0

我也遇到了这个错误。我将我的 tomcat 更改为 8.5.24,它解决了我的问题。

于 2020-01-07T09:41:08.667 回答