在Tomcat 7中访问Jersey应用程序时出现404



我是一个web开发新手,我正在努力使用jersey创建一个简单的rest web服务,打包为独立的war文件,部署在tomcat 7上。

我遵循本教程,以创建简单的hello world restful web服务。我使用intelij来创建war文件(war文件和它的爆炸版本),并将它们部署在tomcatwebapps文件夹中。

当启动tomcat时,我无法访问url (http://localhost:8080/rest/hello) -得到404.

查看tomcat的日志,我找不到任何异常或错误,除了下面这组行:

INFO: Scanning for root resource and provider classes in the packages:
  sample
εαΘ 30, 2013 11:24:38 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
  class sample.Hello
εαΘ 30, 2013 11:24:38 PM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.

我已经搜索了很多,并试图遵循这个错误的所有解决方案,但没有工作。

我有一种感觉,我错过了一些非常基本的东西,由于我的新手。有什么要搜索的吗?我错过了什么?这是一个简单的hello world应用程序,我筋疲力尽和沮丧…

Java类

package sample;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("hello")
public class Hello {
  // This method is called if TEXT_PLAIN is requested
  @GET
  @Produces(MediaType.TEXT_PLAIN)
  public String sayHelloInPlainText() {
    return "Hello world!";
  }
  // This method is called if HTML is requested
  @GET
  @Produces(MediaType.TEXT_HTML)
  public String sayHelloInHtml() {
    return "<html> " + "<title>" + "Hello world!" + "</title>"
        + "<body><h1>" + "Hello world!" + "</body></h1>" + "</html> ";
  }
}

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_2_5.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>rest</display-name>
      <servlet>
        <servlet-name>Jersey REST Service</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>sample</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/*</url-pattern>
      </servlet-mapping>
    </web-app>

这是类似于这个SO问题:"没有找到提供商类:当运行Jersey REST示例应用程序"。

消息"No provider classes found"很好,不用担心。要使URL http://localhost:8080/rest/hello工作,您的WAR文件需要命名为rest.war。然后rest成为上下文根。你在项目注释中定义的所有路径都是相对于上下文根

如果您在eclipse: rest中调用了您的项目,那么您应该从tomcat获得正确的消息:"Hello world!" url:

http://localhost:8080/rest/hello.

例如,如果你已经调用你的项目:MyHello,你发布的代码正确的url应该是:

http://localhost:8080/MyHello/hello

(原因是Eclipse在默认情况下创建了一个名为war的项目名称,并将其发布到您在配置中添加的tomcat服务器)

Let me know

最新更新