Framework mvc for java

5 наиболее популярных Java-фреймворков для веба

Java является одним из наиболее популярных языков программирования, возможности которого не ограничиваются практически ничем. Однако использование одного лишь голого языка для решения сложных задач — это развлечение для новичков и олдскульных программистов. Кстати, если вы новичок, рекомендуем пройти интенсив по основам java-программирования. Для всех остальных существуют фреймворки, которые помогают решать повседневные задачи и позволяют стирать границы между «могу» и «хочу».

Перед вами результаты исследования за 2016 год, которые красноречиво показывают распределение Java-аудитории по фреймворкам для веб-разработки:

Далее кратко поговорим о тех, чье имя не осталось закрыто бездушным вариантом «Other».

Spring MVC

Абсолютный лидер рейтинга. Знание Spring является одним из наиболее часто встречаемых требований на должность Java-разработчика. Причин тому масса, главное из них — универсальность. По сути, это целый контейнер фреймворков, позволяющих вам выполнять задачи любой сложности — от работы с БД до процедур тестирования.

Особняком среди них стоит MVC, который, как вы видите, в одиночку выиграл соревнование фреймворков. Взаимодействие, указанное в названии (model-view-controller), доведено здесь, если не до совершенства, то до очень хорошего уровня, что позволяет без глубоких знаний процессов создавать хороший и чистый front-end код.

С точки зрения необходимости изучения данного фреймворка новичком есть определенные разногласия. С одной стороны, это давно и хорошо зарекомендовавшая себя платформа, знание которой будет большим плюсом к резюме. С другой — на сегодняшний день Spring по функционалу не является такой доминирующей платформой по возможностям, как это было лет 7-10 назад. При этом новичку освоить MVC с ходу достаточно сложно.

JSF

Еще один фреймворк для разработки веб-приложений, но в отличие от предыдущего пункта, ставка здесь делается не на обработку запросов, а на взаимодействие с компонентами. Большим плюсом является поддержка Oracle, множество дополнительных инструментов, прекрасная документация и дружелюбное сообщество. В общем, если вам надо быстро что-то разработать на Java, JSF — прекрасный вариант.

Но есть и обратная сторона. Несмотря на то, что такой подход новичку покажется проще и понятнее, для работы на хоть сколько-то профессиональном уровне потребуется и отличное знание Java, и понимание веб-технологий, и вообще опыт работы в вебе без всяких фреймворков.

Vaadin

Одним из главных преимуществ использования фреймворка Vaadin является возможность использовать только Java, избегая прикруток языков веба (HTML, JS, XML). Да, это не единственный фреймворк, обладающий такой возможностью, но это пожалуй наименее проблемный из всех.
Кроме того, здесь прекрасно реализованы модели MVC и MVP, что в конечном счете отражается на качестве вашей работы. Но есть и обратная сторона. Во-первых, Vaadin — это надстройка на GWT, что в конечном счете обяжет вас изучить и этот фреймворк. Во-вторых, как следует из всего описанного выше, он медлителен. Пользователь по сути работает лишь с представлениями, поэтому время выполнения любого действия можно смело умножать на 3 от номинального.

Читайте также:  Get int index arraylist java

GWT (Google Web Toolkit)

Vaadin и GWT чрезвычайно похожи и всячески связаны, но последнего есть одно важное отличие — он компилируется в JavaScript, с которым сервер и работает. Писать вам здесь тоже придется на чистом и немного ограниченном Java, но в отличие от Vaadin здесь больше самостоятельности в обработке запросов. С одной стороны, это позволяет увеличить быстродействие, наладить работу с памятью, с другой — потребует от вас больше знаний и навыков в разработке.

В остальном одни плюсы: множество API, виджетов, первоклассная поддержка, отсутствие необходимости безупречно знать Java — вполне достаточно, чтобы заинтересоваться данным фреймворком.

Grails

Как вы возможно знаете, Grails это фреймворк для языка Groovy, который в свою очередь основан на Java. Таким образом, фактически получается упрощение для упрощения. То есть на выходе вы и без того бы получали бы удобный продукт с низким порогом входа, а тут еще и разработчики постарались: мало того, что в комплекте идет более 900 плагинов, так еще и совместимость со Spring и Hibernate (о нем чуть позже). Когда станет скучно работать с готовым и захочется заняться кастомизацией, Grails подарит вам такую возможность с помощью гибкой системы настроек библиотек (в т.ч. Grails-Ajax).

