當前位置:編程學習大全網 - 源碼下載 - RESTful WebService和web service的區別

RESTful WebService和web service的區別

實體類

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=".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="/xml/ns/javaee" xmlns:web="/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="/xml/ns/javaee /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特性。

  • 上一篇:c堆棧源代碼
  • 下一篇:穿越到安史之亂——讀《危機與重建:唐帝國及其地方統治者》
  • copyright 2024編程學習大全網