分布式计算第四周实验:RESTful Webservice 编程

来源:互联网 发布:问道手游源码服务端 编辑:程序博客网 时间:2024/05/19 09:38

课程地址

http://ss.sysu.edu.cn/~pml/dct/4_restful_webservice.html

实验内容

  1. RESTful Webservice 作为远程调用(RPC),它的输入是什么?输出是什么?

    输入:URL

    输出:Json或者XML(资源文件)

  2. 有一个 Java 远程函数声明 public Customer getCustomer(String id),把 HTTP 协议输入/输出映射到该函数,至少要申明(annotation)哪些信息?请写出这些 annotation,并简单解释协议与函数的关系。

    @GET                      // HTTP协议方法,表示请求数据@Path("/customers/{id}/") //项目根访问该方法的 URI 路径,其中 {id} 是一个变量模板// 参数 String id 前的 @PathParam("id")表示该参数的输入由URL中的路径参数来。public Customer getCustomer(@PathParam("id") String id) {  // ...}
  3. 修改 实验1 的 @Path 为 @Path(“/myservice/”),请用 curl -v 给出结果

    这里写图片描述

  4. 简述 GET 与 POST 的区别

    功能 GET POST 主要用途 从指定的资源请求数据 向指定的资源提交要被处理的数据 历史 参数保留在浏览器历史中 参数不会保留在浏览器历史或Web服务器日志中 数据长度限制 当发送数据时,GET 方法向 URL 添加数据;在不同浏览器中URL的长度限制是不同的。 无限制 安全性 较差,因为提交的数据是URL的一部分 比GET安全
  5. 在实际应用中 Map<Long, Customer> customers 使用会产生副作用吗?为什么?

    会。单实例类必须是多线程友好的。必须考虑类中实例变量(Field)线程共享问题。

  6. Spring IOC 与 DI 是 java 编程核心内容之一。阅读 Spring IoC 使用详解 用自己的语言解释 IoC 解耦原理。

    在项目中加入了容器,容器会实例化对象。通过在beans.xml文件中配置beans来为容器提供依赖注入的。容器会自动为组件推送资源。

  7. (!)使用 Maven 构建(6)给出的案例,项目名称 IOC_test

    建立空白(不是Web)的maven项目,复制Spring IoC 使用详解中的代码。代码结构如下(beans放在resources下)

    这里写图片描述

    并修改QuizProgram中的代码如下

    public class QuizProgram {    public static void main(String[] args) {        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");        QuizMasterService obj = (QuizMasterService)context.getBean("quizMasterService");        obj.askQuestion();    }}

    运行即得结果

    这里写图片描述

  8. 在 Spring 试验中, 阅读 beans.xml, 写出申明根资源的关键内容

    <jaxrs:server id="customerService" address="/service1">    <jaxrs:serviceBeans>        <ref bean="customerBean" />    </jaxrs:serviceBeans></jaxrs:server><bean id="customerBean" class="demo.jaxrs.server.CustomerService" />
  9. (!)尝试写一个根资源类 Hello,用 GET 方法实现 String SayHello() 远程服务。请给出 Hello类代码,增加根资源的配置(不是修改)XML内容,curl测试结果。

  10. WADL 的全称。从程序结果返回中截取一段 WADL 内容。

    Web Application Description Language

    这里写图片描述

  11. 输出对象格式协商是 Resquest 的 Header 段的哪个 Field 决定的?

    Accept

  12. JAX-RS 的全称

    Java API for RESTful Services

  13. @Produces 和 @Consumes 的作用

    1. @Produces 用于指定输出格式,参数可以是字符串数组。 如果是一个数组,第一个是默认输出格式。如果客户端指定输出,则会匹配其他输出
    2. @Consumes 指定处理输入媒体的类型,例如 “Content-Type: application/json”。
  14. (!)请完成 实验3 的每个参数处理的内容,然后在 jesery 上完成类似工作。请描述两个平台是否完全兼容?简述不兼容的内容。

0 0