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

1. Общ преглед

В тази бърза статия ще създадем малко уеб приложение, което изпълнява шаблона за проектиране на контролер на изглед на модел (MVC), използвайки основни сървлети и JSP

Ще проучим малко за това как работи MVC и неговите ключови характеристики, преди да преминем към внедряването.

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

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

Моделът дефинира бизнес слоя на приложението, контролерът управлява потока на приложението, а изгледът определя слоя за представяне на приложението.

Въпреки че шаблонът MVC не е специфичен за уеб приложения, той се вписва много добре в този тип приложения. В контекст на Java Моделът се състои от прости Java класове, Контролерът се състои от сървлети, а Изгледът се състои от JSP страници.

Ето някои ключови характеристики на модела:

  • Той разделя презентационния слой от бизнес слоя
  • Контролерът извършва действието на извикване на Модела и изпращане на данни към Преглед
  • Моделът дори не е наясно, че се използва от някакво уеб приложение или настолно приложение

Нека да разгледаме всеки слой.

2.1. Моделният слой

Това е слоят от данни, който съдържа бизнес логиката на системата и също така представя състоянието на приложението.

Той е независим от презентационния слой, контролерът извлича данните от слоя Model и ги изпраща на слоя View.

2.2. Слоят на контролера

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

Заявките се изпращат допълнително към слой Модел за обработка на данни и след като бъдат обработени, данните се изпращат обратно към контролера и след това се показват в изгледа.

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(); } } }

Сега нека създадем нашия Controller клас 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); } }

Този сървлет е контролерът на нашето уеб приложение.

Първо, той чете идентификатор на параметър от заявката. Ако идентификаторът е изпратен, студентски обект се извлича от бизнес слоя.

След като извлече необходимите данни от Модела, той поставя тези данни в заявката, използвайки метода setAttribute () .

И накрая, контролерът препраща обектите за заявка и отговор към JSP, изгледа на приложението.

След това нека напишем нашия презентационен слой student-record.jsp :

  Student Record ID: First Name: Last Name: 

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

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

В този урок научихме за архитектурата на MVC, т.е. Model View Controller и се фокусирахме върху това как да приложим прост пример.

Както обикновено, представеният тук код може да бъде намерен в GitHub.