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”。