最近因项目需求,开始学习WebServices。

1、开发环境:

MyEclipse2013

2、客户端发送的JSON数据格式为

{persons:[{"name":"a","age":1},{"name":"b","age":2}],"sex":"male"}(POST请求方式使用)

{"name":"abc","age":123}(PUT请求方式使用)

3、服务端返回的JSON数据格式为

{"message":"OK"}

4、客户端请求方式包括

POST、PUT、DELETE、GET

5、服务端参数来自HTTP请求的位置包括

URL路径、URL查询参数

第一步:建立WebServices工程,如图

直接Finish就好,也可以自己Next一下看看有哪些设置。

第二步:添加额外Jar包,包括

org.json

gson

org.restlet.ext.jaxrs

org.restlet.ext.json

org.restlet.ext.servlet

org.restlet

第二步:创建Person类

package server;public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public Person() {}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public String getName() {return this.name;}public int getAge() {return this.age;}public String toString() {return "name=" + this.name + "|age=" + this.age;}
}

第三步:创建MyResponse类

package server;public class MyResponse {private String message;public MyResponse(String message) {this.message = message;}public MyResponse() {}public void setMessage(String message) {this.message = message;}public String getMessage() {return this.message;}public String toString() {return "message=" + this.message;}
}

第四步:创建PersonResource类

package server;import java.util.List;import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;@Path("/person")
public class PersonResource {@POST// 设置请求方式@Path("/post")// 设置请求路径@Consumes("application/json")// 设置接收数据格式@Produces("application/json")// 设置返回数据格式public MyResponse post(JSONObject request) {MyResponse response = new MyResponse("OK");// 获取persons数组
        JSONArray persons;String sex;try {persons = request.getJSONArray("persons");sex = request.getString("sex");} catch (JSONException e) {e.printStackTrace();response.setMessage("ERROR");return response;}// 获取各person信息int count = persons.length();Gson gson = new Gson();List<Person> ps = gson.fromJson(persons.toString(),new TypeToken<List<Person>>() {}.getType());for (int i = 0; i < count; i++) {Person p = ps.get(i);System.out.println(p);}System.out.println(sex);return response;}@PUT@Path("/put")@Consumes("application/json")@Produces("application/json")public MyResponse put(JSONObject request) {MyResponse response = new MyResponse("OK");Gson gson = new Gson();Person p = gson.fromJson(request.toString(), Person.class);System.out.println(p);return response;}@DELETE@Path("/delete")@Produces("application/json")// 从URL查询参数中获取参数public MyResponse delete(@QueryParam("name") List<String> name,@QueryParam("age") int age) {MyResponse response = new MyResponse("OK");System.out.println(name);System.out.println(age);return response;}@GET@Path("/{name}/get")@Produces("application/json")// 从URL路径中获取参数public MyResponse get(@PathParam("name") String name) {MyResponse response = new MyResponse("OK");System.out.println(name);return response;}
}

第五步:创建PersonApplication类

