МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра ВТ
ОТЧЕТ по лабораторной работе №5
по дисциплине «Распределенные системы» Тема: Веб-службы
Студенты гр. 8308 |
|
Треско М.Ю. |
|
|
Сергеев В.С. |
Преподаватель |
|
Бекенева Я.А. |
Санкт-Петербург
2022
Цель работы
Познакомиться с веб-службами Java.
Основные теоретические положения:
Веб-служба (веб-сервис, web-service) - идентифицируемая веб-адресом (URI) программная система со стандартизированными интерфейсами.
Главные особенности веб-служб:
1.Веб-службы - самодостаточны, т.е. с клиентской стороны не требуется никакого дополнительного программного обеспечения кроме языка программирования, поддерживающего работу с XML и HTTP, а на серверной стороне требуются только HTTP-сервер, поддерживающий работу с посланиями.
2.Веб-службы являются самоописываемыми, поскольку метаданные, описывают сообщения передается вместе с сообщением и не требуется никаких внешних хранилищ метаданных
Концепция веб-служб представлена на рисунке 1.
Рисунок 1 – Модель работы веб-службы
2
Можно выделить три инстанции, взаимодействующие в рамках вебслужбы:
·заказчик;
·исполнитель;
·каталог.
Когда служба разработана, исполнитель регистрирует её в каталоге, где её могут найти потенциальные заказчики. Заказчик, найдя в каталоге подходящую службу, импортирует оттуда её WSDL-спецификацию и разрабатывает в соответствии с ней свое программное обеспечение. WSDL описывает формат запросов и ответов, которыми обмениваются заказчик и исполнитель в процессе работы.
Для обеспечения взаимодействия используются следующие стандарты:
·XML: Расширяемый язык разметки, предназначенный для хранения и передачи структурированных данных;
·SOAP: Протокол обмена сообщениями на базе XML;
·WSDL: Язык описания внешних интерфейсов веб-службы на базе XML;
·UDDI: Универсальный интерфейс распознавания, описания и интеграции - каталог веб-служб и сведений о компаниях, предоставляющих веб-службы во всеобщее пользование или конкретным компаниям
3
Задание на лабораторную работу
Разработать веб-службу, осуществляющую конвертацию некоторой целой величины amount в величину amount*rate, целое amount и вещественное rate задаётся пользователем.
Разработать сервлет-клиент для данной службы.
Код программы
Таблица 1 - Исходный код службы
Request.java
package com.example.RS5Service;
public record Request(Integer amount, Double rate) {}
Response.java
package com.example.RS5Service;
public record Response(Double answer) { }
Rs5ServiceApplication.java
package com.example.RS5Service;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Rs5ServiceApplication { public static void main(String[] args) {
SpringApplication.run(Rs5ServiceApplication.class, args);
}
4
}
ServiceController.java
package com.example.RS5Service;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController;
@RestController
public class ServiceController { @PostMapping("/mul")
public ResponseEntity<?> convertValue(@RequestBody Request request) { return ResponseEntity.ok(new Response(request.amount() * request.rate()));
}
}
Таблица 2 - Исходный код клиента
Request.java
package com.example.RS5Client;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor public class Request {
private Integer amount;
5
private Double rate;
}
Response.java
package com.example.RS5Client;
public record Response(Double answer) { }
Rs5ClientApplication.java
package com.example.RS5Client;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Rs5ClientApplication {
public static void main(String[] args) { SpringApplication.run(Rs5ClientApplication.class, args);
}
}
ClientController.java
package com.example.RS5Client;
import org.springframework.stereotype.Controller; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
6
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.client.RestTemplate;
@Controller
public class ClientController {
private final String basePath = "http://localhost:8080/mul"; private RestTemplate restTemplate = new RestTemplate(); private Request request = new Request();
@GetMapping("/form")
public String showForm(Model model) { model.addAttribute("request", request); return "MainPage";
}
@PostMapping("/form")
public String confirmForm(@ModelAttribute Request Request, Model model) { this.request = Request;
Response response = restTemplate.postForObject(basePath, Request, Response.class);
assert response != null; model.addAttribute("answer", response.answer()); return "MainPage";
}
7
}
8
Пример работы
Рисунок 2 – Пример работы программы
Вывод
В ходе выполнения лабораторной работы были получены навыки написания веб-служб, использующих модель WSDL.
9