Servlet类com.foobar.jaxrs.application.MyApplication不是javax.servlet.Servlet [英] Servlet class com.foobar.jaxrs.application.MyApplication is not a javax.servlet.Servlet

查看:96
本文介绍了Servlet类com.foobar.jaxrs.application.MyApplication不是javax.servlet.Servlet的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Servlet 3.1和一个Application Subclass配置Jersey.一直在阅读文档并尝试解决这个问题,但是我不确定这里出了什么问题.

I'm trying to configure Jersey with Servlet 3.1 and an Application Subclass. Been reading documentation for a while and trying to get this going, but i'm not sure what's wrong here.

web.xml(尽管我不需要一个,但我得到的却是一个没有404的404 ...)

web.xml (though I shouldn't need one I get a 404 without one...)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">

<display-name>Foobar Models</display-name>

<welcome-file-list>
    <welcome-file>index.htm</welcome-file>
</welcome-file-list>

<session-config>
    <session-timeout>30</session-timeout>
    <cookie-config>
        <name>SESSIONID</name>
    </cookie-config>
</session-config>

<servlet>
    <servlet-name>Foo Bar Application</servlet-name>
    <servlet-class>com.foobar.jaxrs.application.FooBarApplication</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Foo Bar Application</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

</web-app>

应用子类

package com.foobar.jaxrs.application;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/api")
public class FooBarApplication extends Application {
public Set<Class<?>> getClasses() {
    Set<Class<?>> s = new HashSet<Class<?>>();
    s.add(com.foobar.api.HealthCheckResource.class);
    return s;
}
}

HealthCheckResource.java

HealthCheckResource.java

package com.foobar.api;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("health")
public class HealthCheckResource {

    @GET
    @Produces("text/html")
    public String getHeath() {
        return "Foo Bar Application is healthy!";
    }

}

在码头上奔跑(与Tomcat 8相同)

Running in jetty (same in Tomcat 8)

HTTP ERROR 404

Problem accessing /foobar/api/health. Reason:

    Servlet class com.foobar.jaxrs.application.FooBarApplication is not a javax.servlet.Servlet
Caused by:

javax.servlet.UnavailableException: Servlet class com.foobar.jaxrs.application.FooBarApplication is not a javax.servlet.Servlet
    at org.mortbay.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:362)
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:243)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
....

推荐答案

我发现了问题-我在gradle的Jetty插件中运行,该插件使用Servlet 2.5,但我正在部署Servlet 3.1应用程序.在使用正确的配置部署到Tomcat 8之后,我能够在没有web.xml的情况下使其正常工作.

I figured out the issue - I was running in gradle's jetty plugin which uses servlet 2.5 but i'm deploying a servlet 3.1 app. I was able to get it to work without the web.xml after deploying to Tomcat 8 with the correct configuration.

它仍然不能与Jetty一起使用(需要获得Jetty的更新版本),但是在Tomcat 8中,它可以工作:

It still doesnt work with Jetty (need to get an updated version of jetty), but in Tomcat 8 this works:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">

    <display-name>Foo Bar Models</display-name>

    <welcome-file-list>
        <welcome-file>index.htm</welcome-file>
    </welcome-file-list>

</web-app>

BaseApplication.java 包com.foobar.jaxrs.application;

BaseApplication.java package com.foobar.jaxrs.application;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("")
public class BaseApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(com.patrickkee.resources.HealthCheckResource.class);
        return s;
    }
}

这篇关于Servlet类com.foobar.jaxrs.application.MyApplication不是javax.servlet.Servlet的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