Паттерн MVC в веб-разработке на Java

MVCMODEL, VIEW, CONTROLLER. Популярная архитектура построения приложений. Нужно знать.

  • CONTROLLER – сервлет для взаимодействия между клиентом, MODEL и VIEW.
  • VIEW – страница, которая видна пользователю – jsp.
  • MODEL – класс для извлечения информации из ресурса (БД например) или добавления в него информации (иногда этот класс отождествляют с ресурсом)).

Клиент может передавать какие либо данные в CONTROLLER через VIEW, то есть через страницу, которую клиент видит.

Также клиент может получать данные на VIEW из CONTROLLER. То есть всё, что клиент видит на VIEW, получено из CONTROLLER.

Откуда же CONTROLLER берет данные, которые он отсылает на VIEW и куда CONTROLLER отсылает данные присланные в него клиентом?

CONTROLLER получает данные из ресурса c помощью MODEL и отправляет их клиенту на VIEW, а когда клиент отсылает данные в CONTROLLER, то CONTROLLER с помощью MODEL отправляет их в ресурс для сохранения их там.

Давайте создадим класс модели, класс контроллера и jsp страницу вью. В качестве ресурса для упрощения пусть будет простой объект User, а не БД или что либо еще.


Model

Для начала, создадим небольшой класс User, объект которого будет ресурсом:

package com.someclasses; public class User{ private String name; public void setName(String name){ this.name=name; } public String getName(){ return name; } }

Код класса модели, который извлекает данные из ресурса:

package com.someclasses; public class User{ private String name; public void setName(String name){ this.name=name; } public String getName(){ return name; } }

Видим, что Model возвращает user, то есть объект-ресурс.


Controller

Создадим контроллер, который будет через модель извлекать объект-ресурс user и отправлять его на View клиенту.

Пример программы:

import com.someclasses.*; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(“/MVC_Controller”) public class MVC_Controller extends HttpServlet { MVC_Model model = new MVC_Model(); protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getServletContext().setAttribute( “someuser”, model.getUser()); } //С помощью бина можем на View извлеч только //что созданный аттребут вот таким образом: // }

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


View

Теперь на View, то есть странице, которую видит клиент с помощью actionBean извлекаем данные ресурса положенные в контекст в контроллере:

MVC JSP

Проверка работы созданной MVC архитектуры.

Теперь запустим контроллер:

Он через модель извлечет данные ресурса и поместит их в аттрибут контекста, чтобы вью мог их отобразить

Откроем теперь вью:

Очевидно созданная архитектура работает корректно.

Expression Language (EL) in JSP

Изучите Expression Language (EL) в JSP: как упростить доступ к атрибутам скоупов, работать с коллекциями и отключать EL. Примеры кода и лучшие практики.
Time to read: 16

Работа с JSP Standard Tag Library (JSTL)

Полное руководство по JSTL: теги c:forEach, c:out, c:import и другие. Примеры использования JSP Standard Tag Library в веб-разработке.
Time to read: 20

Что такое шаблоны проектирования? Шаблон Factory

Узнайте что такое шаблоны проектирования и как паттерн Factory помогает создавать однотипные объекты. Оптимизируйте создание экземпляров классов.
Time to read: 16