【问题标题】:Jersey, Tomcat: The requested resource is not available error泽西岛,Tomcat:请求的资源不可用错误
【发布时间】:2015-11-05 12:09:37
【问题描述】:

我一直致力于在 RAD 8.5 中使用 Jersey 和 Tomcat 设置 RESTful 服务。我查看了大量与我的错误相关的 stackoverflow 问题,但没有一个有效。我的控制台中没有错误。

当我只输入:http://localhost:8080/ 时,我得到了 Apache 主页,所以服务器正在工作,但是 http://localhost:8080/jersey/rest/hellohttp://localhost:8080/jersey/WEB-INF/classes/jersey/Hello.java 不工作。

这是错误:(旁边有我的 jar 库) 这是我的Hello.java

package jersey;

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 request
      @GET
      @Produces(MediaType.TEXT_PLAIN)
      public String sayPlainTextHello() {
        return "Hello Jersey";
      }

      // This method is called if XML is request
      @GET
      @Produces(MediaType.TEXT_XML)
      public String sayXMLHello() {
        return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
      }

      @GET
      @Produces(MediaType.TEXT_HTML)
      public String sayHtmlHello() {
        return "<html> " + "<title>" + "Hello Jersey" + "</title>"
            + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
      }
}

还有我的 web.xml

<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>com.example</param-value>
    </init-param>
</servlet>

版本:

  • Tomcat:7.0.663
  • 辐射度:8.5
  • 球衣:2.19

谢谢,

回应 Maciej 这行得通!我需要使用/* 的url 模式添加&lt;servlet-mapping&gt;。然后使用http://localhost:8080/jersey/hello,我得到了服务器的响应!

<?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_2_5.xsd"
    id="jersey" version="2.5">
    <servlet>
        <servlet-name>jersey</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>jersey</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

【问题讨论】:

    标签: eclipse rest tomcat7 jersey-2.0 rad


    【解决方案1】:

    您正在将已编译的代码部署到 Tomcat,因此您将无法访问 *.java 资源。

    注解@Path("/hello") 表示资源可用的路径。

    设置为:base URL + /your_pathbase URL 基于您的应用程序名称、servlet 和来自 web.xml 的 URL 模式:

    <?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_2_5.xsd"
        id="jersey" version="2.5">
        <servlet>
            <servlet-name>jersey</servlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>jersey</param-value>
            </init-param>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>jersey</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
    </web-app>
    

    同样将@Produces注解替换为@Consumes

    package jersey;
    
    import javax.ws.rs.Consumes;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.core.MediaType;
    
    @Path("/hello")
    public class Hello {
    
          // This method is called if TEXT_PLAIN is request
          @GET
          @Consumes(MediaType.TEXT_PLAIN)
          public String sayPlainTextHello() {
            return "Hello Jersey";
          }
    
          // This method is called if XML is request
          @GET
          @Consumes(MediaType.TEXT_XML)
          public String sayXMLHello() {
            return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
          }
    
          @GET
          @Consumes(MediaType.TEXT_HTML)
          public String sayHtmlHello() {
            return "<html> " + "<title>" + "Hello Jersey" + "</title>"
                + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
          }
    }
    

    试试:http://localhost:8080/jersey/hello

    【讨论】:

    • 同样的事情发生了,The requested resource is not available
    • 尝试配置servlet映射匹配:jersey/*
    • 我会回答我的问题
    • servlet-mapping 标签应与servlet 定义在同一级别
    • 现在我的服务器无法启动。我收到了几个Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/jersey]] 错误
    【解决方案2】:

    确保您已将所有必需的 Jersey Jar 文件保存在“WEB-INF -> lib”文件夹中

    【讨论】:

      【解决方案3】:

      即使按照Maciej提到的步骤,如果它说404资源未找到,请提及实现Application类的子类并将其写入web.xml中的init-param标签中

          <init-param>
              <param-name>javax.ws.rs.Application</param-name>
              <param-value>packagename.java_class_name</param-value> 
          </init-param>
      

      这对我有用。

      【讨论】:

        【解决方案4】:

        通过这些步骤解决了这个问题

         1. Select all files in lib folder and right click on it
        
         2. Then click add to build path
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-07
          相关资源
          最近更新 更多