Restful Web 个人学习总结(Jersey)



一、对基础概念的理解。

1.部分名词的解释

①   REST: RepresentationalState Transfer  表述性状态转移;针对网络应用的设计和开发方式,是一种软件架构风格,也是主流的三种Web服务交互方案之一。

②   Restful Web:表述性状态转移是一组架构约束条件和原则,满足这些约束条件和原则的应用程序或设计就是RESTful。

③   SOAPsmple object acess protocol 简单对象访问协议。是主流的三种Web服务交互方案之一。(还有一个是xml-Rpc)

④   ROA:Resource-orientedArchitecture(面向资源的体系结构)的缩写。它是根据REST的设计原则设计的一种具体的Web应用体系结构。

⑤ MIME:(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开

2.个人理解

就是将我们要访问的web资源,封装起来,客户端通过Http方法(Get/Put/Post/Delete)对资源进行访问和操作。

3.Restful  Web 的特性

①显示地使用HTTP方法 :建立 create、读取 read、更新 update、删除delete 操作与HTTP方法之间的一对一映射

②无状态:REST Web 服务需要发送完整、独立的请求;也就是说,发送的请求包括所有需要满足的数据,以便中间服务器中的组件能够进行转发、路由和负载平衡,而需要在请求之间在本地保存任何状态。(在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度)

③目录结构式的URL: 此类 URI 具有层次结构,其根为单个路径,从根开始分支的是公开服务的主要方面的子路径 。

④传输XML/JSON 或者传输这两者:资源表示形式通常反映了在客户端应用程序请求资源时的资源当前状态及其属性。

4.小demo(需要导入包的自己导入,这里不讲解)

①在web.xml中配置相对应的过滤器。(拦截/service/*跳转到自定义的类RestApplication)

<servlet>
		<servlet-name>jersey-serlvet</servlet-name>
		<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
		<init-param>
		     <param-name>javax.ws.rs.Application</param-name>
		     <param-value>com.myself.rest.RestApplication</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>jersey-serlvet</servlet-name>
		<url-pattern>/service/*</url-pattern>
	</servlet-mapping>

②配置实现类

public class RestApplication extends ResourceConfig {
    public RestApplication() {
 
     //服务类所在的包路径
     packages("com.myself.rest");
     //注册JSON转换器
     register(JacksonJsonProvider.class);
    }
}

③在指定路径或者文件中配置http注解方法。

@Component
@Path("Test")//顶端访问路径
public class ARestTest{

	 @POST
	 @Path("updateUser")    //路径的定义
	 @Consumes(MediaType.APPLICATION_JSON)//设置接收的类型。
	 public void updateUser(ARestTestUser  TestUser,@QueryParam("tempId")String tempId) {//接收对象和参数。
		 System.out.print("accept");
		
		System.out.println("tempId:"+tempId);
		 System.out.print(TestUser.toString());
		 }
//	 
	 @GET
	 @Path("GetString")           //路径的定义
	 @Produces(MediaType.TEXT_PLAIN)//设置发送的类型
         //访问路径为http://localhost:8080/rest(项目名)/service(拦截)/Test/GetString .
	 public String sayHello() {
		  return "hello jersey!";
	 }
	 
}

④客户端的设置。(当然,还可以在 浏览器直接输入链接进行访问。不过post不可以)

	public void Post(){
		ARestTestUser  TestUser = new ARestTestUser(5,"post","entity");//设置要传递的对象
		String serverURI = "http://localhost:8080/rest/service/Test";
		Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);
		WebTarget target = client.target(serverURI);//将连接传递给Web,.
		target.path("updateUser").queryParam("tempId", "1112221122").request()
				.post(Entity.entity(TestUser, MediaType.APPLICATION_JSON));//post方法的具体实现。传递了一个对象和一个参数
	
	}
	public void Get(){
		String serverURI = "http://localhost:8080/rest/service/Test";
		Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);
		WebTarget target = client.target(serverURI + "/GetString");
		Response response = target.request().get();//链接的跳转				
		response.close();
	}

5.优缺点的理解

①优点:

1. 轻量,直接基于http,不在需要任何别的诸如消息协议。get/post/put/delete为CRUD操作
2. 面向资源,一目了然,具有自解释性。
3. 数据描述简单,一般以xml,json做数据交换。

②缺点:

1.开发效率低【不适应于自动化处理】
2.运行效率低【需要比较复杂的字符串匹配模式】
3.环境适应性差【不适应参数复杂的情况】


6.参考学习网址

①使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务

https://www.ibm.com/developerworks/cn/web/wa-aj-tomcat/

②基于 REST 的 Web 服务:基础

https://www.ibm.com/developerworks/cn/webservices/ws-restful/index.html

③RESTful  web 和 SOAP的比较

https://www.ibm.com/developerworks/cn/webservices/0907_rest_soap/

④例子的实现(demo)

http://dyygusi.iteye.com/blog/2148029


7.以上的内容是个人整理出来的,希望大家指出错误,我将及时修改。如果侵权,告诉我一声,我删。


猜你喜欢

转载自blog.csdn.net/kunfd/article/details/78672040