所用教材:《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环境搭建(非小白的可以跳过,简略放图)
一、实验目的
二、实验内容
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(要求显示学生自己的姓名学号)
三、实验要求
四、实验结果
实验二 REST式服务作为一个HttpServlet类
一、实验目的
二、实验内容
1. 新建predictions2项目。
2. 新建predictions2包,创建JerseyClient、Prediction、Predictions、PredictionsServlet类。(下方会给资源包!)
3. 导入所需要的Jar包,导入data文件。
4. 更改web.xml
predictor
predictions2.PredictionsServlet
predictor
/*
5. 运行项目
三、实验要求
四、实验过程及截图
区别:在Eclipse上的运行结果第一行无文字说明,但在浏览器上有。
实验三 JAX-RS Web Service
可参考http://www.jquerycn.cn/a_17530虽然排版不忍直视,但部分代码有详细中文注释,我给的资料包里的代码是英文注释。
一、实验目的
二、实验内容
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
jersey
com.sun.jersey.spi.container.servlet.ServletContainer
1
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 Client
一、 实验目的
二、实验内容
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);
}
}
三、实验要求
四、实验过程及截图
以下图片都是执行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行代码),改/读起来非常简单,不用怕!
改完后的运行(连续)结果如下所示:
JerseyClient.java已经运行过一次,再重复Run as JavaApplication运行的话就会这样▼
实验五 JAX-RS客户端
一、实验目的
二、实验内容
1. 新建predictions3 项目。
2. 右键项目run on server。
3. 创建client包,在其中创建Java类,并导入jar包。
4. 右键JerseyClient类,选择 run as JavaApplication。查看控制台运行结果。
三、实验要求
四、实验结果
日常无视警告。。。创建client包(Package),导入类和jar包,右键Predictions3Client类,Run as JavaApplication
实验六 WSDL服务合同
一、实验目的
二、实验内容:
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
jaxws
com.sun.xml.ws.transport.http.servlet.WSServlet
1
jaxws
/*
运行RandPublisher类,在浏览器输入http://localhost:8888/ws。
三、实验要求
四、运行结果
先 Run on JavaApplication,再 Run as Server!