我正在尝试使用jersey框架实现jax-rs Web服务。我已经编写了Web服务,但我不完全了解web.xml标签的含义,所以我不知道我是否已将其配置正确,但当我尝试访问该服务时出现错误。这是网络服务:
package org.LMS.Controller;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path ("/test")
public class Test {
private String name = "Worked";
@GET
@Produces (MediaType.APPLICATION_XHTML_XML)
public String getTest ()
{
return name;
}
}
我的web.xml是:
<!-- Test web service mapping -->
<servlet>
<display-name>Test</display-name>
<servlet-name>Test</servlet-name>
<servlet-class>org.LMS.Controller</servlet-class>
<init-param>
<param-name>org.LMS.Controller.Test</param-name>
<param-value>eduscope</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<!--end Test web service mapping -->
这是我尝试访问我的应用程序时遇到的错误: HTTP状态500 - 类型异常报告 消息
description服务器遇到内部错误(),导致无法完成此请求。
例外
javax.servlet.ServletException: Wrapper cannot find servlet class org.LMS.Controller or a class it depends on
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:679)
root cause
java.lang.ClassNotFoundException: org.LMS.Controller
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:679)
你能告诉我我做错了什么,并解释一下web.xml文件中的每个标记与web服务有什么关系
答案 0 :(得分:3)
您设置了错误的servlet。 假设您正在使用Jersey,您需要按如下方式指定您的servlet:
<servlet>
<servlet-name>Rest</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>org.LMS.Controller.Test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Rest</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
如果您想要访问它,请使用以下网址
http://(host)[:port]/(context path)/rest/test
e.g.
http://localhost:8080/MyRestProject/rest/test
答案 1 :(得分:1)
要使用jersey配置jax-rs webservice,您可以在web.xml上配置最简单且只有2个配置(使用java代码和注释中的更多步骤),请按照以下步骤操作:
1)编写应用程序(Java代码):
package your.package.example;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
public class ExampleApplication extends Application {
public Set<Class<?>> getClasses() {
Set<Class<?>> s = new HashSet<Class<?>>();
// Annotated @Path endpoint
s.add(ExampleWebServiceRestClass.class);
return s;
}
}
2)在web.xml上添加配置引用(到应用程序代码):
<web-app>
<servlet>
<servlet-name>your.package.example.ExampleApplication
</servlet-name>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>your.package.example.ExampleApplication
</servlet-name>
<url-pattern>/wspath/*</url-pattern>
</servlet-mapping>
</web-app>
答案 2 :(得分:0)
当时我们在休息时配置REST Web服务,
需要设置init-param和init-value来扫描Web服务类实现,如下面的Jersey Class进行扫描: -
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>yourpackegeName</param-value>
</init-param>