Eclipse用REST实现Web Service

时间:2022-06-06 05:29:42

Eclipse用REST实现Web Service

本文基于Eclipse JEE用REST实现Web Service,所用服务器为Tomcat 9

  • 1. 构建Web Service的服务器端
  • 2. 构建客户端测试Web Service

本文以四则运算器Calculator的Service为例。

1. 构建Web Service的服务器端

  • 1)创建一个名为“CalculatorREST”的Dynamic Web Project

Eclipse用REST实现Web Service

点击Next, 出现如下窗口,然后输入项目名称“CalculatorREST”并指定项目路径:

Eclipse用REST实现Web Service

这里不要直接点击Finish,而要点击Next,因为要再最后一步勾选“生成web.xml文件”的选项,这个文件后面会用到。

Eclipse用REST实现Web Service

点击Next,然后勾选“Generate web.xml delpoyment descriptor”:

Eclipse用REST实现Web Service

点击Finish, 服务器端的项目创建完成。

Eclipse用REST实现Web Service

  • 2)下载并导入项目所需要的jar包

由于本项目使用Jersey框架,所以需要下载Jersey所需要的jar包。

Jersey JAX-RS 2.1 RI bundle下载地址:https://jersey.github.io/download.html (点击里面蓝色的Jersey JAX-RS 2.1 RI bundle就可以进行下载)。

将下载下来的文件解压,文件结构如下:

Eclipse用REST实现Web Service

其中api,ext,lib这三个文件夹中分别包含很多jar包。将这些jar包全部拷贝到工程中WebContent/WEB-INF/lib目录中。不要直接将文件夹拷入,而是将这三个文件夹中的jar包全部拷入。也就是说,最后WebContent/WEB-INF/lib目录中不是包含“api, ext,lib”这三个文件夹,而是直接包含全部的jar包。否则会出错。 WebContent/WEB-INF/lib中的内容如下:

Eclipse用REST实现Web Service

回到Eclipse中,在项目名上右键->Refresh,然后再次右键->Build Path->Configure Build Path->Libraries->Add JARs,将刚才WebContent/WEB-INF/lib中的jar包添加进去:

Eclipse用REST实现Web Service

  • 3)编写Web Service所要提供的功能的代码

在src中创建一个名为“mypackage ”的包,并在包中创建一个名为“Calculator”的类,Calculator.Java中的代码如下:

//Calculator.java

package mypackage;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/CalculationService")
public class Calculator {

@GET
@Path("/add")
@Produces(MediaType.TEXT_PLAIN)
public double Add(@QueryParam("x") double x,@QueryParam("y") double y) {
return x+y;
}

@GET
@Path("/sub")
@Produces(MediaType.TEXT_PLAIN)
public double Sub(@QueryParam("x") double x,@QueryParam("y") double y) {
return x-y;
}

@GET
@Path("/mul")
@Produces(MediaType.TEXT_PLAIN)
public double Mul(@QueryParam("x") double x,@QueryParam("y") double y) {
return x*y;
}

@GET
@Path("/div")
@Produces(MediaType.TEXT_PLAIN)
public double Div(@QueryParam("x") double x,@QueryParam("y") double y) {
return x/y;
}

}

写完后记得“ctrl+s”保存一下,否则后面会出错。

  • 4)修改web.xml文件,增加jersey信息

修改后的web.xml文件代码如下:

//web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>CalculatorREST</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>Jersey RESTful Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>mypackage</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey RESTful Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

写完后记得“ctrl+s”保存一下,否则后面会出错。

这样Web Service的服务器端就搭建好了,此时的目录结构为:

Eclipse用REST实现Web Service

  • 5)在浏览器中测试

在项目名上右键->Run As->Run on Server,启动Tomcat服务器,然后在浏览器中输入:http://localhost:8080/CalculatorREST/rest/CalculationService/add?x=35.4&y=27.9,得到如下结果:

Eclipse用REST实现Web Service

