Controller in java servlet

Java Guides

In this quick article, we’ll create a small web application that implements the Model View Controller (MVC) design pattern, using basic Servlets and JSPs.

Model-View-Controller (MVC) is a pattern used in software engineering to separate the application logic from the user interface. As the name implies, the MVC pattern has three layers.

The Model defines the business layer of the application, the Controller manages the flow of the application, and the View defines the presentation layer of the application.

Video

This tutorial is explained in the below Youtube Video. Subscribe to my youtube channel to learn more about Spring boot at Java Guides — YouTube Channel .

Benefits of MVC in JSP and Servlet Web Application

  1. Minimizes HTML code in Servlet no more: out.println(…) in Servlet code.
  2. Minimize Java business logic in JSPs no more large scriptlets in JSP code
  3. It separates the presentation layer from the business layer
  4. The Controller performs the action of invoking the Model and sending data to View
  5. The Model is not even aware that it is used by some web application or a desktop application

Model-View-Controller (MVC)

The Model Layer — This is the data layer which contains the business logic of the system, and also represents the state of the application. It’s independent of the presentation layer, the controller fetches the data from the Model layer and sends it to the View layer.

The Controller LayerController layer acts as an interface between View and Model. It receives requests from the View layer and processes them, including the necessary validations.

The View Layer — This layer represents the output of the application, usually some form of UI. The presentation layer is used to display the Model data fetched by the Controller.

Java EE MVC Web Application using JSP and Servlet Example

To implement a web application based on MVC design pattern, we’ll create the Employee and EmployeeService classes – which will act as our Model layer.

EmployeeServlet class will act as a Controller, and for the presentation layer, we’ll create employees.jsp page.

Читайте также:  Php pattern match array

Model Layer

Let’s create the Employee and EmployeeService classes which will act as our Model layer.

Employee

package net.javaguides.mvc.model; public class Employee < private int id; private String firstName; private String lastName; public Employee(int id, String firstName, String lastName) < super(); this.id = id; this.firstName = firstName; this.lastName = lastName; > public int getId() < return id; > public void setId(int id) < this.id = id; > public String getFirstName() < return firstName; > public void setFirstName(String firstName) < this.firstName = firstName; > public String getLastName() < return lastName; > public void setLastName(String lastName) < this.lastName = lastName; > >

EmployeeService

package net.javaguides.mvc.service; import java.util.Arrays; import java.util.List; import net.javaguides.mvc.model.Employee; public class EmployeeService < public List < Employee > getEmployees() < return Arrays.asList(new Employee(1, "Ramesh", "Fadatare"), new Employee(2, "Tony", "Stark"), new Employee(3, "Tom", "Cruise")); > >

Controller Layer

package net.javaguides.mvc.controller; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.javaguides.mvc.service.EmployeeService; @WebServlet(name = "EmployeeServlet", urlPatterns = "/employees") public class EmployeeServlet extends HttpServlet < private static final long serialVersionUID = 1 L; private EmployeeService employeeService = null; public void init() < employeeService = new EmployeeService(); > private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException < request.setAttribute("employees", employeeService.getEmployees()); RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/employees.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); >>

View Layer

   "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> html> head> meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> title>Student Recordtitle> head> body> <% ListEmployee> employees = (ListEmployee>)request.getAttribute("employees"); %> table border="1" style="width: 50%" height="50%"> thead> tr> th>IDth> th>First Nameth> th>Last Nameth> tr> thead> tbody>  for (Todo todo: todos) < --> tr> td> td> td> td> td> td> tr> %> tbody> table> body> html>

Conclusion

In this tutorial, we’ve learned about the MVC i.e. Model View Controller architecture, and we focused on how to implement a simple example using JSP and Servlet.

Источник

Spring MVC — основные принципы

Фреймворк Spring MVC обеспечивает архитектуру паттерна Model — View — Controller (Модель — Отображение (далее — Вид) — Контроллер) при помощи слабо связанных готовых компонентов. Паттерн MVC разделяет аспекты приложения (логику ввода, бизнес-логику и логику UI), обеспечивая при этом свободную связь между ними.

  • Model (Модель) инкапсулирует (объединяет) данные приложения, в целом они будут состоять из POJO («Старых добрых Java-объектов», или бинов).
  • View (Отображение, Вид) отвечает за отображение данных Модели, — как правило, генерируя HTML, которые мы видим в своём браузере.
  • Controller (Контроллер) обрабатывает запрос пользователя, создаёт соответствующую Модель и передаёт её для отображения в Вид.
Читайте также:  Таблицы

DispatcherServlet

Вся логика работы Spring MVC построена вокруг DispatcherServlet, который принимает и обрабатывает все HTTP-запросы (из UI) и ответы на них. Рабочий процесс обработки запроса DispatcherServlet’ом проиллюстрирован на следующей диаграмме:

Ниже приведена последовательность событий, соответствующая входящему HTTP-запросу:

  • После получения HTTP-запроса DispatcherServlet обращается к интерфейсу HandlerMapping, который определяет, какой Контроллер должен быть вызван, после чего, отправляет запрос в нужный Контроллер.
  • Контроллер принимает запрос и вызывает соответствующий служебный метод, основанный на GET или POST. Вызванный метод определяет данные Модели, основанные на определённой бизнес-логике и возвращает в DispatcherServlet имя Вида (View).
  • При помощи интерфейса ViewResolver DispatcherServlet определяет, какой Вид нужно использовать на основании полученного имени.
  • После того, как Вид (View) создан, DispatcherServlet отправляет данные Модели в виде атрибутов в Вид, который в конечном итоге отображается в браузере.

