четверг, 26 февраля 2015 г.

Сумбурно про Web MVC framework

Web MVC framework

Этот фремворк построен на DispatcherServlet . По русски это диспетчер. Если при слове диспетчер вы подумали о тетечке в стеклянной будке, которая что-то бубнит в громкоговоритель, то вы не ошиблись именно так и есть. Ей дали бумажку с текстом и она его вам доносит через громкоговоритель. И DispatcherServlet делает то-же самое. Он принимает запрос из браузера и несет его контроллеру. Контроллер это класс который будет решать что дальше делать с запросом. Аннотация @Controller указывает что наш класс будет выполнять функции контроллера. Выглядит это так:
@Controllerpublic 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. Будет выполняться один и тот-же метод. Вот как это выглядит вместе:
@Controllerpublic class CategoryController {

    @RequestMapping("/")
    public String index() {
        return "Hello World!";
    }
}


Крутим Spring-Boot

Почитать и скачать этот самый Spring-Boot можно на сайте проекта. Сайт англоязычный, вот есть его копия по русски. Но там немного переведено, поэтому привыкаю читать на английском, это полезный скил.
Ну так в двух словах, про Spring-Boot. Вот что нам обещают разработчики:
Spring Boot позволяет вам легко создавать полноценные, производственного класса Spring-приложения, про которые можно сказать - "просто запусти". Мы включили Spring-платформу и сторонние библиотеки, чтобы вы могли запустить с минимум усилиями. Большинству Spring Boot приложениям требуется совсем маленькая Spring-конфигурация.

Возможности

  • Создание полноценных Spring приложений
  • Встроенный Tomcat или Jetty (не требуется установки WAR файлов)
  • Обеспечивает 'начальные' POMs для упрощения вашей Maven конфигурации
  • Автоматическая конфигурирация Spring когда это возможно
  • Обеспечивает такими возможностями, как метрики, мониторинг состояниями и расширенная конфигурация
  • Абсолютно без генерации кода и без написания XML конфигурация
Ну посмотрим.
Итак далее.
Если вы используете Maven надо немного покопипастить =).
 Это в dependencies:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.2-b01</version>
    <scope>provided</scope>
</dependency>
Это в плагины:
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin> 
Наблюдаем  волшебство Maven. И теперь у нас в секции Plugins есть плагин spring-boot.
Опция spring-boot:run это то что мы будем жать очень часто, это и есть запуск нашего сервера Tomcat с установленным на нем
Spring-Boot.



Кстати хочу сразу заметить, запущенный сервер изменяет jsp файлы на лету, так сказать, и при внесении изменений в них, сервер перезапускать не надо. Но если изменили java файл то тогда останавливаем сервер, пересоздаем пакет и запускаем снова. Иначе ничего не случится.
Если после запуска плагина spring-boot:run не выкинуло ошибок, и нет сообщений об ошибках.
То собственно и все, вы счастливый обладатель рабочего фреймворка. Теперь весь мир у ваших ног.
А если не запустился, то пишите, будем думать как его прикрутить.

Начинаем

Сегодня я поучаствовал в интересной беседе по хэнгу. Мой ментор Сережа Пономарев пригласил для общения Максима Педича. Чтобы поднять мотивацию. Так, про Сергея я потом отдельный пост напишу. А может даже и про Максима =). А пока, по их вот советам решил вести блог где буду описывать процесс познания JavaWorld.