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

课程地址

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 的区别

    功能GETPOST
    主要用途从指定的资源请求数据向指定的资源提交要被处理的数据
    历史参数保留在浏览器历史中参数不会保留在浏览器历史或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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值