Введение
Модель 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".
The literature on Web tier technology in the J2EE platform frequently uses the terms "Model 1" and "Model 2" without explanation. This terminology stems from early drafts of the JSP specification, which described two basic usage patterns for JSP pages. While the terms have disappeared from the specification document, they remain in common use. Model 1 and Model 2 simply refer to the absence or presence (respectively) of a controller servlet that dispatches requests from the client tier and selects views. Furthermore, the term "MVC2" has led many to a mistaken belief that Model 2 represents a next generation MVC pattern. In fact, MVC2 is simply a shortening of the term "MVC Model 2". The confusion over the term "MVC2" has led to additional confusion over Model 1 code, resulting in common usage of the nonexistent term "MVC1".