Java Tomcat RESTful Web服务部署

Java Tomcat RESTful Web服务部署,java,web-services,rest,tomcat,Java,Web Services,Rest,Tomcat,我正在使用Java、tomcat7、jersey和IDEEclipse编写一个简单的RESTful web服务 当我使用eclipse(服务器)启动web服务时,它运行良好。我测试了GET和POST方法。但当我在WAR文件中导出应用程序并使用tomcat manage UI部署时。它返回404 not found状态 以下是一个例子: @Path("/webservice") public class WebService { @POST @Path("/post")

我正在使用Java、tomcat7、jersey和IDEEclipse编写一个简单的RESTful web服务

当我使用eclipse(服务器)启动web服务时,它运行良好。我测试了GET和POST方法。但当我在WAR文件中导出应用程序并使用tomcat manage UI部署时。它返回404 not found状态

以下是一个例子:

@Path("/webservice")
public class WebService {

    @POST
    @Path("/post")
    @Produces(MediaType.APPLICATION_JSON)
    public Response helloWorld(String inputJson) {
        return Response.ok().entity("Hello World").build();
    }

    @GET  
    @Path("/{param}")  
    public Response getMessage(@PathParam("param") String message) {  
        String output = "Jersey say Hello World!!! : " + message;  
        return Response.status(200).entity(output).build();  
    }
}
以下是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">
  <display-name>WebService</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>package.webservice</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>jersey-servlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

网络服务
index.html
泽西servlet
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
package.webservice
1.
泽西servlet
/*

有人能解释一下在eclipse中启动服务和在本地主机(或远程主机)中部署服务之间的区别吗?我如何调试或获取有关此问题的一些跟踪信息?

有两个建议可供您解决此问题 1) 在您的资源文件中创建一个默认方法,这样,如果没有url匹配,那么它将调用,否则它可能会给出404

@GET
@Produces({ MediaType.TEXT_HTML, MediaType.TEXT_PLAIN })
public String default() {
    return "Hello Rest Api";
}
您可以看到->

2) 在下面的web.xml lke中设置默认rest api路径

<servlet-mapping>
    <servlet-name>Jersey</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

运动衫
/休息/*
您可以看到->

因此,当您调用api时,如->
然后,资源文件的默认方法将激发。所以没有404发生。

我终于让它工作了。我在eclipse项目的属性中设置了上下文根。可访问的URL类似于:localhost:8080/context root/rest/。。。但是,当我在Tomcat中使用WAR文件部署它时,并没有考虑这种配置。正确的URL仍然是:localhost:8080/project/rest/


我必须找到如何在web.xml或其他地方设置上下文根

使用Jersey运行REST Api的web.xml设置最好在下面的URL中解释

我正在开发RESTAPI,下面是web.xml设置

<servlet>
    <servlet-name>BOARDWALK REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <!-- Register resources and providers under com.vogella.jersey.first package. -->
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>io.swagger.api</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>BOARDWALK REST Service</servlet-name>
    <url-pattern>/bae/*</url-pattern>
</servlet-mapping>

木板路休息服务
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
io.swagger.api
1.
木板路休息服务
/bae/*
所有RESTAPI服务类都存储在classes/io/swagger/API文件夹下。 当我调用RESTAPI时,我使用下面的URL,它可以正常工作

在哪里 是上下文。 /bae/bcpInstance指向classes/io/swagger/api/BcpInstanceApi.class中定义了@bcpInstance路径的类

    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>io.swagger.api</param-value>
    </init-param>

jersey.config.server.provider.packages
io.swagger.api

表示REST API部署的位置。

不工作:(事实上,当我在eclipse中测试时,它工作得非常好,所以URL应该不是问题。然后检查您使用的库是否在战争中或丢失。我已经检查了所有库,没有问题。如此奇怪::我测试了我的应用程序,它在eclipse和tomcat中部署后工作得很好。可能发生的情况是,您的eclipse无法正确构建war文件。