Введение в Web MVC framework. Контроллер.

Я попробую комментировать процесс моего понимания Web MVC концепции.  Все  файлы которые упоминаются здесь вы можете скачать с GitHub. То что описывается здесь, происходит конкретно в branch — spring-boot.

Web MVC framework

Этот фремворк построен на DispatcherServlet .  По русски это диспетчер.  Если при слове диспетчер вы подумали о тетечке в стеклянной будке, которая что-то бубнит в громкоговоритель, то вы не ошиблись, именно так и есть.  Ей дали бумажку с текстом и она его вам доносит, через громкоговоритель.  DispatcherServlet делает то-же самое.  Он принимает запрос из браузера и несет его контроллеру.  Контроллер это класс который будет решать что дальше делать с запросом.  Аннотация @Controller указывает что наш класс будет выполнять функции контроллера. Выглядит это так:

@Controller
public class CategoryController {
}

Теперь DispatcherServlet будет знать что именно этот класс занимается обработкой запросов. Чтобы контроллер мог принимать решения о дальнейшей судьбе запроса используется аннотация @RequestMapping:

@RequestMapping(value = "/")
public String index() {

return "Hello world!";
}

Здесь в аннотации в скобках указывается «/», то-есть корень нашего сайта. Теперь контроллер точно знает что делать если браузер обращается к корню нашего сайта.
Вот так например: http://localhost:8080/. При таком запросе контроллер выполнит метод index() и мы увидим в браузере заветную надпись Hello World! Так-же сразу хочу добавить что аннотация @RequestMapping очень гибкая. В ней так-же можно указывать какой метод мы ожидаем в запросе:

@RequestMapping(value = "/category.html", method = RequestMethod.POST)
public String viewCategory() {
// TO DO something
}

Здесь в аннотации указано, что если у нас запрос страницы category.html и метод запроса POST. То контроллер выполнит метод viewCategory(). Причем если мы запросим эту же страницу, но метод запроса будет GET, то мы получим 404. Тут можно еще немного добавить про аннотацию @RequestMapping. Можно например в одной аннотации указывать несколько обслуживаемых адресов:

@RequestMapping(value = {"/category.html","/"})
public String viewCategory() {
// TO DO something
}

То-есть при обращении к корню нашего сайта: http://localhost:8080/ и при обращении к странице: http://localhost:8080/category.html. Будет выполняться один и тот-же метод.

@RequestMapping(value = "/category.html/{id};{name}")
public String viewCategory() {
// TO DO something
}

В этом примере мы указываем, что будем ожидать запрос с таким шаблоном «{id};{name}». В браузере это выглядит так:
http://localhost:8080/3;Петя
И тут мы плавно переходим к следующей аннотации @PathVariable. Она используется для извлечения данных из запроса, добавим ее в пример выше:

@RequestMapping(value = "/category.html/{id};{name}")
public String viewCategory(@PathVariable("id") Integer id, @PathVariable("name") String name {
// теперь мы можем использовать пришедшие в запросе
// данные, уже как обычные переменные, и обработать
// их как-либо
Integer myId = id;
String myString = name;
// TO DO something
}

Для более детального и вдумчивого изучения курим документацию. Поправляем где я ошибся.
Во второй части будет непосредственно код из файла CategoryController.java с комментариями.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s