В общем, хотите быстро и качественно создать приложение, не имея большого опыта за плечами — это к Grails. Но учтите требуемый объем ПО и невысокие показатели быстродействия.

Обратите внимание

Существует ещё несколько фреймворков, незаслуженно обделенных вниманием рейтинга, но заслуживающих вашего внимания.

Struts 2 — прекрасный фреймворк с более, чем 17-летней историей (конкретно Struts 2 в феврале исполнилось 10 лет). Упрощает реализацию MVC, имеет много достойных плагинов, но все же достаточно сложен для начинающей аудитории.

Hibernate — когда вам необходимо прикрутить низкоуровневый код для взаимодействия с БД и обработкой запросов, этот фреймворк вам здорово поможет.

Wicket — схожий с Vaadin фреймворк, требующий работы одновременно сразу по двум направлениям: с Java и с HTML. От этого не самая высокая популярность.

Stripes — малоизвестный фреймворк, являющийся по сути легковесной версией Struts. Минимум настроек, максимально упрощённые соглашения и достаточно низкий порог входа.

А какие фреймворки используете вы? Почему?

Источник

Spring MVC — основные принципы

Фреймворк Spring MVC обеспечивает архитектуру паттерна Model — View — Controller (Модель — Отображение (далее — Вид) — Контроллер) при помощи слабо связанных готовых компонентов. Паттерн MVC разделяет аспекты приложения (логику ввода, бизнес-логику и логику UI), обеспечивая при этом свободную связь между ними.

  • Model (Модель) инкапсулирует (объединяет) данные приложения, в целом они будут состоять из POJO («Старых добрых Java-объектов», или бинов).
  • View (Отображение, Вид) отвечает за отображение данных Модели, — как правило, генерируя HTML, которые мы видим в своём браузере.
  • Controller (Контроллер) обрабатывает запрос пользователя, создаёт соответствующую Модель и передаёт её для отображения в Вид.
Читайте также:  Entry interface in java

DispatcherServlet

Вся логика работы Spring MVC построена вокруг DispatcherServlet, который принимает и обрабатывает все HTTP-запросы (из UI) и ответы на них. Рабочий процесс обработки запроса DispatcherServlet’ом проиллюстрирован на следующей диаграмме:

Ниже приведена последовательность событий, соответствующая входящему HTTP-запросу:

  • После получения HTTP-запроса DispatcherServlet обращается к интерфейсу HandlerMapping, который определяет, какой Контроллер должен быть вызван, после чего, отправляет запрос в нужный Контроллер.
  • Контроллер принимает запрос и вызывает соответствующий служебный метод, основанный на GET или POST. Вызванный метод определяет данные Модели, основанные на определённой бизнес-логике и возвращает в DispatcherServlet имя Вида (View).
  • При помощи интерфейса ViewResolver DispatcherServlet определяет, какой Вид нужно использовать на основании полученного имени.
  • После того, как Вид (View) создан, DispatcherServlet отправляет данные Модели в виде атрибутов в Вид, который в конечном итоге отображается в браузере.

Конфигурирование

Вам будет необходимо связать (замапить) запросы, которые Вы хотите обработать при помощи DispatcherServlet, используя мапинг URL в файле web.xml. Ниже приведён пример объявления и мапинга DispatcherServlet’а HelloWeb:

 Spring MVC Application HelloWeb org.springframework.web.servlet.DispatcherServlet 1  HelloWeb *.jsp  

Файл web.xml будет находиться в каталоге WebContent/WEB-INF. После инициализации HelloWeb, фреймворк попытается загрузить контекст приложения из файла с именем [servlet-name]-servlet.xml, находящегося в каталоге WebContent/WEB-INF. В нашем случае, это будет HelloWeb-servlet.xml.

Далее, тэг указывает, какие веб-адреса обрабатываются каким DispatcherServlet’ом. В нашем случае, все HTTP-запросы, заканчивающиеся на «.jsp», будут обработаны HelloWeb.

