我一直在努力让本教程发挥作用: Link 我正在使用 Apache Tomcat 7.0 和 Jersey 2.0 库。 这是我的服务:
package org.arpit.javapostsforlearning.webservice;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("ConversionService")
public class FeetToInchAndInchToFeetConversionService {
@GET
@Path("/InchToFeet/{i}")
@Produces(MediaType.TEXT_XML)
public String convertInchToFeet(@PathParam("i") int i) {
int inch=i;
double feet = 0;
feet =(double) inch/12;
return "<InchToFeetService>"
+ "<Inch>" + inch + "</Inch>"
+ "<Feet>" + feet + "</Feet>"
+ "</InchToFeetService>";
}
@Path("/FeetToInch/{f}")
@GET
@Produces(MediaType.TEXT_XML)
public String convertFeetToInch(@PathParam("f") int f) {
int inch=0;
int feet = f;
inch = 12*feet;
return "<FeetToInchService>"
+ "<Feet>" + feet + "</Feet>"
+ "<Inch>" + inch + "</Inch>"
+ "</FeetToInchService>";
}
}
这是我的 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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 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">
<display-name>RESTfulWebServiceExample</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>org.arpit.javapostsforlearning.webservice</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
我尝试在服务器上运行它以进行部署,我还尝试让 eclipse 将其导出为 war 文件,然后使用 tomcat 应用程序管理器进行部署。 我得到 HTTP 状态 404 的两种方式,请求的资源不可用。 在此之前,任何日志中都有错误消息。 我还尝试将一个简单的 index.html 文件放在 Webcontent 文件夹中,但我也无法在浏览器中访问它。 我知道论坛上有很多类似的帖子,但在阅读它们并尝试了几个小时之后,我仍然无法弄清楚如何解决我的问题。
最佳答案
有时对 Java Web 服务进行故障排除令人沮丧,因此遵循一些简单的步骤来查找错误会很有帮助。
你的防火墙打开了吗?检查它是否已关闭或未阻止您的网络服务器运行的端口。大多数时候它是端口 8080。它在 url localhost:
8080
中。/我的网络服务/网址检查服务器提供的根应用程序页面,确保服务器正在运行。在 Tomcat 上,通常是 localhost:8080/manager/html
检查您的应用程序容器的日志以查找 stacktrace在启动时确保您的部署没有错误。
尝试部署尽可能少的网络服务,例如 "Hello World" jax-rs以确保您拥有正确的库和其他可用配置。
如果您通过了所有这些但仍然没有网络服务,您的 jax-rs 注释可能在某种程度上是不正确的。您可以通过添加到配置来在您的 web.xml 中启用请求匹配。
<web-app> <servlet> <servlet-name>Jersey REST Service for value codes</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> ... <init-param> <param-name>com.sun.jersey.config.feature.Trace</param-name> <param-value>true</param-value> </init-param> </servlet> ... </web-app>
您会在日志中看到 url 跟踪
{X-Jersey-Trace-008=[mapped exception to response: javax.ws.rs.WebApplicationException@56f9659d -> 415 (Unsupported Media Type)],
X-Jersey-Trace-002=[accept right hand path java.util.regex.Matcher[pattern=/myResource/([-0-9a-zA-Z_]+)(/.*)? region=0,17 lastmatch=/myResource/23/mySubresources]: "/myResource/23/mySubresources" -> "/myResource/23" : "/mySubresources"],
提示:在生产中保留它可能不是一个好主意
关于java - 返回 http 状态 404 的简单 Rest Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21633070/