计算35.4+27.9就可得到结果63.3。

(如果显示404 Not Found,且确定自己的代码完全按照上述步骤写的,点击Project->Clean,然后再重新Run一下试试。)

2. 构建客户端测试Web Service

客户端测试过程中服务器端的Tomcat要保持全程开启状态!!!!!!

  • 1)创建一个名为“TestCalculatorREST”的Java Project

Eclipse用REST实现Web Service

点击Next, 出现如下窗口,然后输入项目名称“TestCalculatorREST”并指定项目路径:

Eclipse用REST实现Web Service

点击Next:

Eclipse用REST实现Web Service

点击Finish, 服务器端的项目创建完成。

Eclipse用REST实现Web Service

  • 2)写main函数进行测试

本客户端给出两种方式的代码进行测试。

在src中创建一个名为“mypackage ”的包,并在包中分别创建一个名为“Main1”的类和“Main2”的类,这两个类中的内容如下:

//Main1.java

package mypackage;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;

public class Main1 {

public static void main(String[] args) {

System.out.println("REST方式的Calculator Web Service:");

try {

Scanner input = new Scanner(System.in);

System.out.println("请输入运算符(+,-,*,/): ");
String operator = input.nextLine();

System.out.println("x = ");
double x = input.nextDouble();

System.out.println("y = ");
double y = input.nextDouble();

String result = "";

URL url = null;
if (operator.equals("+"))
url = new URL("http://localhost:8080/CalculatorREST/rest/CalculationService/add?x=" + x + "&y=" + y);
if (operator.equals("-"))
url = new URL("http://localhost:8080/CalculatorREST/rest/CalculationService/sub?x=" + x + "&y=" + y);
if (operator.equals("*"))
url = new URL("http://localhost:8080/CalculatorREST/rest/CalculationService/mul?x=" + x + "&y=" + y);
if (operator.equals("/"))
url = new URL("http://localhost:8080/CalculatorREST/rest/CalculationService/div?x=" + x + "&y=" + y);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "text/plain");

if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}

BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));

System.out.println("Output from REST Server ......");
while ((result = br.readLine()) != null) {
System.out.println("运算结果 = "+ result);
}

conn.disconnect();

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}
}
}

//Main2.java

package mypackage;

import java.util.Scanner;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;

import org.glassfish.jersey.client.ClientConfig;

public class Main2 {

public static void main(String[] args) {

System.out.println("REST方式的Calculator Web Service:");

Scanner input = new Scanner(System.in);

System.out.println("请输入运算符(+,-,*,/): ");
String operator = input.nextLine();

System.out.println("x = ");
double x = input.nextDouble();

System.out.println("y = ");
double y = input.nextDouble();

String result = "";

ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
WebTarget target = client.target("http://localhost:8080/CalculatorREST");

String funcPath = "";
if (operator.equals("+"))
funcPath = "add";
if (operator.equals("-"))
funcPath = "sub";
if (operator.equals("*"))
funcPath = "mul";
if (operator.equals("/"))
funcPath = "div";
result = target.path("rest").path("CalculationService").path(funcPath).queryParam("x", x).queryParam("y", y).request().accept(MediaType.TEXT_PLAIN).get(String.class);

System.out.println("Output from REST Server ......");
System.out.println("运算结果 = "+ result);

}

}

对于第二种方式,在“TestCalculatorREST”的项目根目录下创建一个文件夹叫“lib”,然后将刚才拷入CalculationREST/WebContent/WEB-INF/lib中的jar包再全部拷贝到这个文件夹下。回到Eclipse中,在项目名上右键->Refresh,然后再次右键->Build Path->Configure Build Path->Libraries->Add JARs,将所有的jar包添加进去。过程和服务器端添加jar包的过程完全一样。

在Main1.java上或者Main2.java上右键->Run as->Java Application,用户分别输入运算符,x和y的值,就可得出计算结果(两种方式的运行结果是一模一样的)

Eclipse用REST实现Web Service