【问题标题】:Invoke a method on tomcat startup in Jersey在泽西岛的 tomcat 启动上调用方法
【发布时间】:2018-07-31 14:31:37
【问题描述】:

你好, 我试图在 tomcat 服务器启动时调用一个方法。我正在使用 Jersey restful web 服务。
Macen 依赖项:

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.19.2</version>
</dependency>

我的 WEB.XML 文件:-

            <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                     http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
                     version="3.1">
                <display-name>FlightAvailabilityPredictor</display-name>
                <servlet>
                    <servlet-name>jersey-serlvet</servlet-name>
                    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
                    <init-param>
                        <param-name>com.sun.jersey.config.property.packages</param-name>
                        <param-value>com.travelport.h2o.availabilitypredictor</param-value>
                    </init-param>
                    <load-on-startup>1</load-on-startup>
                </servlet>

                <servlet-mapping>
                    <servlet-name>jersey-serlvet</servlet-name>
                    <url-pattern>/rest/*</url-pattern>
                </servlet-mapping>

                <listener>
                    <listener-class>
                             com.travelport.h2o.availabilitypredictor.listener.InitializeListner
                    </listener-class>
                </listener>

            </web-app>

我的监听类:-

        package com.travelport.h2o.availabilitypredictor.listener;
        import javax.servlet.ServletContextEvent;
        import javax.servlet.ServletContextListener;
        import javax.servlet.annotation.WebListener;

    @WebListener
        public class InitializeListner implements ServletContextListener {

            @Override
            public final void contextInitialized(final ServletContextEvent sce) {
                // method to invoke 
            }

            @Override
            public final void contextDestroyed(final ServletContextEvent sce) {

            }
        }

我收到以下异常:-

严重:Web 应用程序中的 Servlet [jersey-serlvet] [/FlightAvailabilityPredictor] 抛出 load() 异常 java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1269) 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1104) 在 org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:508) 在 org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:489)

【问题讨论】:

    标签: tomcat methods jersey startup invoke


    【解决方案1】:

    找到了解决方案:- 更改了我的 Web.xml 如下

    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
        <display-name>FlightAvailabilityPredictor</display-name>
        <servlet>
            <servlet-name>jersey-serlvet</servlet-name>
            <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>com.sun.jersey.config.property.packages</param-name>
                <param-value>com.travelport.h2o.availabilitypredictor</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>jersey-serlvet</servlet-name>
            <url-pattern>/rest/*</url-pattern>
        </servlet-mapping>
    
    <!--    <listener>
            <listener-class>
                     com.travelport.h2o.availabilitypredictor.listener.InitializeListner
            </listener-class>
        </listener> -->
        <servlet>
            <servlet-name>InitializeListner</servlet-name>
            <servlet-class>com.travelport.h2o.availabilitypredictor.listener.InitializeListner</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
    </web-app>
    

    将我的 Maven 依赖项从 1.19.2 更改为 1.19

    <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-bundle</artifactId>
            <version>1.19</version>
        </dependency>
    

    在下面创建了一个类

      import javax.servlet.http.HttpServlet;
       @SuppressWarnings("serial")
       public class InitializeListner extends HttpServlet {
        public void init() {
        System.out.println("INSIDE INIT METHOD");
        }
        }
    

    【讨论】:

      猜你喜欢
      • 2019-03-13
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 2017-09-18
      • 2014-10-06
      相关资源
      最近更新 更多