Tomcat RESTful Web服务部署

时间:2015-07-27 15:50:31

标签: java web-services rest tomcat

我正在使用Java,tomcat7,jersey和IDE eclipse编写一个简单的RESTful Web服务。

当我使用eclipse(Servers)启动Web服务时,它运行良好。我测试了GET和POST方法。但是当我在WAR文件中导出应用程序并使用tomcat管理UI部署时。它返回未找到的状态404。

以下是示例:

@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>

有人可以解释在eclipse中启动服务和在localhost(OR远程主机)中部署之间的区别吗?我该如何调试或得到一些关于此的痕迹?

3 个答案:

答案 0 :(得分:1)

有2个建议让你摆脱这个问题 1)在你的资源文件中创建一个默认方法,这样如果没有url匹配,那么它将调用否则它可能会给404

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

你可以看到 - &gt; Rest api resource example

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

B

你可以看到 - &gt; Rest api default path set

这样当你打电话给你的api时 - > http://something.com/project/rest 然后将触发您的资源文件的默认方法。所以没有404发生。

答案 1 :(得分:1)

我终于开始工作了。我在eclipse项目的属性中设置了context-root。可访问的URL将类似于:localhost:8080 / context-root / rest / ...但是当我在Tomcat中使用WAR文件部署它时,不会考虑此配置。正确的URL仍然是:localhost:8080 / project / rest /...

我必须找到如何在web.xml或其他地方设置context-root。

答案 2 :(得分:0)

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

http://www.vogella.com/tutorials/REST/article.html#jerseyprojectsetup_gradle

我正在开发REST Api&以及以下是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>

所有REST API服务类都存储在classes / io / swagger / api文件夹下。 当我调用REST api时,我使用以下URL并且它可以工作。

http://localhost:8080/bae4_3_release/bae/bcpInstance

,其中 http://localhost:8080/bae4_3_release 是上下文。 / bae / bcpInstance 指向 classes / io / swagger / api / BcpInstanceApi.class 中的一个类,其中PATH定义为@bcpInstance。

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

表示REST API部署的位置。