我使用Jersey 1.17.1开发了一个简单的休息Web服务,并部署在Tomcat 7.0.41中。但是,当我点击服务URL时,我得到404响应(请求的资源不可用)。我确实在tomcat日志中找到了以下语句,无法弄清楚原因 - com.sun.jersey.api.core.ScanningResourceConfig init 信息:找不到提供者类。
以下是我正在使用的代码: -
package com.test.rest.service;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("persolazation")
public class PersolazationService {
@GET
@Path("/name/{i}")
@Produces(MediaType.TEXT_XML)
public String userName(@PathParam("i") String i) {
String name = i;
return "<User>" + "<Name>" + name + "</Name>" + "</User>";
}
}
和web.xml如下: -
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>RESTfulWS</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>com.test.rest.service</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
我使用以下网址来调用该服务: - http://:8080 / RESTfulWS / rest / persolazation / name / Robert。
Catalina.out logs are below -
INFO: Deploying web application archive /usr/local/tomcat/apache-tomcat-7.0.47/webapps/RestfulWS.war
Dec 26, 2013 11:56:08 AM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
com.test.rest.service
Dec 26, 2013 11:56:08 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
class com.test.rest.service.PersolazationService
Dec 26, 2013 11:56:08 AM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
Dec 26, 2013 11:56:08 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.17.1 02/28/2013 12:47 PM'
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
请告知。
谢谢, 深
答案 0 :(得分:0)
由于您的战争名称是RestfulWS.war,因此默认情况下Tomcat将在http://localhost:8080/RestfulWS
托管您的应用程序。这将是您的Web应用程序的上下文根(假设您没有更改Tomcat端口)。
如果你点击了那个网址,如果你在src / main / webapp下有一个index.html那么你会看到index.html的内容。
接下来,由于您已将/ rest / *映射到Jersey servlet,因此需要将其添加到路径中。
然后,由于您在PersolazationService类中指定了@Path(“persolazation”),因此您还需要将其添加到您的URL中。
由于您已将方法进一步映射到@Path(“/ name / {i}”),因此您的网址会变为:
http://localhost:8080/RestfulWS/rest/persolazation/name/Deep
(或您想要提供的任何名称)
注意,虽然您的web.xml中有<display-name>RESTfulWS</display-name>
,但不会影响或影响您的网址或上下文根。您将在Tomcat Manager中看到该名称作为Web应用程序的名称,但Web应用程序上下文根将基于war文件的名称。