Jersey服务开启却报404的错误

首先,在确保Jar包没有导错的情况下。我们来看一下源代码:
webservice:
package com.gosun.cluster.web.service;

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 HelloResource {
    @GET
    @Path ("/jersey" )
    @Produces(MediaType. TEXT_PLAIN)
    public String helloJersey() {
        return "Hello Jersey" ;
    }

    @GET
    @Path ("/ezfen" )
    @Produces(MediaType. TEXT_PLAIN )
    public String helloEzfen() {
        return "Hello Ezfen" ;
    }
}


为了简单测试,这里就简单打印"Hello XXX"。注意一下,这里有两个方法,分别代表不同的访问资源。输出的内容也不一样。
这是很多时候的做法,我们将同一类型的资源(上面的jersey和ezfen)放在一个大的总体(上面的hello)中。很重要的一点,请注意。

web.xml:

  
    jersey-serlvet
    com.sun.jersey.spi.spring.container.servlet.SpringServlet                    
     
    
          com.sun.jersey.config.property.packages
          com.gosun.cluster.web.service
    
    1
  

  
    jersey-serlvet
    /hello/*
  



顺带提一点:这里的jersey是和spring一起使用的,将jersey的webservice交给spring管理。
因此容器这一块,必须选择: com.sun.jersey.spi.spring.container.servlet.SpringServlet

配置完后,开启服务器,看看能否加载到这个webservice:
Jersey服务开启却报404的错误_第1张图片
可以看到,HelloResource已经启动,接下来访问一下:
Jersey服务开启却报404的错误_第2张图片
发现输入url地址后错误,意外之际,访问/hello/ezfen,报的是同样的错误。。。。

404,那肯定是地址url的问题。但是复制粘贴,重新书写,依旧访问不到。
百度,google了一堆,掉坑,爬起来,再掉坑,再爬起来。
后来才发现, 访问的地址在web.xml中已经限制servlet前缀是/hello,
Jersey服务开启却报404的错误_第3张图片
而此处的前缀是指访问该servlet的前缀,而非webservice的前缀。
因此,将访问url改为 http://localhost:8080/goManager/hello/hello/jersey
Jersey服务开启却报404的错误_第4张图片
问题解决,成功访问到了。

建议一点:通常在一个webservice中会有不少的资源以供访问。在配置webservice的路径时应慎重考虑,也应该清楚不同的路径对应的是什么。
上面强调过,很多时候,我们将同一类型的资源(上面的jersey和ezfen)放在一个大的总体(上面的hello)中。这会让我们以为web.xml中配置的路径就是Jersey中Webservice的路径(当然这是不正确的)。 因此, 使用Jersey的时候,在web.xml中配置servlet的url-pattern不应该包含webservice的路径。

怪自己学得不精不细 T_T

你可能感兴趣的:(Jersey)