Конфигурирование

Вам будет необходимо связать (замапить) запросы, которые Вы хотите обработать при помощи DispatcherServlet, используя мапинг URL в файле web.xml. Ниже приведён пример объявления и мапинга DispatcherServlet’а HelloWeb:

 Spring MVC Application HelloWeb org.springframework.web.servlet.DispatcherServlet 1  HelloWeb *.jsp  

Файл web.xml будет находиться в каталоге WebContent/WEB-INF. После инициализации HelloWeb, фреймворк попытается загрузить контекст приложения из файла с именем [servlet-name]-servlet.xml, находящегося в каталоге WebContent/WEB-INF. В нашем случае, это будет HelloWeb-servlet.xml.

Далее, тэг указывает, какие веб-адреса обрабатываются каким DispatcherServlet’ом. В нашем случае, все HTTP-запросы, заканчивающиеся на «.jsp», будут обработаны HelloWeb.

Если Вы не хотите использовать [servlet-name]-servlet.xml / WebContent/WEB-INF в качестве файла и директории по умолчанию, Вы можете настроить имя файла и директорию, добавив слушатель сервлета (servlet listener) ContextLoaderListener в web.xml, как показано ниже:

  . contextConfigLocation /WEB-INF/HelloWeb-servlet.xml   org.springframework.web.context.ContextLoaderListener  

Теперь давайте проверим конфигурацию для HelloWeb-servlet.xml, размещённую в каталоге WebContent/WEB-INF:

Ниже приведены важные моменты в HelloWeb-servlet.xml:

  • Файл [servlet-name]-servlet.xml будет использоваться для создания обозначенных бинов, с переопределением определений каждого бина, определённых с тем же именем в глобальной области.
  • Тэг будет использован для для активации функции сканирования аннотаций Spring MVC, позволяющей использовать аннотации, такие как Controller, @RequestMapping и проч.
  • Имена Видов (View) будут определяться при помощи InternalResourceViewResolver. В соответствии с указанным выше правилом, Вид с именем hello будет реализован по адресу /WEB-INF/jsp/hello.jsp

Определение Контроллера

DispatcherServlet отправляет запрос контроллерам для выполнения определённых функций. Аннотация @Controllerannotation указывает, что конкретный класс является контроллером. Аннотация @RequestMapping используется для мапинга (связывания) с URL для всего класса или для конкретного метода обработчика.

@Controller @RequestMapping("/hello") public class HelloController < @RequestMapping(method = RequestMethod.GET) public String printHello(ModelMap model) < model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; >>

Аннотация Controller определяет класс как Контроллер Spring MVC. В первом случае, @RequestMapping указывает, что все методы в данном Контроллере относятся к URL-адресу «/hello». Следующая аннотация @RequestMapping(method = RequestMethod.GET) используется для объявления метода printHello() как дефолтного метода для обработки HTTP-запросов GET (в данном Контроллере). Вы можете определить любой другой метод как обработчик всех POST-запросов по данному URL-адресу.

Вы можете написать вышеуказанный Контроллер по-другому, указав дополнительные атрибуты для аннотации @RequestMapping следующим образом:

@Controller public class HelloController < @RequestMapping(value = "/hello", method = RequestMethod.GET) public String printHello(ModelMap model) < model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; >>

Атрибут «value» указывает URL, с которым мы связываем данный метод (value = «/hello»), далее указывается, что этот метод будет обрабатывать GET-запросы (method = RequestMethod.GET). Также, нужно отметить важные моменты в отношении приведённого выше контроллера:

  • Вы определяете бизнес-логику внутри связанного таким образом служебного метода. Из него Вы можете вызывать любые другие методы.
  • Основываясь на заданной бизнес-логике, в рамках этого метода Вы создаёте Модель (Model). Вы можете добавлять аттрибуты Модели, которые будут добавлены в Вид (View). В примере выше мы создаём Модель с атрибутом «message».
  • Данный служебный метод возвращает имя Вида в виде строки String. В данном случае, запрашиваемый Вид имеет имя «hello».

Создание Вида (JSP)

Spring MVC поддерживает множество типов Видов для различных технологий отображения страницы. В том числе — JSP, HTML, PDF, Excel, XML, Velocity templates, XSLT, JSON, каналы Atom и RSS, JasperReports и проч. Но чаще всего используются шаблоны JSP, написанные при помощи JSTL.

Давайте напишем простой Вид «hello» в /WEB-INF/hello/hello.jsp:

В данном случае, переменная $ выводит тот самый атрибут, установленный нами в Контроллере. Внутри Вида Вы можете отобразить любое количество атрибутов.

Примеры реализации фреймворка Spring MVC

Основываясь на приведённых выше концепциях, предлагаю выполнить несколько важных уроков, которые в дальнейшем помогут нам создавать приложения Spring Web:

Spring MVC Hello World Example
Пример, разъясняющий написание простейшего приложения Hello World.

Spring MVC Form Handling Example
В этом примере объясняется, как написать приложение Spring Web с помощью форм HTML, отправить данные контроллеру и отобразить обработанный результат.

Spring Static Pages Example
Получаем доступ к статическим страницам вместе с динамическими.

Источник

Оцените статью