【问题标题】:RESTfull Jersey application, The requested resource is not availableRESTfull Jersey 应用程序,请求的资源不可用
【发布时间】:2016-12-07 14:08:22
【问题描述】:

这是我第一次尝试使用 RESTfull 应用程序。我已经阅读了许多与我的问题相同的页面,但它们并没有安静地达到目标。

这是我的服务。

package com.tutorialspoint;

import java.util.List;

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

@Path("/UserService")
public class UserService {

   UserDao userDao = new UserDao();

   @GET
   @Path("/users")
   @Produces(MediaType.APPLICATION_XML)
   public List<User> getUsers(){
      return userDao.getAllUsers();
   }    
}

我的 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>User Management</display-name>
   <servlet>
      <servlet-name>Jersey RESTful Application</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.tutorialspoint</param-value>
         </init-param>
      </servlet>
   <servlet-mapping>
   <servlet-name>Restful Web Service</servlet-name>
      <url-pattern>/rest/*</url-pattern>
   </servlet-mapping>  
</web-app>

我正在使用 Jersey 2.17 和 Tomcat 7.0。看起来所有 .jar 文件都已正确添加到 /WEB-INF/lib。我将我的项目导出为 .war 文件并将其放入 /Tomcat/webapps 目录。 然后我正在尝试启动

http://localhost:8080/RestV1/rest/UserService

我收到此错误:

HTTP 状态 404 - /RestV1/rest/UserService/users 请求的资源是 不可用。

这些方法来自教程,所以它们应该没有任何问题。我的 Tomcat 错误日志也是空的。 知道有什么问题吗?

【问题讨论】:

  • RestV1.war 是你制作的战争的名称吗?
  • 是的,先生,还有项目名称。
  • 我认为你只需要 servlet-name 来匹配 和 。我会测试一下并写出来

标签: java rest tomcat jersey


【解决方案1】:

您需要在&lt;servlet-mapping&gt; 中使用您在&lt;servlet&gt; 中定义的相同&lt;servlet-name&gt;。所以用 servlet 定义:

<servlet>
  <servlet-name>Jersey RESTful Application</servlet-name>
  ...
</servlet>

您的映射应如下所示:

<servlet-mapping>
   <!-- this will not map properly
     <servlet-name>Restful Web Service</servlet-name>
   -->
   <servlet-name>Jersey RESTful Application</servlet-name>
   <url-pattern>/rest/*</url-pattern>
</servlet-mapping> 

我下载了 Tomcat,并确保当名称不匹配时我得到了 404,并且当它们匹配时请​​求到达了 servelt。

作为参考,搜索 servlet-mappings 并注意在这些 examples 中使用的名称始终匹配

【讨论】:

  • 不幸的是它没有帮助
  • 你清除了Tomcat中的所有缓存吗?我不得不删除我之前的部署所分解的文件夹。
  • 缓存清除没有帮助现在我得到了不同的错误。 “HTTP 状态 500 - Servlet Jersey RESTful 应用程序的 Servlet.init() 引发异常”,服务器遇到内部错误,导致无法完成此请求。
  • 信不信由你,这很好。现在正在注册您的 servlet。我不知道你是如何建造战争的,但我认为你对此有经验。看看这个:stackoverflow.com/questions/29136257/…
  • 谢谢先生,我今天的工作要完成了。如果我有一些问题,我会在这里发布。
猜你喜欢
  • 2015-07-11
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 2018-02-07
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
相关资源
最近更新 更多