1. Обзор
В этой быстрой статье мы создадим небольшое веб-приложение, которое реализует шаблон проектирования Model View Controller (MVC), используя базовые сервлеты и JSP.
Мы немного рассмотрим, как работает MVC, и его ключевые особенности, прежде чем перейдем к реализации.
2. Введение в MVC
Модель-представление-контроллер (MVC) - это шаблон, используемый в разработке программного обеспечения для отделения логики приложения от пользовательского интерфейса. Как следует из названия, шаблон MVC имеет три уровня.
Модель определяет бизнес-уровень приложения, Контроллер управляет потоком приложения, а Представление определяет уровень представления приложения.
Хотя шаблон MVC не является специфическим для веб-приложений, он очень хорошо подходит для этого типа приложений. В контексте Java модель состоит из простых классов Java, контроллер состоит из сервлетов, а представление состоит из страниц JSP.
Вот некоторые ключевые особенности узора:
- Он отделяет уровень представления от бизнес-уровня.
- Контроллер выполняет действие по вызову модели и отправке данных в представление.
- Модель даже не знает, что она используется каким-то веб-приложением или настольным приложением.
Давайте посмотрим на каждый слой.
2.1. Слой модели
Это уровень данных, который содержит бизнес-логику системы, а также представляет состояние приложения.
Независимо от уровня представления, контроллер извлекает данные из уровня модели и отправляет их на уровень представления.
2.2. Уровень контроллера
Уровень контроллера действует как интерфейс между представлением и моделью. Он получает запросы от уровня просмотра и обрабатывает их, включая необходимые проверки.
Запросы далее отправляются на уровень модели для обработки данных, и после обработки данные отправляются обратно в контроллер, а затем отображаются в представлении.
2.3. Слой просмотра
Этот уровень представляет собой вывод приложения, обычно некую форму пользовательского интерфейса. Уровень представления используется для отображения данных модели, полученных контроллером.
3. MVC с сервлетами и JSP
Чтобы реализовать веб-приложение на основе шаблона проектирования MVC, мы создадим классы Student и StudentService, которые будут действовать как наш слой модели.
Класс S tudentServlet будет действовать как Контроллер, а для уровня представления мы создадим страницу student-record.jsp .
Теперь давайте напишем эти слои один за другим и начнем с класса Student :
public class Student { private int id; private String firstName; private String lastName; // constructors, getters and setters goes here }
Давайте теперь напишем наш StudentService, который будет обрабатывать нашу бизнес-логику:
public class StudentService { public Optional getStudent(int id) { switch (id) { case 1: return Optional.of(new Student(1, "John", "Doe")); case 2: return Optional.of(new Student(2, "Jane", "Goodall")); case 3: return Optional.of(new Student(3, "Max", "Born")); default: return Optional.empty(); } } }
Теперь давайте создадим наш класс контроллера StudentServlet :
@WebServlet( name = "StudentServlet", urlPatterns = "/student-record") public class StudentServlet extends HttpServlet { private StudentService studentService = new StudentService(); private void processRequest( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String studentID = request.getParameter("id"); if (studentID != null) { int id = Integer.parseInt(studentID); studentService.getStudent(id) .ifPresent(s -> request.setAttribute("studentRecord", s)); } RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/student-record.jsp"); dispatcher.forward(request, response); } @Override protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } }
Этот сервлет является контроллером нашего веб-приложения.
Сначала он считывает идентификатор параметра из запроса. Если идентификатор отправлен, объект Student извлекается из бизнес-уровня.
После получения необходимых данных из модели он помещает эти данные в запрос с помощью метода setAttribute () .
Наконец, Контроллер пересылает объекты запроса и ответа в JSP, представление приложения.
Теперь давайте напишем наш презентационный слой student-record.jsp :
Student Record ID: First Name: Last Name:
И, конечно же, JSP - это представление приложения; он получает всю необходимую информацию от контроллера, ему не нужно напрямую взаимодействовать с бизнес-уровнем.
4. Вывод
В этом руководстве мы узнали об архитектуре MVC, т.е. Model View Controller, и сосредоточились на том, как реализовать простой пример.
Как обычно, представленный здесь код можно найти на GitHub.