所以我正在尝试为学校项目设置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
有关,但我无法弄清楚是什么。
答案 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!";
}
}
希望这在某种程度上有所帮助:)