Jetty web.xml 503

时间:2014-09-14 20:45:34

标签: java xml jersey jetty jersey-2.0

所以我正在尝试为学校项目设置Jetty,在服务器端使用Jersey,使用Gradle构建并运行它。我有我的web.xml和一个我试图用curl打的测试。这就是我得到的:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="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_3_0.xsd" id="WebApp_ID" version="3.0">

<servlet>
    <servlet-name>Project</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer
    </servlet-class>
    <welcome-file-list>
    <welcome-file>../index.html</welcome-file> 
    </welcome-file-list>
    <init-param>
         <param-name>Project</param-name>
         <param-value>main.java.package</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Reservations</servlet-name>
    <url-pattern>api/*</url-pattern>
</servlet-mapping>

Web.java

package main.java.package;
import javax.ws.rs.Path;
Import javax.ws.rx.GET;
@Path("api/")
public class Web {

    @GET
    @Path("test/")
    public String test() {
        return "it works!";
    }

}

当我卷曲http://localhost:8080/project/api/test时,我得到一个503.所以我假设它与我的web.xml有关,但我无法弄清楚是什么。

2 个答案:

答案 0 :(得分:1)

@javax.ws.rs.GET添加到您的test()方法。

答案 1 :(得分:1)

您的servlet映射不正确 - 在任何地方都没有声明名称为Reservations的servlet。

<servlet-mapping>
    <!-- <servlet-name>Reservations</servlet-name> -->
    <servlet-name>Project</servlet-name>
    <url-pattern>api/*</url-pattern>
</servlet-mapping>

然后请阅读user-guide for jaxrs resources

资源路径与./project/api/api/test匹配,而不是./project/api/test

所以这里有一些修正:

<servlet-mapping>
    <servlet-name>Project</servlet-name>
    <url-pattern>/api/*</url-pattern> <!-- ApplicationPath -->
</servlet-mapping> 
@Path("/test") // resource path 
public class Test { // changed from class Web, 'cause resource is ./test

    @GET // [GET] ./project/api/test
    // @Path("test/") - path is already given by class path
    public String test() {
        return "it works!"; 
    }

    @GET // [GET] ./project/api/test/foo
    @Path("/foo")
    public String testFoo() {
        return "it works for foo!";
    }

}

希望这在某种程度上有所帮助:)