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

max аватар
89
Находится в разделах:

В этом примере мы увидим, как разрабатываются Spring контроллеры, основанные на аннотациях. Этот пример похож на предыдущий пример. за исключением того, что здесь мы будем использовать аннотации. В этом примере будут даны объяснения только тем изменениям, которые сделаны на основе предыдущего примера. Так что если вдруг встретите непонятные вещи, можете обратиться к предыдущему посту. 

При использовании контроллеров, базирующихся на аннотациях, нет необходимости наследоваться от специальных классов или реализовывать какие-то интерфейсы. Единственное, что необходимо сделать - это превратить простой java класс в Spring контроллер с помощью аннотации @Controller.

Рассмотрим листинг описания класса UserController:

 

info picture

Аннотация @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 заранее зарегистрированы в контексте веб-приложения.  Но нам необходимо  явно зарегистрировать их, в случае если у нас зарегистрированы любые другие маппинги:


Конец
Амос Бронсон Олкотт утверждает, что мы добираемся до вершин чаще всего по обломкам наших заветных замыслов, обнаруживая, что успех нам принесли именно наши неудачи.

Скажите а библиотеки те же самые по сравнению с предыдущим примером или что-то изменилось

И если можно список jar-ов был бы очень желателен для каждого примера поскольку когда я подменил  библиотеку то все пошло

 

Заранее благодарю

max аватар

Чтобы быть уверенным наверняка, для тестовых примеров просто подключайте все либы спринга. Это избавит Вас от необходимости поиска недостающих библиотек. 

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

max аватар

Не судите строго эти примеры, так как они предназначены лишь для того, чтобы показать как в веб-приложении используется спринг. 

 

Вообще то Я очень благодарен за столь простое и в большинстве своем понятное описание. Столь редко встречающееся

 

А бибилиотеки нужны хотя бы потому что Я автоматически подключил библиотеки Spring из NetBeans и получил неисполняемымое приложение а это слегка нервирует.

Еще раз повторяю - для Меня это уникальный случай обычно новичков отсылают на какой-то морально устаревший пост И после такой отсылки уже не хочется возвращаться  к первоисточнику так что еще раз спасибо !!!!!!!!!!!

На всякий случай

Мое имя Борис

 

max аватар

Очень рад, что материалы оказались для Вас полезными. Сразу скажу, материал - не мой. Это перевод цикла статей с сайта http://www.vaannila.com/

Мне кажется, знакомиться с чем-то новым проще на родном языке. 

Мой скайп - max.tkachenko.ua. Будут вопросы - стучите.

max аватар

Насчет посылания новичков - сам знаю. Не раз сталкивался. Cool

К сожалению Я не имею скайп и не смогу его иметь

Если можно мыло

Борис

max аватар

посмотрите вверху сайта, над статьями

Even professional high school students don't want to risk and try to compose essay papers themselves! Therefore, they generally get information where to buy essays. Moreover, it gets them an opportunity to focus on personal stuff!

Spring ни в какое сравнение не идет с EJB 3 еще и потому, что однозначно лучше иметь полноценный контейнер EJB нежели просто контейнер сервлетов.

Контейнер сервлетов с нахлобучками.

Отправить комментарий

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке