首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确配置jax-rs web服务web.xml

如何正确配置jax-rs web服务web.xml
EN

Stack Overflow用户
提问于 2012-09-17 09:07:20
回答 3查看 19.5K关注 0票数 2

我正在尝试使用jersey框架实现一个jax-rs web服务。我已经编写了web服务,但是我不完全理解web.xml标签的含义,所以我不知道我是否正确地配置了它,但是当我试图访问该服务时,我得到了一个错误。下面是web服务:

代码语言:javascript
复制
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是:

代码语言:javascript
复制
 <!-- 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 Status 500类型的异常报告消息

说明服务器遇到内部错误(),使其无法完成此请求。

异常

代码语言:javascript
复制
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服务相关的含义吗

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-17 09:19:39

您设置了错误的servlet。假设您使用的是Jersey,则需要按如下方式指定servlet:

代码语言:javascript
复制
<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>

当你想要访问它时,你可以使用下面的url

代码语言:javascript
复制
http://(host)[:port]/(context path)/rest/test
e.g. 
http://localhost:8080/MyRestProject/rest/test
票数 4
EN

Stack Overflow用户

发布于 2015-03-18 21:34:46

要使用jersey配置jax-rs webservice,您可以在web.xml上使用最简单且只有2个配置的配置(在java代码和注释中使用更多步骤),请执行以下步骤:

Java1)编写应用程序(代码):

代码语言:javascript
复制
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上添加配置引用(到应用程序代码):

代码语言:javascript
复制
<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>
票数 1
EN

Stack Overflow用户

发布于 2013-07-18 18:46:05

当我们使用REST配置rest web服务时,

需要设置init-param和init-value来扫描web服务类实现,如下所示:

代码语言:javascript
复制
<init-param>
   <param-name>com.sun.jersey.config.property.packages</param-name>
   <param-value>yourpackegeName</param-value>
</init-param> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12452064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档