课程地址
http://ss.sysu.edu.cn/~pml/dct/4_restful_webservice.html
实验内容
RESTful Webservice 作为远程调用(RPC),它的输入是什么?输出是什么?
输入:URL
输出:Json或者XML(资源文件)
有一个 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) { // ... }
修改 实验1 的 @Path 为 @Path(“/myservice/”),请用 curl -v 给出结果
简述 GET 与 POST 的区别
功能 GET POST 主要用途 从指定的资源请求数据 向指定的资源提交要被处理的数据 历史 参数保留在浏览器历史中 参数不会保留在浏览器历史或Web服务器日志中 数据长度限制 当发送数据时,GET 方法向 URL 添加数据;在不同浏览器中URL的长度限制是不同的。 无限制 安全性 较差,因为提交的数据是URL的一部分 比GET安全 在实际应用中
Map<Long, Customer> customers
使用会产生副作用吗?为什么?会。单实例类必须是多线程友好的。必须考虑类中实例变量(Field)线程共享问题。
Spring IOC 与 DI 是 java 编程核心内容之一。阅读 Spring IoC 使用详解 用自己的语言解释 IoC 解耦原理。
在项目中加入了容器,容器会实例化对象。通过在beans.xml文件中配置beans来为容器提供依赖注入的。容器会自动为组件推送资源。
(!)使用 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(); } }
运行即得结果
在 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" />
(!)尝试写一个根资源类 Hello,用 GET 方法实现 String SayHello() 远程服务。请给出 Hello类代码,增加根资源的配置(不是修改)XML内容,curl测试结果。
WADL 的全称。从程序结果返回中截取一段 WADL 内容。
Web Application Description Language
输出对象格式协商是 Resquest 的 Header 段的哪个 Field 决定的?
Accept
JAX-RS 的全称
Java API for RESTful Services
@Produces 和 @Consumes 的作用
- @Produces 用于指定输出格式,参数可以是字符串数组。 如果是一个数组,第一个是默认输出格式。如果客户端指定输出,则会匹配其他输出
- @Consumes 指定处理输入媒体的类型,例如 “Content-Type: application/json”。
(!)请完成 实验3 的每个参数处理的内容,然后在 jesery 上完成类似工作。请描述两个平台是否完全兼容?简述不兼容的内容。