1. RESTful Webservice 作为远程调用(RPC),它的输入是什么?输出是什么?
※输入时GET、POST、PUT、DELETE;输出是PRODUCE。
2. 有一个 Java 远程函数声明 public Customer getCustomer(String id),把 HTTP 协议输入/输出映射到该函数,至少要申明(annotation)哪些信息?请写出这些 annotation,并简单解释协议与函数的关系。
※@GET、@Path(“customers/{id}”). 协议类似于一个接口,让客户端的函数与服务端交互的时候,有一个统一的标准,常见的协议方法有GET、POST、PUT、DELETE等,@Path(“/customers/{id}/”) 项目根访问该方法的 URI 路径,其中 {ID} 是一个变量模板, @PathParam(“id”) 可以获取该变量。
3. 修改 实验1 的 @Path 为 @Path(“/myservice/”),请用 curl -v 给出结果
※修改路径,
命令行下,curl -v http://localhost:9000/myservice/customers/123
结果如下:
4. 简述 GET 与 POST 的区别
※GET用于获取信息,不会修改服务端的数据,是数据安全的;POST可以向服务端发送修改请求,从而修改服务端的数据。
5. 在实际应用中 Map<Long, Customer> customers 使用会产生副作用吗?为什么?
※实际应用中可能会产生副作用,例如customer的id不唯一时,会导致识别错误,又或者在customer数据被删除后,关联数据不能及时删除。
6. Spring IOC 与 DI 是 java 编程核心内容之一。阅读 Spring IoC 使用详解 用自己的语言解释 IoC 解耦原理。
※传统应用程序需要客户端主动去创建用户类,用户信息类,并将用户信息类注入到用户类。有了IoC容器后,上述工作就由IoC完成,并且由IoC来管理它们的生命周期。这意味着,创建和查找依赖的控制权交给了容器,由容器进行注入组合对象,所以对象和对象之间是松散耦合,便于测试和功能复用。
7. (!)使用 Maven 构建(6)给出的案例,项目名称 IOC_test
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测试结果。
package com.example.jaxrs;
@javax.ws.rs.Path("exampleWithInjection")public class StringResource {
public StringResource() {
/* use a no-argument constructor */
}
@javax.ws.rs.core.Context
private javax.ws.rs.core.HttpHeaders httpHeaders;
@javax.annotation.PostConstruct
private void myPostConstruct() {
/* read from the httpHeaders if required */
}
@javax.ws.rs.GET
@javax.ws.rs.Produces(javax.ws.rs.core.MediaType.TEXT_PLAIN)
public String SayHello() {
return "Hello world!";
}}
10. WADL 的全称。从程序结果返回中截取一段 WADL 内容。
※Web Application Description Language
11. 输出对象格式协商是 Resquest 的 Header 段的哪个 Field 决定的?
※Content-Type
12. JAX-RS 的全称
※Java API for RESTful Web Services
@Produces 和 @Consumers 的作用
※@Produces用于指定输出格式,参数可以是字符串数组;@Consumers指定处理输入媒体的类型,例如 “Content-Type: application/json”。