Spring 3 та @Controller
У цій статті розглянемо створення контролерів під час використання Spring Framework 3-ї версії та Spring MVC зокрема.
Абревіатура MVC у назві Spring MVC розшифровується як Model-view-controller. MVC («Модель-представлення-поведінка», «Модель-представлення-контролер») — схема використання декількох шаблонів проектування, за допомогою яких модель даних додатка, інтерфейс користувача та взаємодія з користувачем розділені на три окремі компоненти так, що модифікація одного з компонентів надає мінімальний вплив інші. Дана схема проектування часто використовується для побудови архітектурного каркасу, коли переходять від теорії до реалізації у конкретній предметній галузі.
Парадігра програмування MVC не буде докладно описуватися в даній статті.
Отже, контролер Spring MVC виконує роль (як не дивно :)) контролера в парадигмі програмування Model-View-Controller. Кожен запит перехоплюється глобальним Front-контролером, який за специфічними параметрами (URI, метод і заголовки запиту) визначає, якому з контролерів передати отриманий запит. Контролер обробляє запит та створює модель. Front-контролер заповнює представлення даними моделі та повертає отриманий результат браузеру. Нижче представлена схема обробки запиту Spring.

Найпростіший контролер виглядає так:
Анотація @Controller служить для повідомлення Spring'у про те, що цей клас є bean'ом і його необхідно підвантажити при старті програми. Анотацією @RequestMapping(value = "/simple1") повідомляємо, що даний контролер оброблятиме запит, URI якого "/simple1"
- повідомляємо Front-контролеру, що ім'я подання "simple" (за замовчуванням, це файл /WEB-INF/views/simple.jsp).
Ці ж операції можна зробити за допомогою класу ModelAndView, який агрегує всі параметри моделі та ім'я відображення:
jsp-файл і в першому, і в другому випадку може виглядати, наприклад, так:
У двох наведених вище прикладах контролери не передають жодних даних уявленню, що буває вкрай рідко. Тому розглянемо варіант із передачею даних від контролера подання за допомогою моделі.
Модель-подання-контролер
Дані від контролера подання можуть передатися двома способами:
У першому випадку модель передається методу як параметра. Метод має повернути назву уявлення. У другому випадку метод сам створює об'єкт ModelAndView, який містить і модель, і ім'я представництва. Контролер має повернути цей об'єкт.
jsp-файл буде виглядати так:
У цьому прикладі контролер передає 2 параметри подання - name і path. Вони відображаються у поданні за допомогою конструкції $. Наприклад:
У цьому випадку користувачеві передається наступний рядок
Тобто вираз $ замінюється на John так як і в першому, і в другому методі контролера змінна моделі name заповнюється рядком John.
Щоб метод requestMapped отримав управління, необхідно виконати запит типу "/rmc/test".
Метод запиту
Як і в більшості http-фреймворків, у Spring є можливість розподіляти запити за різними методами не лише за параметрами, вказаними в URI, але й використовуючи різні методи запиту. Наприклад:
Для того, щоб виконався другий метод requestMethodPost, необхідно передати йому POST-запит, а для цього необхідноскористатися, наприклад, наступною формою:
Автозаповнення змінної із запиту або @PathVariable
У Spring є можливість автозаповнення змінної з шляху запиту. Розглянемо з прикладу:
Використовуючи цей код не потрібно дбати про те, як дістати рядок, розташований між pathvariable/ і наступним слешем. Вона буде автоматично поміщена в змінну категорію, завдяки анотації @PathVariable.
Ви можете замість рядкового типу змінної категорії використовувати цілий чи будь-який інший стандартний тип - Spring перетворює рядок до потрібного типу автоматично. Наприклад:
Варто зауважити, що в анотації @PathVariable можна як вказувати назву змінної:
так і не робити цього. У наступному випадку буде використовуватись назва, що збігається з назвою змінної: