首先,在确保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启动Webservice -->
<servlet >
<servlet-name >jersey-serlvet</ servlet-name>
<servlet-class >com.sun.jersey.spi.spring.container.servlet.SpringServlet
</servlet-class >
<init-param >
<param-name> com.sun.jersey.config.property.packages</param-name >
<param-value> com.gosun.cluster.web.service</param-value >
</init-param >
<load-on-startup >1</ load-on-startup>
</servlet >
<servlet-mapping >
<servlet-name >jersey-serlvet</ servlet-name>
<url-pattern >/hello/*</ url-pattern>
</servlet-mapping >
顺带提一点:这里的jersey是和spring一起使用的,将jersey的webservice交给spring管理。
因此容器这一块,必须选择:
com.sun.jersey.spi.spring.container.servlet.SpringServlet
配置完后,开启服务器,看看能否加载到这个webservice:
可以看到,HelloResource已经启动,接下来访问一下:
发现输入url地址后错误,意外之际,访问/hello/ezfen,报的是同样的错误。。。。
404,那肯定是地址url的问题。但是复制粘贴,重新书写,依旧访问不到。
百度,google了一堆,掉坑,爬起来,再掉坑,再爬起来。
后来才发现,
访问的地址在web.xml中已经限制servlet前缀是/hello,
而此处的前缀是指访问该servlet的前缀,而非webservice的前缀。
问题解决,成功访问到了。
建议一点:通常在一个webservice中会有不少的资源以供访问。在配置webservice的路径时应慎重考虑,也应该清楚不同的路径对应的是什么。
上面强调过,很多时候,我们将同一类型的资源(上面的jersey和ezfen)放在一个大的总体(上面的hello)中。这会让我们以为web.xml中配置的路径就是Jersey中Webservice的路径(当然这是不正确的)。
因此,
使用Jersey的时候,在web.xml中配置servlet的url-pattern不应该包含webservice的路径。
怪自己学得不精不细 T_T