【问题标题】:REST Webservice 404 on Tomcat 8 using mavenTomcat 8 上的 REST Webservice 404 使用 maven
【发布时间】:2014-07-07 09:02:02
【问题描述】:

当我尝试在 tomcat 8 上运行我的 web 服务时遇到 404 NOT FOUND 异常。我的 pom 如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.deangrobler.testrest</groupId>
    <artifactId>TestRest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.10.1</version>
        </dependency>
    </dependencies>
</project>

我的 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>TestRest</display-name>

    <servlet>
        <servlet-name>jersey-helloworld-serlvet</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>com.javacodegeeks.enterprise.rest.jersey</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-helloworld-serlvet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

</web-app>

还有我的注释类:

package com.deangrobler.testrest;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/hellorest")
public class HelloRest {

    @GET
    @Produces("text/plain")
    public String hello () {
        return "Hello there developer!";
    }

}

我希望然后能够击中它

http://localhost:8080/TestRest/rest/hellorest/

但是...我刚刚收到 404 错误...我错过了什么?我会很感激任何帮助:)

【问题讨论】:

标签: java web-services rest maven tomcat


【解决方案1】:

参数 com.sun.jersey.config.property.packages 用于表示包含您的 REST 类的包。所以 param-value 应该是 com.deangrobler.testrest
检查 documentation 是否有 ServletContainer。

【讨论】:

  • 谢谢@mkrakhin - 更新:现在我收到一条错误消息:java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
  • 你应该将 jersey-core 和 jersey-server 添加到你的 pom.xml 中
【解决方案2】:

我认为你的战争名称是TestRest-0.0.1-SNAPSHOT。所以你必须使用网址:http://localhost:8080/TestRest-0.0.1-SNAPSHOT/rest/hellorest/

【讨论】:

    【解决方案3】:

    您似乎使用的是 Jersey 2.0 版本。因此,在您的 web.xml 中,您需要更改 servlet 部分。

    <servlet>
        <servlet-name>JSON RESTful 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>com.samplerest.java</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    

    记得将 param-value 更改为你的 java 代码所在的包的名称。

    这会有所帮助:- 404 error with Jersey REST Service on Tomcat

    【讨论】:

      猜你喜欢
      • 2016-10-20
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      相关资源
      最近更新 更多