tomcat - 将 Web 应用程序从 GlassFish 移动到 Tomcat 9,出现 java.lang.ClassNotFoundException : com. sun.jersey.spi.container.servlet.ServletContainer

标签 tomcat jersey-2.0 classnotfoundexception

<分区>

我有一个在 GlassFish 3.1.2 上运行良好的 Web 应用程序,但我们现在要迁移到 Tomcat 9。

Web 应用部署成功,但在尝试访问内部部分时,我们得到以下信息:

01-Aug-2019 15:47:21.082 SEVERE [main] org.apache.catalina.core.StandardContext.loadOnStartup Servlet [ServletAdaptor] in web application [/myapp] threw load() exception
        java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
                at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
                at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
                at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:540)
                at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:521)
                at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)
                at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1030)
                at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:971)
                at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4868)
                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5177)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:978)
                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1849)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
                at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
                at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:773)
                at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:427)
                at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
                at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
                at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
                at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
                at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
                at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
                at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
                at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:932)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:498)
                at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:344)
                at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:475)

/opt/tomcat/webapps/myapp/WEB-INF/web.xml 有这个:

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <servlet>
        <servlet-name>ServletAdaptor</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <description>Multiple packages, separated by semicolon(;), can be specified in param-value</description>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.yapp.rest.ws;com.myapp.licencing</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletAdaptor</servlet-name>
        <url-pattern>/webresources/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
       <resource-ref>
      <res-ref-name>jdbc/CustDBInst</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
   </resource-ref>
</web-app>

WEB-INF/lib 目录包含以下内容:

/WEB-INF/lib/
asm-all-repackaged-2.2.0-b21.jar  javax.ws.rs-api-2.0.jar            org.eclipse.persistence.core.jar
cglib-2.2.0-b21.jar               jaxb-api-2.2.7.jar                 org.eclipse.persistence.dbws.jar
commons-codec-1.7.jar             jersey-client.jar                  org.eclipse.persistence.jpa.jar
eclipselink.jar                   jersey-common.jar                  org.eclipse.persistence.jpa.jpql.jar
guava-14.0.1.jar                  jersey-container-servlet-core.jar  org.eclipse.persistence.jpa.modelgen.processor.jar
hk2-api-2.2.0-b21.jar             jersey-container-servlet.jar       org.eclipse.persistence.moxy.jar
hk2-locator-2.2.0-b21.jar         jersey-entity-filtering-2.5.1.jar  org.eclipse.persistence.oracle.jar
hk2-utils-2.2.0-b21.jar           jersey-media-moxy-2.5.1.jar        org.osgi.core-4.2.0.jar
javax.annotation-api-1.2.jar      jersey-server.jar                  osgi-resource-locator-1.0.1.jar
javax.inject-2.2.0-b21.jar        ojdbc6.jar                         persistence-api-1.0.jar
javax.persistence.jar             org.eclipse.persistence.antlr.jar  validation-api-1.1.0.Final.jar
javax.servlet-api-3.0.1.jar       org.eclipse.persistence.asm.jar

最佳答案

根据@second 的建议,我更改了 web.xml 以将 OLD SETTING 替换为 NEW SETTING 并且成功了。

    <?xml version="1.0" encoding="UTF-8"?>
    <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">

<!-- NEW SETTING -->
        <servlet>
            <servlet-name>ServletAdaptor</servlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>com.myapp.rest.ws;com.myapp.licencing</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>

    <!-- OLD SETTING
            <servlet-name>ServletAdaptor</servlet-name>
            <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
            <init-param>
                <description>Multiple packages, separated by semicolon(;), can be specified in param-value</description>
                <param-name>com.sun.jersey.config.property.packages</param-name>
                <param-value>com.myapp.rest.ws;com.myapp.licencing</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    -->
        <servlet-mapping>
            <servlet-name>ServletAdaptor</servlet-name>
            <url-pattern>/webresources/*</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
           <resource-ref>
          <res-ref-name>jdbc/CustDBInst</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
       </resource-ref>
    </web-app>

关于tomcat - 将 Web 应用程序从 GlassFish 移动到 Tomcat 9,出现 java.lang.ClassNotFoundException : com. sun.jersey.spi.container.servlet.ServletContainer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57313818/

相关文章:

java - 如何在远程tomcat服务器上使用依赖库部署war

maven - 使用Maven-assembly-plugin创建uber jar时,Jersey失败

spring - Jersey2 Spring Tomcat 加载时间编织器不工作

java - 尽管类在类路径中,但 ClassNotFoundException

tomcat - 为什么 Jenkins 1.598 和 tomcat 8 自动部署不起作用

java - Jersey 响应的原因短语在 tomcat 7 和 8.5 中不一致

java - 将 mysql jar 添加到 lib 但在通过 intelliJ 工作到 tomcat 的本地部署中仍然面临类未找到异常?

jersey - 如何启用 MultiPartFeature?

java - ClassNotFoundException JSP

Android:运行 ActionBarSherlock-Plugin-Maps 时出现 ClassNotFoundException