package app;import java.util.HashSet;
import java.util.Set;import javax.ws.rs.core.Application;import server.PersonResource;public class PersonApplication extends Application {@Overridepublic Set<Class<?>> getClasses() {Set<Class<?>> rrcs = new HashSet<Class<?>>();// 绑定PersonResource。有多个资源可以在这里绑定。rrcs.add(PersonResource.class);return rrcs;}
}

第六步:创建RestJaxRsApplication类

package app;import org.restlet.Context;
import org.restlet.ext.jaxrs.JaxRsApplication;public class RestJaxRsApplication extends JaxRsApplication {public RestJaxRsApplication(Context context) {super(context);// 将PersonApplication加入了运行环境中,如果有多个Application可以在此绑定this.add(new PersonApplication());}
}

第七步:修改web.xml,添加如下内容

<context-param><param-name>org.restlet.application</param-name><param-value>app.RestJaxRsApplication</param-value></context-param><servlet><servlet-name>PersonServlet</servlet-name><servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class></servlet><servlet-mapping><servlet-name>PersonServlet</servlet-name><url-pattern>/*</url-pattern></servlet-mapping>

本示例工程的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" version="3.0"><display-name>EXP</display-name><context-param><param-name>org.restlet.application</param-name><param-value>app.RestJaxRsApplication</param-value></context-param><servlet><servlet-name>PersonServlet</servlet-name><servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class></servlet><servlet-mapping><servlet-name>PersonServlet</servlet-name><url-pattern>/*</url-pattern></servlet-mapping>
</web-app>

第八步:编写客户端

package test;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Test;
import org.restlet.data.MediaType;
import org.restlet.resource.ClientResource;
import org.restlet.resource.ResourceException;import server.Person;import com.google.gson.Gson;public class Client {public static String url = "http://127.0.0.1:8080/EXP/person";@Testpublic void testPost() {ClientResource client = new ClientResource(url + "/post");try {Gson gson = new Gson();List<Person> ps = new ArrayList<Person>();for (int i = 0; i < 2; i++) {Person p = new Person();p.setName(String.valueOf('a' + i));p.setAge(i + 1);ps.add(p);}JSONArray persons = new JSONArray(gson.toJson(ps));JSONObject json = new JSONObject("{\"persons\":" + persons+ ",\"sex\":male}");String result = client.post(json, MediaType.APPLICATION_JSON).getText();System.out.println("This is POST...");System.out.println(result);} catch (Exception e) {e.printStackTrace();}}@Testpublic void testPut() {ClientResource client = new ClientResource(url + "/put");JSONObject json;try {json = new JSONObject("{\"name\":\"abc\",\"age\":123}");String result = client.put(json, MediaType.APPLICATION_JSON).getText();System.out.println("This is PUT...");System.out.println(result);} catch (JSONException e) {e.printStackTrace();} catch (ResourceException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}@Testpublic void testDelete() {ClientResource client = new ClientResource(url+ "/delete?name=xyz,ijk&age=456");try {String result;result = client.delete().getText();System.out.println("This is DELETE...");System.out.println(result);} catch (ResourceException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}@Testpublic void testGet() {ClientResource client = new ClientResource(url + "/ijk/get");try {System.out.println("This is GET...");System.out.println(client.get().getText());} catch (ResourceException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

第九步:启动Tomcat,发布服务

若无报错(启动和发布都没报错)则说明服务发布成功。

第十步:运行客户端,查看演示效果

可在客户端与服务端的控制台查看输出。

至此,整个示例工程结束。其中包含了主要的请求方法和参数获得方法,传输的数据格式也采用流行的JSON格式(也可以使用XML,各位可自行查找相关资料)。

我很喜欢的一篇博客:转载于 http://blog.csdn.net/nani_z/article/details/12870887

转载于:https://www.cnblogs.com/chenyq/p/4353828.html

MyEclipse开发JAX-RS架构WebServices收发JSON数据格式相关推荐

  1. 泽西岛/贾克斯RS:流式JSON

    大约一年前,我写了一篇博客文章,展示了如何使用Jersey / Jax RS流式传输HTTP响应 ,最近我想做同样的事情,但是这次使用JSON. 一种常见的模式是获取我们的Java对象并获​​取该对象 ...

  2. JSP SSH校园兼职信息发布平台myeclipse开发mysql数据库MVC模式java编程计算机网页设计

    一.源码特点      JSP SSH校园兼职信息发布平台是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要 ...

  3. JSP停车场车位管理系统myeclipse开发oracle数据库BS模式java编程网

    一.源码特点      JSP 停车场车位管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助servlet+bean+dao (mvc模式开发),系统具有完整的源代码和数据库 ...

  4. 献给android原生应用层开发初学者技术架构选型和整合的方案思路(二)

    前篇<献给android原生应用层开发初学者技术架构选型和整合的方案思路(一)> 本篇侧重于安卓创建的创建和后续 demo 中用到的 lib 在 gradle 中的依赖配置,本文假设您已经 ...

  5. jsp高校学生资助管理系统myeclipse开发mysql数据库serlvet技术BS模式java编程网页结构

    一.源码特点     jsp高校学生资助管理系统是一套完善的WEB设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发.开发环境为 TOMCAT ...

  6. JSP 绘本租赁管理系统myeclipse开发mysql数据库bs框架java编程serlvet(MVC)结构详细设计

    一.源码特点      JSP 绘本租赁管理系统是一套完善的web设计系统serlvet+dao+bean(MVC模式),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环 ...

  7. Android开发面试:架构设计和网络知识答案精解

    目录 架构设计 编程思想 六大设计原则 重构-Code Smell AOP 设计模式 创建型5个 行为型11个 结构型7个 编程范式 MVC MVP MVVM MVI 模块化 组件化 插件化.热修复 ...

  8. 端云一体人工智能开发平台整体架构

    端云一体人工智能开发平台整体架构 引言 当前人工智能(Artificial Intelligence)技术发展迅猛,在机器视觉.语音识别以及自然语言处理等多个技术领域取得了卓越的进展,带来了更高的精确 ...

  9. 程序员新手 0年份等级 指导(一) 开发人员IT架构总览

    程序员新手 0年份等级 指导(一) 开发人员IT架构总览 程序员新手 0年份等级 指导(一) 开发人员相关IT架构总览之职能分解 开发人员IT架构总览 一.职能分解 软件项目的主要组成大体上按照一个项 ...

最新文章

  1. java实现redis缓存_java实现redis缓存功能
  2. 数值分析第三次作业-常微分方程的数值解法
  3. 京东某员工因加班太多引女友不满,下定决心离职:不想被迫加班!
  4. 三目运算符引发的一次事故
  5. Zabbix监控网络设备日志文件及字段报警
  6. linux主机间复制文件
  7. Wijmo 2016年蓝图
  8. 【C语言】《程序设计基础(C语言)》自编题解索引
  9. c语言sleep函数上限多久解除,关于sleep函数的问题,
  10. 除夕年味年夜饭海报PSD素材,盛了一年的思念
  11. 互利网上数字金融典型场景: 网购运费险
  12. AI变革下的“百度一下”
  13. YOLOv5与Faster RCNN相比。 谁赢?
  14. PLC编程全科班+人机界面编程+电机+变频器通信培训
  15. 光驱位改装固态硬盘并装win 和linux双系统
  16. 没有乌云,天就一定晴了么
  17. chmod 权限777 -rwxrwxrwx是什么意思
  18. SQL Dblink SQL
  19. mysql5.7.10 二进制包_mysql 32 位安装教程mysql5.7 二进制包安装
  20. 【软件测试】智能电视应用测试要求1

热门文章

  1. html盒子模型 1209
  2. 测试记录流水s1 0080481T02
  3. git-版本的创建与版本的切换操作
  4. django-session对象的方法
  5. django-删除学生数据
  6. linux-权限案例-文件与目录权限
  7. SVG 入门——理解viewport,viewbox,preserveAspectRatio
  8. MATLAB的PLOT函数线型设置及横坐标为字符串的代码实例
  9. 汇编语言的简答入门--斐波那契数列(递归)
  10. 《洛克菲勒留给儿子的38封信》 第四封:现在就去做