所用教材:《Java Web服務 構建與運行》若本文對你有用的話請點贊、關注我哦!
6學時 實驗題目:①Web Service環境搭建;②REST式服務作爲一個HttpServlet類;③JAX-RS Web Service;④JAX-RS Client;⑤JAX-RS客戶端;⑥WSDL服務合同
本實驗所需的所有代碼(已整理得明明白白的):https://download.csdn.net/download/qq_41587612/12517176
上面的需要積分,沒積分的話可以到Github上下載:https://github.com/PigeonIsSmart/SOA-WebService
● 常見報錯:Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use?
解決:https://blog.csdn.net/xiaopingga/article/details/84988526
● 常見問題:Windows控制檯cmd中文亂碼?
永久解決:https://blog.csdn.net/qq_35038153/article/details/78430359
● 常見的Http響應狀態碼?
實驗一 Web Service環境搭建(非小白的可以跳過,簡略放圖)
一、實驗目的
- 掌握Java環境的安裝。
- 掌握eclipse的基本使用方法。
- 學會創建一個Java web 項目。
二、實驗內容
1. Java環境的安裝與配置。
1)Java下載地址
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
根據網站上的版本下載適合自己系統的版本。
2)Java安裝
3)JAVA_HOME配置。
i. 打開高級系統設置
ii. 點擊環境變量
iii. 在系統變量中創建一個名爲JAVA_HOME的環境變量,變量值爲JAVA的安裝目錄。
4)在系統變量中找到path,在變量值最後加一個分號“;”,再把你安裝java的路徑+bin複製進來,點擊確定。
5)查看是否安裝成功。
i. 在CMD中輸入java -version,出現Java版本號則證明安裝成功。
2. 使用eclipse創建一個新的Java Web項目。
1)配置tomcat
i. 打開 window選項卡下的preferences
ii. 配置tomcat
2)新建一個java_web一個用程序
i. 選擇Dynamic Web Project
ii. 取項目名並選中tomcat,點擊next
iii. 選中Generate點擊finish。
3. 運行程序並輸出輸出結果。
1)在WebContext新建index.jsp
2)更改jsp,右鍵項目選擇run as server(要求顯示學生自己的姓名學號)
三、實驗要求
- 要求學生熟練掌握Java環境的安裝過程。
- 學會在eclisp上搭建tomcat。
- 學會使用eclipse創建一個Web項目。
- 學會使用tomcat服務器運行Java Web程序。
四、實驗結果
實驗二 REST式服務作爲一個HttpServlet類
一、實驗目的
- 熟悉REST式服務作爲一個HttpServlet類。
二、實驗內容
1. 新建predictions2項目。
2. 新建predictions2包,創建JerseyClient、Prediction、Predictions、PredictionsServlet類。(下方會給資源包!)
3. 導入所需要的Jar包,導入data文件。
4. 更改web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>predictor</servlet-name>
<servlet-class>predictions2.PredictionsServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>predictor</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
5. 運行項目
三、實驗要求
- 掌握predictions2 式servlet 服務的搭建。
四、實驗過程及截圖
區別:在Eclipse上的運行結果第一行無文字說明,但在瀏覽器上有。
實驗三 JAX-RS Web Service
可參考http://www.jquerycn.cn/a_17530雖然排版不忍直視,但部分代碼有詳細中文註釋,我給的資料包裏的代碼是英文註釋。
一、實驗目的
- 學習如何使用JAX-RS實現RESTful服務框架。
- 學習使用curl發送HTTP請求。
二、實驗內容
1. JAX-RS即Java API for RESTful Web Services,是一種 Java API,可使 Java Restful 服務的開發變得迅速而輕鬆。這個 API 提供了一種基於註釋的模型來描述分佈式資源。註釋被用來提供資源的位置、資源的表示和可移植的(pluggable)數據綁定架構。
2. curl下載及配置
1)下載地址:https://curl.haxx.se/download.html選擇適合自己系統版本的curl
2)curl的安裝和配置(win64)
i. 解壓安裝包
ii. 配置curl環境變量(路徑爲解壓後curl的文件路徑)
爲小白補充說明:右鍵桌面上的“此電腦”,選擇“屬性”,在彈出窗口左側選擇“高級系統設置”,在彈出窗口下方選擇“環境變量”,再在彈出窗口的“系統變量”處,①新建“CURL_HOME”,變量值爲“curl的解壓路徑”;②編輯“Path”,按鍵盤右側“end”按鈕(若無效,則先按“num lock / scr lock”【簡寫爲“num lk”別不認識啊喂】再按“end”)回到“變量值”末尾,分號後面添加“curl的bin路徑”。
3. 使用JAX-RS搭建RESTful服務框架。
1)新建Prediction、PredictionsList、PredictonsRS、RestfulPrediction類。
2)新建一個web項目
3)導入jar包和data文件
4)修改web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>jersey</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
5)運行項目(注意:資料包裏readme文件中寫的路徑訪問會404,但在該路徑後面加/xml或/json就能訪問了)
4. Curl的使用
1)依次在cmd中輸入以下命令,查看輸出結果。
i. curl http://localhost:8080/JAX-RS/resourcesP/xml
ii. curl http://localhost:8080/JAX-RS/resourcesP/json
2)查看PredictionsRS.java,使用curl輸出id爲1的內容,格式爲xml。
三、實驗要求
- 要求學生掌握用JAX-RS實現簡單的RESTful服務框架。
- 學會安裝配置curl,並使用。
四、實驗過程及截圖
實驗四 JAX-RS Client
一、 實驗目的
- 掌握JAX-RS Client 的搭建。
- 針對基於predictions2 REST 式服務創建客戶端。
- 瞭解客戶端與服務器之間的交互。
二、實驗內容
1. 新建predictions2 Service。
2. 右鍵項目Run on Server
3. 在predictions2包下新建 JerseyClient 類,導入所需要的jar包。
4. 右鍵JerseyClient類,選擇 run as JavaApplication。查看控制檯運行結果。
5. 更改JerseyClient.java,要求輸出並刪除id = 10的數據,輸出格式爲JSON。更改後的代碼▼
package predictions2;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import javax.ws.rs.core.MediaType;
import com.sun.jersey.api.representation.Form;
public class JerseyClient {
private static final String baseUrl = "http://localhost:8080/predictions2";
public static void main(String[] args) {
new JerseyClient().demo();
}
private void demo() {
Client client = Client.create();
client.setFollowRedirects(true); // in case the service redirects
WebResource resource = client.resource(baseUrl);
getAllDemo(resource);
postDemo(resource); // same resource but different verb
String url = baseUrl + "?id=10";
resource = client.resource(url);
getOneDemo(resource);
deleteDemo(resource); // delete id = 10
}
private void getAllDemo(WebResource resource) {
String response = resource.accept(MediaType.APPLICATION_JSON_TYPE).get(String.class);
report("GET all in JSON:\n", response);
}
private void getOneDemo(WebResource resource) {
String response = resource.accept(MediaType.APPLICATION_JSON_TYPE).get(String.class);
report("GET one in JSON:\n", response);
}
private void postDemo(WebResource resource) {
Form form = new Form(); // HTTP body, a simple hash
form.add("who", "William Butler Yeats");
form.add("what", "I know that I shall meet my fate");
String response = resource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept
(MediaType.TEXT_PLAIN_TYPE).post(String.class, form);
report("POST:\n", response);
}
private void deleteDemo(WebResource resource) {
String response = resource.accept(MediaType.TEXT_PLAIN_TYPE).delete(String.class);
report("DELETE:\n", response);
}
private void report(String msg, String response) {
System.out.println("\n" + msg + response);
}
}
三、實驗要求
- 要求學生掌握JAX-RS客戶端的配置。
- 成功調通程序並對其進行更改。
四、實驗過程及截圖
以下圖片都是執行JerseyClient.java的運行結果,內容很長,截了部分幫助理解!
上方三幅圖是連續的,從第0條開始計數,可以看出程序原是刪除了第31條(最後一條)prediction(預言)又添加一條prediction("I know that I shall meet my fate"成爲新31條預言)【HTTP body, a simple Hash】,現要我們改成“輸出並刪除id = 10的數據,輸出格式爲JSON”。
你只需看JerseyClient.java(一共59行代碼),改/讀起來非常簡單,不用怕!
改完後的運行(連續)結果如下所示:
如果你有以下情況 ,請重新 Run on Server,再 Run as JavaApplication!!!
JerseyClient.java已經運行過一次,再重複Run as JavaApplication運行的話就會這樣▼
實驗五 JAX-RS客戶端
一、實驗目的
- 掌握REST Client 的搭建。
- 針對基於predictions3 service創建客戶端。
- 熟悉客戶端與服務器之間的交互。
二、實驗內容
1. 新建predictions3 項目。
2. 右鍵項目run on server。
3. 創建client包,在其中創建Java類,並導入jar包。
4. 右鍵JerseyClient類,選擇 run as JavaApplication。查看控制檯運行結果。
三、實驗要求
- 要求學生掌握REST式客戶端的配置。
- 成功調通程序並對其進行更改。
四、實驗結果
日常無視警告。。。創建client包(Package),導入類和jar包,右鍵Predictions3Client類,Run as JavaApplication
實驗六 WSDL服務合同
一、實驗目的
- 學會使用java代碼發佈endpoint。
- 瞭解WSDL的作用。
二、實驗內容:
- 新建一個項目
- 新建RandPublisher、RandService類。
- 導入jar包和xml
- 更改web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"> <listener> <listener-class> com.sun.xml.ws.transport.http.servlet.WSServletContextListener </listener-class> </listener> <servlet> <servlet-name>jaxws</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jaxws</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
- 運行項目
-
運行RandPublisher類,在瀏覽器輸入http://localhost:8888/ws。
三、實驗要求
- 學會使用java代碼發佈endpoint。
- 掌握WSDL的作用。
- 成功調試出代碼。
四、運行結果
先 Run on JavaApplication,再 Run as Server!