Пример MVC с сервлетами и JSP

Пример MVC с сервлетами и JSP

1. обзор

В этой быстрой статье мы создадим небольшое веб-приложение, реализующее шаблон проектирования Model View Controller (MVC) с использованием базовых сервлетов и JSP.

Прежде чем перейти к реализации, мы немного рассмотрим, как работает MVC, и его ключевые особенности.

2. Введение в MVC

Model-View-Controller (MVC) - это шаблон, используемый в программной инженерии для отделения логики приложения от пользовательского интерфейса. Как следует из названия, шаблон MVC имеет три слоя.

Модель определяет бизнес-уровень приложения, контроллер управляет потоком приложения, а представление определяет уровень представления приложения.

Хотя шаблон MVC не специфичен для веб-приложений, он очень хорошо подходит для этого типа приложений. В контексте Java Модель состоит из простых классов Java, контроллер состоит из сервлетов, а представление состоит из страниц JSP.

Вот некоторые ключевые особенности узора:

  • Он отделяет уровень представления от уровня бизнеса

  • Контроллер выполняет действие вызова модели и отправки данных в представление

  • Модель даже не знает, что она используется каким-либо веб-приложением или настольным приложением

Давайте посмотрим на каждый слой.

2.1. Слой модели

Это уровень данных, который содержит бизнес-логику системы, а также представляет состояние приложения.

Независимо от уровня представления, контроллер извлекает данные из уровня модели и отправляет их на уровень представления.

2.2. Уровень контроллера

Уровень контроллера выступает в качестве интерфейса между представлением и моделью. Он получает запросы от слоя View и обрабатывает их, включая необходимые проверки.

Затем запросы отправляются на уровень модели для обработки данных, и после их обработки данные отправляются обратно в контроллер и затем отображаются в представлении.

2.3. Слой просмотра

Этот уровень представляет выходные данные приложения, обычно в той или иной форме пользовательского интерфейса. Слой представления используется для отображения данных модели, выбранных контроллером.

3. MVC с сервлетами и JSP

Чтобы реализовать веб-приложение на основе шаблона проектирования MVC, мы создадим классыStudent иStudentService, которые будут действовать как наш слой модели.

Класс StudentServlet будет действовать как контроллер, а для уровня представления мы создадим страницу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);
    }
}

Этот сервлет является контроллером нашего веб-приложения.

Сначала он считывает параметрid из запроса. Если представленid, объектStudent извлекается из бизнес-уровня.

Получив необходимые данные из модели, он помещает эти данные в запрос, используя методsetAttribute().

Наконец, Контроллерforwardsпредставляет объекты запроса и ответа для JSP, представления приложения.

Затем давайте напишем наш уровень представленияstudent-record.jsp:


    
        Student Record
    
    
    <%
        if (request.getAttribute("studentRecord") != null) {
            Student student = (Student) request.getAttribute("studentRecord");
    %>

    

Student Record

ID: <%= student.getId()%>
First Name: <%= student.getFirstName()%>
Last Name: <%= student.getLastName()%>
<% } else { %>

No student record found.

<% } %>

И, конечно же, JSP - это представление приложения; он получает всю необходимую информацию от контроллера, ему не нужно напрямую взаимодействовать с бизнес-уровнем.

4. Заключение

В этом руководстве мы узнали о MVC, т.е. Архитектура Model View Controller, и мы сосредоточились на том, как реализовать простой пример.

Как обычно, представленный здесь код можно найтиover on GitHub.