尼玛的...弄半天,还成,写完blog再深入研究下,晚上回去把JAXB什么的代码发blog.
开始需要准备3个jar包,这里不管jar包是否正确(我意思是实际开发这些jar包不一定适用!),反正翻了半天在网上东拉西扯的拖到了这三个jar包,否则的话会报错.Class not found.
asm-3.3.1.jar jersey-bundle-1.5.jar
jboss-jaxrs-api_1.1_spec-1.0.1.Final.jar
= =!第三个没找官方包,电脑里有这货直接抓来用了.前2个下载地址是在maven库里稀里糊涂找到的,掠过掠过...
反正这三个货是必须的.
环境是MyEclipse10.0,新建 Web Service Project,然后输入项目名什么的后,在最下方选择REST(JAX-RS),JAX-WS是另一种风格的WebService.
剩下的自己琢磨的点吧,我也不是很清楚,刚写这货.反正写过JAXB的DEMO,就选了个JAXB,其他默认.
然后把3个jar包甩到lib目录下.Over.
然后就是写代码嘞:
第一个是资源文件,如果你用的是tomcat,那么不要写CDI方面的东西.tomcat不支持:
package org.credo.rest; import javax.inject.Inject; import javax.inject.Named; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.Produces; /** * http://localhost:8080/Rest/services/helloWorld * http://localhost:8080/Rest/services/application.wadl * @author Credo * */ @Named @Path("/helloWorld") public class HelloWorldResource { @Inject NameStorageBean filed; @GET @Produces("text/html") public String getXml(){ System.out.println("here!filed is"); return "<html><body><h1>Hello World!</h1></body></html>"; } @PUT @Consumes("text/plain") public void putXml(String content){ filed.setName(content); } }
另一个文件,如果你用tomcat就无视这个文件好了,因为tomcat默认不支持CDI/EJB,所以第一个文件你要是引用的话会报空指针,开始我没反应过来还愣了半天:
package org.credo.rest; import javax.inject.Singleton; @Singleton public class NameStorageBean { private String name; public String getName() { return name="credo"; } public void setName(String name) { this.name = "credo.zhao"; } }
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></display-name> <servlet> <display-name>JAX-RS REST Servlet</display-name> <servlet-name>JAX-RS REST Servlet</servlet-name> <servlet-class> com.sun.jersey.spi.container.servlet.ServletContainer </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JAX-RS REST Servlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>这里需要解释下了,既然是Rest服务性质,那么,额,不知道怎么说,
<servlet-mapping> <servlet-name>JAX-RS REST Servlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>上面这段,就是REST的一个请求访问的路径.
注意如果没有 Resource 将会报如下异常:
com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
所以写上面第一段代码的时候要看清楚,path路径什么的.
PS:tomcat cdi都不支持,鄙视啊....当初弄primefaces+spring+jpa的架子的时候就因为不支持EJB选了spring.不过CDI,EJB什么的也能设置的好像,有空研究下.
运行tomcat,http://localhost:8080/Rest/services/helloWorld,OK,你看到了helloworld.
运行http://localhost:8080/Rest/services/application.wadl,你看到了XML文件.
只是一个简单的HelloWorld,啥也算不上,起码对JAX-RS有个基本的认识.具体的知识点,我另开一文章.