Введение

Модель 2 JSP — это сложный шаблон проектирования, используемый при разработке Java-веб-приложений, который разделяет представление контента от логики его получения и обработки. Поскольку Модель 2 обеспечивает разделение логики и представления, она обычно связана с парадигмой «модель-представление-контроллер» (MVC). Хотя точная структура MVC «модели» никогда не была определена в дизайне Модели 2, многие публикации рекомендуют использовать формализованный слой для размещения кода MVC-модели. Например, Java BluePrints изначально рекомендовали использовать EJB для инкапсуляции MVC-модели. В приложении, использующем Модель 2, запросы от клиентского браузера направляются контроллеру. Контроллер выполняет всю необходимую логику для получения нужного контента для отображения, затем помещает этот контент в запрос (обычно в виде JavaBean или POJO) и определяет, какому представлению передать запрос. Представление, в свою очередь, отображает контент, переданный контроллером. Модель 2 рекомендуется для приложений среднего и большого размера.

История

В 1998 году Sun Microsystems опубликовала предварительную версию спецификации JavaServer Pages, версия 0.92. В этой спецификации Sun представила два подхода к использованию страниц JSP. Первая модель (именовалась "модель 1" в соответствии с порядком изложения в документе) была упрощенной, в которой страницы JSP представляли собой независимые, несвязанные сущности. Логика могла содержаться непосредственно в странице, а навигация между страницами обычно осуществлялась посредством гиперссылок. Это соответствовало распространенной практике использования технологий шаблонов того времени. ColdFusion и Active Server Pages являются примерами современных технологий, также реализовавших эту модель. Вторая модель, описанная в документе ("модель 2" в порядке изложения), представляла собой улучшенный подход, объединяющий технологии сервлетов и JSP. Основное различие заключалось в том, что сервлет перехватывал запрос, помещал данные для отображения в атрибут запроса (обычно представленный JavaBean), а затем вызывал JSP для рендеринга контента в нужном выходном формате. Эта модель отличалась от предыдущей тем, что технология JSP использовалась как чистый механизм шаблонов. Вся логика была вынесена в сервлет, оставив JSP единственную задачу – рендеринг вывода на основе предоставленных данных. В декабре 1999 года JavaWorld опубликовала статью Говинда Сешадри под названием "Understanding JavaServer Pages Model 2 architecture". В этой статье Говинд достиг двух важных рубежей в использовании термина "Модель 2". Первый рубеж – формализация термина "Модель 2" как архитектурного шаблона, а не просто одного из двух возможных вариантов. Второй рубеж – утверждение о том, что "Модель 2" обеспечивает архитектуру MVC для веб-приложений. Говинд полагал, что поскольку архитектура "Модель 2" отделяет логику от JSP и помещает ее в сервлет, эти две части можно рассматривать как "Вид" и "Контроллер" (соответственно) в архитектуре MVC. Часть "Модель" архитектуры MVC Говинд оставил открытой, предположив, что практически любая структура данных может соответствовать требованиям. В качестве конкретного примера в статье был использован список Vector, хранящийся в сессии пользователя. В марте 2000 года был выпущен проект Apache Struts. Этот проект формализовал разделение между "Видом" и "Контроллером" и заявил о реализации шаблона "Model 2". После выпуска Struts появилось множество конкурирующих фреймворков. Многие из них также заявляют о реализации "Модели 2" и "MVC". В результате эти два термина стали синонимами в сознании разработчиков. Это привело к использованию термина "MVC Model 2" или сокращенно "MVC2".

Неправильные представления

Распространенное заблуждение состоит в том, что для реализации Model 2 необходим формализованный шаблон MVC. Однако Java BluePrints специально предостерегают от такой интерпретации: в литературе о технологиях Web-уровня платформы J2EE термины "Model 1" и "Model 2" часто используются без объяснений. Эта терминология берет начало в ранних черновиках спецификации JSP, где описывались два основных способа использования страниц JSP. Хотя эти термины исчезли из документа спецификации, они по-прежнему широко используются. Model 1 и Model 2 просто обозначают отсутствие или наличие (соответственно) сервлета-контроллера, который обрабатывает запросы от клиентского уровня и выбирает представления. Более того, термин "MVC2" ввел многих в заблуждение, заставив поверить, что Model 2 представляет собой усовершенствованный шаблон MVC. На самом деле, MVC2 – это просто сокращение от "MVC Model 2". Недопонимание термина "MVC2" привело к дополнительной путанице в отношении кода Model 1, что привело к распространенному использованию несуществующего термина "MVC1".