Если Вы не хотите использовать [servlet-name]-servlet.xml / WebContent/WEB-INF в качестве файла и директории по умолчанию, Вы можете настроить имя файла и директорию, добавив слушатель сервлета (servlet listener) ContextLoaderListener в web.xml, как показано ниже:

  . contextConfigLocation /WEB-INF/HelloWeb-servlet.xml   org.springframework.web.context.ContextLoaderListener  

Теперь давайте проверим конфигурацию для HelloWeb-servlet.xml, размещённую в каталоге WebContent/WEB-INF:

Ниже приведены важные моменты в HelloWeb-servlet.xml:

  • Файл [servlet-name]-servlet.xml будет использоваться для создания обозначенных бинов, с переопределением определений каждого бина, определённых с тем же именем в глобальной области.
  • Тэг будет использован для для активации функции сканирования аннотаций Spring MVC, позволяющей использовать аннотации, такие как Controller, @RequestMapping и проч.
  • Имена Видов (View) будут определяться при помощи InternalResourceViewResolver. В соответствии с указанным выше правилом, Вид с именем hello будет реализован по адресу /WEB-INF/jsp/hello.jsp

Определение Контроллера

DispatcherServlet отправляет запрос контроллерам для выполнения определённых функций. Аннотация @Controllerannotation указывает, что конкретный класс является контроллером. Аннотация @RequestMapping используется для мапинга (связывания) с URL для всего класса или для конкретного метода обработчика.

@Controller @RequestMapping("/hello") public class HelloController < @RequestMapping(method = RequestMethod.GET) public String printHello(ModelMap model) < model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; >>

Аннотация Controller определяет класс как Контроллер Spring MVC. В первом случае, @RequestMapping указывает, что все методы в данном Контроллере относятся к URL-адресу «/hello». Следующая аннотация @RequestMapping(method = RequestMethod.GET) используется для объявления метода printHello() как дефолтного метода для обработки HTTP-запросов GET (в данном Контроллере). Вы можете определить любой другой метод как обработчик всех POST-запросов по данному URL-адресу.

Вы можете написать вышеуказанный Контроллер по-другому, указав дополнительные атрибуты для аннотации @RequestMapping следующим образом:

@Controller public class HelloController < @RequestMapping(value = "/hello", method = RequestMethod.GET) public String printHello(ModelMap model) < model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; >>

Атрибут «value» указывает URL, с которым мы связываем данный метод (value = «/hello»), далее указывается, что этот метод будет обрабатывать GET-запросы (method = RequestMethod.GET). Также, нужно отметить важные моменты в отношении приведённого выше контроллера:

  • Вы определяете бизнес-логику внутри связанного таким образом служебного метода. Из него Вы можете вызывать любые другие методы.
  • Основываясь на заданной бизнес-логике, в рамках этого метода Вы создаёте Модель (Model). Вы можете добавлять аттрибуты Модели, которые будут добавлены в Вид (View). В примере выше мы создаём Модель с атрибутом «message».
  • Данный служебный метод возвращает имя Вида в виде строки String. В данном случае, запрашиваемый Вид имеет имя «hello».

Создание Вида (JSP)

Spring MVC поддерживает множество типов Видов для различных технологий отображения страницы. В том числе — JSP, HTML, PDF, Excel, XML, Velocity templates, XSLT, JSON, каналы Atom и RSS, JasperReports и проч. Но чаще всего используются шаблоны JSP, написанные при помощи JSTL.

Давайте напишем простой Вид «hello» в /WEB-INF/hello/hello.jsp:

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

Примеры реализации фреймворка Spring MVC

Основываясь на приведённых выше концепциях, предлагаю выполнить несколько важных уроков, которые в дальнейшем помогут нам создавать приложения Spring Web:

Spring MVC Hello World Example
Пример, разъясняющий написание простейшего приложения Hello World.

Spring MVC Form Handling Example
В этом примере объясняется, как написать приложение Spring Web с помощью форм HTML, отправить данные контроллеру и отобразить обработанный результат.

Spring Static Pages Example
Получаем доступ к статическим страницам вместе с динамическими.

Источник

Оцените статью