Паттерн MVC в веб-разработке на Java
Last updated: 10 мая 2025 г.MVC
– MODEL, 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
, объект которого будет ресурсом:
1package com.someclasses;
2
3public class User{
4 private String name;
5
6 public void setName(String name){
7 this.name=name;
8 }
9 public String getName(){
10 return name;
11 }
12}
Код класса модели, который извлекает данные из ресурса:
1package com.someclasses;
2
3public class User{
4 private String name;
5
6 public void setName(String name){
7 this.name=name;
8 }
9 public String getName(){
10 return name;
11 }
12}
Видим, что Model возвращает user
, то есть объект-ресурс.
Controller
Создадим контроллер, который будет через модель извлекать объект-ресурс user
и отправлять его на View клиенту.
Пример программы:
1import com.someclasses.*;
2import java.io.IOException;
3import java.io.PrintWriter;
4import javax.servlet.*;
5import javax.servlet.http.*;
6import javax.servlet.annotation.*;
7
8@WebServlet("/MVC_Controller")
9public class MVC_Controller extends HttpServlet {
10 MVC_Model model = new MVC_Model();
11 protected void doGet(HttpServletRequest req,
12 HttpServletResponse resp)
13 throws ServletException, IOException {
14 req.getServletContext().setAttribute(
15 "someuser", model.getUser());
16 }
17 //С помощью бина можем на View извлеч только
18 //что созданный аттребут вот таким образом:
19 //<jsp:useBean id="someuser"
20 //class="com.someclasses.User" scope="application"/>
21}
Теперь поскольку мы положили данные ресурса в аттрибут уровня контекста, мы можем извлечь их на View.
View
Теперь на View, то есть странице, которую видит клиент с помощью actionBean
извлекаем данные ресурса положенные в контекст в контроллере:
1<html>
2<head>
3 <title>MVC JSP</title>
4</head>
5<body>
6 <jsp:useBean id="someuser" class="com.someclasses.User" scope="application"/>
7 <jsp:getProperty name="someuser" property="name"/>
8</body>
9</html>
Проверка работы созданной MVC архитектуры.
Теперь запустим контроллер:

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

Очевидно созданная архитектура работает корректно.
Следующие уроки
Expression Language (EL) in JSP
16
мин.
Работа с JSP Standard Tag Library (JSTL)
20
мин.
Что такое шаблоны проектирования? Шаблон Factory
16
мин.