Введение
Фреймворк веб-приложений с открытым исходным кодом – преемник Apache Struts 1. Apache Struts 1 – это фреймворк веб-приложений с открытым исходным кодом для разработки веб-приложений Java EE. Он использует и расширяет Java Servlet API, чтобы стимулировать разработчиков к использованию архитектуры «модель-представление-контроллер» (MVC). Он был первоначально создан Крейгом Маккланаханом и передан в Apache Foundation в мае 2000 года. Ранее входивший в проект Apache Jakarta и известный как Jakarta Struts, он стал самостоятельным проектом Apache в 2005 году. Фреймворк WebWork выделился из Apache Struts с целью предложить улучшения и доработки, сохраняя при этом общую архитектуру оригинального фреймворка Struts. Однако в декабре 2005 года было объявлено о воссоединении Struts и WebWork. WebWork 2.2 был принят как Apache Struts 2, первая полная версия которого вышла в феврале 2007 года. Помимо текущей и постоянно развивающейся версии-преемника Struts 2, с 2022 года существует клон Struts 1, который обновляет устаревший фреймворк Struts 1 до современного стека, совместимого с Jakarta EE.
the successor of Apache Struts 1
Apache Struts 1 is an open source web application framework for developing Java EE web applications. It uses and extends the Java Servlet API to encourage developers to adopt a model–view–controller (MVC) architecture. It was originally created by Craig McClanahan and donated to the Apache Foundation in May 2000. Formerly located under the Apache Jakarta Project and known as Jakarta Struts, it became a top level Apache project in 2005. The WebWork framework spun off from Apache Struts aiming to offer enhancements and refinements while retaining the same general architecture of the original Struts framework. However, it was announced in December 2005 that Struts would re merge with WebWork. WebWork 2.2 has been adopted as Apache Struts 2, which reached its first full release in February 2007. In addition to the current and constantly evolving successor version Struts 2, a clone of Struts 1 exists since 2022, which updates the legacy framework of Struts 1 to a current Jakarta EE compatible stack.
Цели проектирования и обзор
В стандартном веб-приложении Java EE клиент обычно обращается к серверу через веб-форму. Затем информация передается Java Servlet, который взаимодействует с базой данных и генерирует HTML-ответ, или передается в JavaServer Pages (JSP), который смешивает HTML и Java-код для достижения того же результата. Оба подхода часто считаются недостаточными для крупных проектов, поскольку они смешивают логику приложения с представлением и усложняют поддержку. Цель Struts – разделить модель (логику приложения, взаимодействующую с базой данных) от представления (HTML-страниц, отображаемых клиенту) и контроллера (компонента, передающего информацию между представлением и моделью). Struts предоставляет контроллер (сервлет, известный как ActionServlet) и упрощает создание шаблонов для слоя представления (обычно в JSP, но также поддерживаются XML/XSLT и Velocity). Разработчик веб-приложения отвечает за написание кода модели и создание центрального конфигурационного файла struts-config.xml, который связывает модель, представление и контроллер. Запросы от клиента отправляются контроллеру в виде "действий", определенных в конфигурационном файле; если контроллер получает такой запрос, он вызывает соответствующий Action-класс, который взаимодействует с кодом модели, специфичным для приложения. Код модели возвращает "ActionForward" – строку, указывающую контроллеру, какую страницу вывода отправить клиенту. Информация передается между моделью и представлением в виде специальных JavaBeans. Мощная библиотека пользовательских тегов позволяет слою представления читать и записывать содержимое этих JavaBeans без необходимости использования встроенного Java-кода. Struts классифицируется как веб-фреймворк, основанный на запросах модели 2. Struts также поддерживает интернационализацию веб-форм и включает механизм шаблонов под названием "Tiles", который, например, позволяет составлять слой представления из независимых компонентов: заголовка, нижнего колонтитула, навигационного меню и контента.