Цель работы. Познакомиться с технологией web-сервисов.
Краткое теоретическое содержание. Создадим web-сервис для скачивания файлов (file-upload). Прежде всего, создаем web-проект (имя WebSErviceLab), структура которого показана на рисунке 1
Рисунок 1. Структура проекта
Данный проект пуст. В небо следует добавить web-службу. Для этого активизируем контекстное меню на имени проекта и выбираем п. Создать – Другое – Веб-Службы
Выбираем тип файла Веб-служба и жмем Далее. Вводим имя службы и имя пакета. Жмем Готово. Система создает следующую заготовку сервиса:
package com;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
@WebService(serviceName = "FileUpload")
public class FileUpload {
@WebMethod(operationName = "hello")
public String hello(@WebParam(name = "name") String txt) {
return "Hello " + txt + "!";
}
}
Для начала добавим в службу свой собственный метод. Щелкаем правой кнопкой мыши в окне кода и выбираем п. Вставка кода из контекстного меню (рисунок 2).
Рисунок 2. Добавление метода в web-службу
Выбираем п. Добавление операции веб-службы (рисунок 3).
Рисунок 3. Определение имени и параметров метода
Задаем имя метода getFile и тип возвращаемого значения – массив байтов. В результате код в окне редактора принял такой вид
package com;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
@WebService(serviceName = "FileUpload")
public class FileUpload {
@WebMethod(operationName = "hello")
public String hello(@WebParam(name = "name") String txt) {
return "Hello " + txt + "!";
}
@WebMethod(operationName = "getFile")
public byte [] getFile() {
//TODO write your implementation code here:
return null;
}
}
Наша задача – реализовать метод getFile. Код нашего метода примет такой вид
package com;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.Path;
@WebService(serviceName = "FileUpload")
public class FileUpload {
@WebMethod(operationName = "hello")
public String hello(@WebParam(name = "name") String txt) {
return "Hello " + txt + "!";
}
@WebMethod(operationName = "getFile")
public byte [] getFile() {
byte [] buf=null;
java.awt.FileDialog fd=null;
java.awt.Dialog di=null;
try
{
String s1="e:/work5/hib1.txt";
Path path = Paths.get(s1);
buf = Files.readAllBytes(path);
}
catch(Exception ex)
{
}
return buf;
}}
Выполним сервис и разместим его (deploy) используя опции меню. Сначала из контекстного меню выберем Очистить и построить, затем – Развернуть.
Серверная часть готова.
Создаем клиента как обычное Java приложение (Java Application с именем WebServiceClient).
Структура проекта (с серверной и клиентской частями) показана на рисунке 4:
Рисунок 4. Структура проекта
Программируем клиентскую часть таким образом
package webserviceclient;
import com.FileUpload;
import com.FileUpload_Service;
public class WebServiceClient {
public static void main(String[] args) {
FileUpload_Service service =
new FileUpload_Service();
System.out.println(service.getFileUploadPort().hello
("OLEG GERMAN"));
try
{
byte [] fromserv
= service.getFileUploadPort().getFile();
if((fromserv==null)||(fromserv.length<=0))
{
System.out.println("File was not sent");
}
else
{
String str = new String(fromserv);
System.out.println(str);
}
}
catch(Exception ex)
{
System.out.println
("Cannot get file from service:"+ex.getMessage());
}
}
}
Файл считывается в следующем фрагменте
byte [] fromserv
= service.getFileUploadPort().getFile();
Задание
Приведенное приложение следует усложнить. Клиенту web-сервис передает список всех текстовых файлов (для простоты – txt), находящихся в электронной библиотеке. Этот список раскрывается в окне клиента. Клиент должен произвести выбор книги, а затем повторно обратиться к сервису за самой книгой. Ясно, что приложение клиента следует выполнить как оконное.
Контрольные вопросы.
1. Что такое управляемый web-сервис, как он связывается с клиентом?
2. Расскажите, как создать web-сервис.
3. Расскажите, как создать службу клиента.