RESTful WebService和web service的区别

 我来答
育知同创教育
2017-12-07 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部

实体类

package com.tgb.cxf.server; import javax.xml.bind.annotation.XmlRootElement; //一定要使用XmlRootElement注解进行标注 @XmlRootElement(name="user") public class User {    private String id;  private String name;    public String getId() {   return id;  }  public void setId(String id) {   this.id = id;  }  public String getName() {   return name;  }  public void setName(String name) {   this.name = name;  }   }

WebService 接口

@Path("/userservice/") public interface IMyService {    @Path("/addUser/")  @POST  Response addUser(User user);    @Path("/delUser/{id}/")  @DELETE  Response delUser(@PathParam("id") String id);    @Path("/updateUser/")  @PUT  Response updateUser(User user);    @Path("/getUserById/{id}/")  @GET  @Produces("application/json")//返回json数据格式  User getUserById(@PathParam("id") String id);    @Path("/")  @GET  @Produces("application/json")//返回json数据格式  List<User> findAllUsers(); }

WebService 实现类

public class MyServiceImpl implements IMyService {  private HashMap<String, User> users = new HashMap<String,User>();    public MyServiceImpl(){   init();  }    public Response addUser(User user) {   users.put(user.getId(), user);   System.out.println("添加用户成功");   System.out.println(users.size());   System.out.println(users.get("2").getName());   return Response.ok().build();  }  public Response delUser(String id) {   users.remove(id);   System.out.println(users.size());   return Response.ok().build();  }  public Response updateUser(User user) {   users.put(user.getId(), user);   System.out.println(users.get("1").getName());   return Response.ok().build();  }  public User getUserById(String id) {   return users.get(id);  }        private void init(){   User user = new User();   user.setId("1");   user.setName("温欢");   users.put(user.getId(), user);  }    public List<User> findAllUsers() {   List<User> userlist = new ArrayList<User>();   userlist.add(users.get("1"));   return userlist;  } }

spring -cxf.xml配置文件

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:jaxrs="http://cxf.apache.org/jaxrs"  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">    <!--         注意这里的jaxrs命名空间需要大家手动添加       -->    <!-- 发布webservice -->  <bean id="serviceBean" class="com.tgb.cxf.server.MyServiceImpl"/>  <jaxrs:server id="userService"  address="/myservice">   <jaxrs:serviceBeans>    <ref bean="serviceBean"/>   </jaxrs:serviceBeans>  </jaxrs:server>   </beans>

web.xml 文件配置

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">      <!-- 配置spring -->   <context-param>  <param-name>contextConfigLocation</param-name>  <param-value>classpath:config/spring-cxf.xml</param-value>   </context-param>      <listener>  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>   </listener>      <!-- 配置cxf servlet -->   <servlet>         <servlet-name>cxf</servlet-name>         <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>         <load-on-startup>1</load-on-startup>     </servlet>     <servlet-mapping>         <servlet-name>cxf</servlet-name>         <url-pattern>/services/*</url-pattern>     </servlet-mapping> </web-app>

客户端

所需 jar 包

因为 RESTful 就是利用最原始的 http 协议传输数据,所以客户端其实就是一个 http客户端,有以下几种实现方式

JAX-RS Client API --cxf3.0+

Proxy 【使用起来简单,代理封装通信细节】

Apache HttpClient

WebClient

为了简单我使用了 Proxy 方式

代码如下

public class MyClient {     /** @MethodName : main    * @Description : JaxRs测试客户端    * @param args    */   public static void main(String[] args) {    IMyService myService = JAXRSClientFactory.create("http://localhost:8096/cxf02/services/myservice",IMyService.class);        User user = myService.getUserById("1");    System.out.println(user.getName());        User user = new User();    user.setId("2");    user.setName("委座");    myService.addUser(user);        /*User user = new User();    user.setId("1");    user.setName("123");    myService.updateUser(user);*/            myService.delUser("1");        System.out.println(myService.findAllUsers().get(0).getName());   }    }

大家可以使用 TCPMON 这个工具监控以下,可以看到 http body 中只是简单的 json串,没有像 soap 协议那样的“信封”包装

使用 RESTful 设计风格 + 传输 json 数据格式 可以大大的简化 web service 的设计并提高传输效率

其实springMVC也采用了RESTful的设计风格,不过它使用的是spring自己的注解,这些注解和jax-rs中的注解惊奇的类似。如果大家有兴趣可以研究一下springMVC的RESTful特性。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式