Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Servlet不可用异常:启动jetty时holder中没有类_Jetty - Fatal编程技术网

Servlet不可用异常:启动jetty时holder中没有类

Servlet不可用异常:启动jetty时holder中没有类,jetty,Jetty,有谁能告诉我在jetty server启动时发生此异常的原因吗。我使用的是jetty 9.2.2 javax.servlet.UnavailableException:holder中没有类 xml包含 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <servlet> <se

有谁能告诉我在jetty server启动时发生此异常的原因吗。我使用的是jetty 9.2.2

javax.servlet.UnavailableException:holder中没有类

xml包含

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

<servlet>
    <servlet-name>com.test.api.TestApiApplication</servlet-name>
</servlet>
<servlet-mapping>
    <servlet-name>com.test.api.TestApiApplication</servlet-name>
    <url-pattern>/v1/*</url-pattern>
</servlet-mapping>
</web-app>

您需要知道Jetty是如何在
yjava.servlet.container.Jetty.JettyDaemon
中启动的,才能更深入地回答这个问题

如果您希望使用Servlet 3.0技术(如所述)自动连接Jersey,那么
JettyDaemon
类必须为Jetty启用各种注释扫描配置

首先,您的web.xml声明很糟糕

您的(重新格式化为可读)


如下更改web.xml修复了我的问题。我必须指定servlet名称和servlet类。我尝试了中描述的另一种方法。
我遵循了4.7.1中的步骤。Servlet2.x容器=>示例4.9。将Jersey连接为Servlet

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

      <servlet>
      <servlet-name>TestApp</servlet-name>
         <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.test.api.TestApiApplication</param-value>
         </init-param>
      </servlet>

      <servlet-mapping>
        <servlet-name>TestApp</servlet-name>
        <url-pattern>/v1/*</url-pattern>
      </servlet-mapping>
    </web-app>

特斯塔普
org.glassfish.jersey.servlet.ServletContainer
javax.ws.rs.Application
com.test.api.testipApplication
特斯塔普
/v1/*

您应该将servlet的pom.xml内容更正为
jersey container servlet

yjava.servlet.container.jetty.JettyDaemon.start的作用是什么?感谢您的回复,我更新了web.xml中的名称空间部分。但事实证明,我必须定义和org.glassfish.jersey.servlet.ServletContainer。但是根据jersey规范,我不需要这样做(4.7.2.Servlet 3.x容器)@Sharadr您的JettyDaemon没有正确设置其环境和/或配置以进行注释扫描和SCI使用。您能告诉我为什么您认为我的JettyDaemon不是属性设置吗?jersey的SCI没有执行,告诉我。请确保将WebAppContext配置设置为支持注释-请参阅位于
<properties>
    <jersey.version>2.11</jersey.version>
    <spring.framework.version>4.0.6.RELEASE</spring.framework.version>
    <jaxrs.version>2.0</jaxrs.version>
</properties>
<dependencies>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.18.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-jetty-servlet</artifactId>
        <version>2.11</version>
    </dependency>
</dependencies>
javax.servlet.UnavailableException: No class in holder
    at org.eclipse.jetty.servlet.BaseHolder.doStart(BaseHolder.java:88)
    at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:332)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:868)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
    at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1341)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1334)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:497)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:41)
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186)
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:498)
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:180)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64)
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:609)
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:528)
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391)
    at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:313)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:150)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:560)
    at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:235)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
    at org.eclipse.jetty.server.Server.start(Server.java:380)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
    at org.eclipse.jetty.server.Server.doStart(Server.java:347)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at yjava.servlet.container.jetty.JettyDaemon.start(JettyDaemon.java:40)
    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:483)
    at org.apache.commons.daemon.support.DaemonLoader.start(DaemonLoader.java:177)
    <?xml version="1.0" encoding="UTF-8"?>
    <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"
      metadata-complete="false" version="3.1">   

      <servlet>
      <servlet-name>TestApp</servlet-name>
         <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.test.api.TestApiApplication</param-value>
         </init-param>
      </servlet>

      <servlet-mapping>
        <servlet-name>TestApp</servlet-name>
        <url-pattern>/v1/*</url-pattern>
      </servlet-mapping>
    </web-app>