Spring: Контроллеры, основанные на аннотациях / Annotation Controller. Пример

В этом примере мы увидим, как разрабатываются Spring контроллеры, основанные на аннотациях. Этот пример похож на предыдущий пример. за исключением того, что здесь мы будем использовать аннотации. В этом примере будут даны объяснения только тем изменениям, которые сделаны на основе предыдущего примера. Так что если вдруг встретите непонятные вещи, можете обратиться к предыдущему посту.
При использовании контроллеров, базирующихся на аннотациях, нет необходимости наследоваться от специальных классов или реализовывать какие-то интерфейсы. Единственное, что необходимо сделать - это превратить простой java класс в Spring контроллер с помощью аннотации @Controller.
Рассмотрим листинг описания класса UserController:
![]() |
Аннотация @Controller используется для магического превращения любого java класса в класс контроллера. Аннотация @RequestMapping используется для маппинга веб запроса "/userRegistration.htm" на класс UsserController. Аннотация @SessionAttributes используется для сохранения объекта модели в сессии. В нашем случае, объектом модели выступает user. |
При использовании аннотации @Autowired, контейнер может связывать бины автоматически. Но, по умолчанию, автоматическое связывание происходит по типу. В нашем случае будет выбран любой класс, который совместим с UserService. В классе контроллера необходимо указать два метода: один для управления HTTP GET запросом, а другой - для HTTP POST. Эти методы могут иметь произвольные имена. Когда форма отрисовуется впервые, вызывается метод showUserForm(), а затем, когда форма отсылается обратно на сервер, для обработки запроса вызывается onSubmit().
Аннотация @RequestMapping используется для идентификации типа HTTP запроса.
Командный объект, ассоциированные с формой, инициализуется в методе showUserForm(). Метод showUserForm() имеет доступ к ModelMap, в методе showUserForm(), создает командный объект и добавляет его к ModelMap. Для того, чтобы добавить атрибут в ModelMap, можно использовать метод addAttribute(). Этот метод автоматически сгенерирует имена атрибутов для каждого элемента. В нашем случае, объект user, по умолчанию, будет принимать имена как "user" (Можно переопределить дефолтное значение).
После того, как форма заполнена и отправлена, вызывается метод onSubmit(). Можно получить доступ к командному объекту с использованием аннотации @ModelAttribute. В нашем случае, имя командного объекта - user. После получения командного объекта, вызывается сервисные метод для регистрации пользователя и перенаправления управления на страницу "userSuccess.jsp".
Как можно заметить, мы перенаправляем запрос к "userSuccess.htm", вместо простого возвращения "userSuccess". Это необходимо, поскольку если мы просто вернем "userSuccess", отобразится страница userSuccess.jsp, но как только обновится страница после отправления формы, произойдет то, чего мы не совсем ожидали.
Запрос "userSuccess.htm" спроецирован на класс UserSuccessController; метод redirect() вызывается и передает управление странице userSuccess.jsp.
Код UserSuccessController:
Для того, чтобы включить автоматическое определение контроллеров в Spring, необходимо задать базовый пакет с контроллерами, используя элемент <context:component-scan> в конфигурационном файле Spring. DefaultAnnotationHandlerMapping и AnnotationMethodHandlerAdapter заранее зарегистрированы в контексте веб-приложения. Но нам необходимо явно зарегистрировать их, в случае если у нас зарегистрированы любые другие маппинги:
Материалы, которые могут вас заинтересовать
- Spring SimpleFormController. Пример
- Spring. Теги на форме / Form Tags
- Пример Spring MVC
- Spring. Внедрение через конструктор / Constructor injection
- Spring. Внедрение через сеттер / Setter injection
- Spring IoC. Пример
- Spring. Как это работает? Часть 3
- Spring. Как это работает? Часть 2: Создание бинов через вызов конструктора
- Spring. Как это работает? Часть 1








Скажите а библиотеки те же самые по сравнению с предыдущим примером или что-то изменилось
И если можно список jar-ов был бы очень желателен для каждого примера поскольку когда я подменил библиотеку то все пошло
Заранее благодарю
Чтобы быть уверенным наверняка, для тестовых примеров просто подключайте все либы спринга. Это избавит Вас от необходимости поиска недостающих библиотек.
В последствии, если будете писать что-либо серьезное, Вы уже будете точно знать, какие библиотеки Вам нужны.
Не судите строго эти примеры, так как они предназначены лишь для того, чтобы показать как в веб-приложении используется спринг.
Вообще то Я очень благодарен за столь простое и в большинстве своем понятное описание. Столь редко встречающееся
А бибилиотеки нужны хотя бы потому что Я автоматически подключил библиотеки Spring из NetBeans и получил неисполняемымое приложение а это слегка нервирует.
Еще раз повторяю - для Меня это уникальный случай обычно новичков отсылают на какой-то морально устаревший пост И после такой отсылки уже не хочется возвращаться к первоисточнику так что еще раз спасибо !!!!!!!!!!!
На всякий случай
Мое имя Борис
Очень рад, что материалы оказались для Вас полезными. Сразу скажу, материал - не мой. Это перевод цикла статей с сайта http://www.vaannila.com/
Мне кажется, знакомиться с чем-то новым проще на родном языке.
Мой скайп - max.tkachenko.ua. Будут вопросы - стучите.
Насчет посылания новичков - сам знаю. Не раз сталкивался.
К сожалению Я не имею скайп и не смогу его иметь
Если можно мыло
Борис
посмотрите вверху сайта, над статьями
Spring ни в какое сравнение не идет с EJB 3 еще и потому, что однозначно лучше иметь полноценный контейнер EJB нежели просто контейнер сервлетов.
Контейнер сервлетов с нахлобучками.
Отправить комментарий