Основи шаблону MVC:
Model – представлення даних, самі дані.
View – представлення, вигляд, показ.
Controller – управління, зв'язок між моделлю та видом.
DispatcherSer vlet
Spring MVC побудований навколо DispatcherServlet. Він вирішує, який запит куди надсилати. За назвою зрозуміло, що це сервлет.
У ньому налаштовується мапінг запитів, часової зони, а також багато інших параметрів. Нас поки що цікавить лише мапінг запитів.
Налаштовується за допомогою анотацій @Controller і @RequestMapping.
DispatcherServlet – повністю інтегрований сервлет у контейнер Spring IoC, тому він отримує доступ до всіх можливостей Spring.
Обробка запитів у DispatcherServlet показана на малюнку нижче.
DispatcherServlet є звичайним сервлетом (успадковується від базового класу HttpServlet).
Його необхідно описувати в дескрипторі розгортання (web.xml) вашого вебзастосунку.
Необхідно вказати мапінг запитів, які будуть оброблятися в DispatcherServlet, вказуючи URL шаблону в web.xml.
Нижче показано стандартну конфігурацію Java EE, яка необхідна для налаштування
DispatcherServlet:
<web-app>
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/myServlet/*</url-pattern>
</servlet-mapping>
</web-app>
MVC (докладніше)
DispatcherServlet отримує запит і спираючись на налаштування ухвалює рішення про те, якому контролеру перенаправити запит (Handler Mapping).
Після визначення контролера запит перенаправляється в нього (Controller). Там запит обробляється, а у відповідь надсилається модель і представлення ModelAndView. Model – дані, view – логіка їхнього показу
DispatcherServlet на основі отриманих даних визначає, яке представлення (view) потрібно використовувати (ViewResolver), а у відповідь отримує ім'я цього представлення.
Представлення отримує дані (model) для зображення за певною логікою та надсилає відповідь DispatcherServlet, якщо є така необхідність.
У представленні передаються дані (model), і назад, якщо необхідно, посилається відповідь від представлення.
Вищезгадані компоненти (HandlerMapping, Controller і ViewResolver) є
частинами інтерфейсу WebApplicationContext extends ApplicationContext з деякими додатковими особливостями, які необхідні для створення вебзастосунків.
ViewResolver
Інтерфейс, мета якого полягає в тому, щоб знаходити представлення за іменем.
Реалізація інтерфейсу ViewResolver, яка використовується за замовчуванням, – клас InternalResourceViewResolver. Зазвичай він налаштовується невеликим записом у ...- servlet.xml:
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
WEB-INF – сховище файлів, до яких закрито прямий доступ з адресного рядка. Є поняття внутрішніх ресурсів, які доступні ззовні. Одна з реалізацій інтерфейсу ViewResolver саме так і називається – InternalResourceViewResolver. Коли ви поміщаєте свої представлення в теку WEB-INF/view/*.jsp, ви їх приховуєте. Вони стають доступними лише з контролера.
HandlerMapping
Інтерфейс, мета якого визначати мапінг запитів та обробників.
Реалізація HandlerMapping за замовчуванням – RequestMappingHandlerMapping. Звісно ж, вона не одна, наявні інші, які допомагають налаштувати пошук контролера за вашою власною логікою.
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView main() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("userJSP", new User());
modelAndView.setViewName("index");
return modelAndView;
}
WebApplicationContext
Інтерфейс, мета якого надавати конфігурацію для веб-застосунку.
У дескрипторі розгортання
налаштування SpringMVC:
(web.xml)
необхідно
вказати,
звідки
отримувати
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
ContextLoaderListener завантажує WebApplicationContext, який за замовчуванням використовує клас XmlWebApplicationContext.
Анотації
@Controller – вказує, що анотований клас є контролером (Controller). Зазвичай використовується у зв'язку з методами, анотованими @RequestMapping.
@RequestMapping – анотація для мапінгу вебзапитів на методи з гнучкою сигнатурою в класах, які обробляють запити. Анотація може бути використана як на рівні класів, так і на рівні методів. У більшості випадків на рівні методів надають перевагу використанню однієї з варіацій HTTP-методів: @GetMapping, @PostMapping, @PutMapping, @DeleteMapping або @PatchMapping.
@GetMapping – анотація для мапінгу HTTP GET на специфічний метод. @GetMapping – це композиційна анотація
для запису @RequestMapping(method = RequestMethod.GET).
@RequestParam – анотація, яка показує, що параметр методу має бути пов'язаний із параметром вебзапиту. Якщо тип параметра методу Map<String, String> або MultiValueMap<String, String>, а ім'я параметра не вказано, тоді параметр Map заповнюється іменами та значеннями всіх параметрів запиту.
@PathVariable – анотація, яка говорить, що параметр методу має бути пов'язаний зі змінною шаблону URI. Працює у зв'язці з методами, анотованими @RequestMapping. Якщо тип параметра методу Map<String, String>, тоді Map заповнюється іменами та значеннями всіх змінних шляхів.
Q&A
Дякую всім за заняття!🙌🏻
❗️🎓3. Spring MVC
Нагадую, що дедлайн здачі домашніх робіт – до наступного уроку.
Якщо виникають складнощі, пишіть, допоможу із задоволенням 😌
Запис лекції тренер опублікує трохи пізніше 🖥
Не забудьте повторити матеріал та підготуватися до наступного уроку📚
Успіху і до зустрічі!🤩
PRO. 1
Прізвище
Ім'я
По батькові
Стать
Посада
Дата народження
Вивести дані про інженерів, пенсійного віку (чоловікам більше 65-ти років, жінкам 60).
PRO. 2
No поїзда
Пункт і час прибуття
Пункт і час відбуття
Вивести всі відомості про поїзди, час перебування в дорозі яких перевищує 7 годин 20 хвилин.
Обчислити середню вартість усіх комп'ютерів і надрукувати найменування комп'ютерів та їхню середню вартість.
PRO. 3
Прізвище
Ім'я
По батькові
Посада
Зарплата
Дата народження
Вивести відомості про працівників, у яких зарплата вища за середню і вік менше 30-ти років.