REST(JAX-RS),基于Jersey的Hello World!

尼玛的...弄半天,还成,写完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有个基本的认识.具体的知识点,我另开一文章.

你可能感兴趣的:(REST,helloworld,demo,jersey,JAX-RS)