Struts1 требует, чтобы классы действий наследовали абстрактный базовый класс. Распространенной проблемой Struts1 является программирование с использованием абстрактных классов вместо интерфейсов.
• Класс Action Struts 2 может реализовывать интерфейс Action или другие интерфейсы, делая возможными дополнительные и настраиваемые сервисы. Struts2 предоставляет базовый класс ActionSupport для реализации часто используемых интерфейсов. Интерфейс Action не требуется. Любой объект POJO с идентификатором выполнения можно использовать в качестве объекта Action Struts2.
Режим потока:
• Действие Struts1 является одноэлементным режимом и должно быть потокобезопасным, поскольку все запросы обрабатываются только одним экземпляром действия. Стратегия Singleton ограничивает возможности Struts1 Action, поэтому при разработке необходимо соблюдать особую осторожность. Ресурсы действий должны быть потокобезопасными или синхронизированными.
• Объект действия Struts2 генерирует экземпляр для каждого запроса, поэтому проблем с безопасностью потоков нет. (Фактически, контейнер сервлетов генерирует множество удаляемых объектов за каждый запрос и не вызывает проблем с производительностью и переработкой LJ)
Зависимости сервлета:
• Действие Struts1 зависит от API сервлетов, поскольку HttpServletRequest и HttpServletResponse передаются методу выполнения при вызове действия.
Действие Struts 2 не зависит от контейнера, что позволяет тестировать действие независимо от контейнера. Действие Struts2 по-прежнему может получить доступ к исходному запросу и ответу, если это необходимо. Однако другие элементы уменьшают или устраняют необходимость прямого доступа к HttpServetRequest и HttpServletResponse.
Тестируемость:
• Основная проблема при тестировании действий Struts 1 заключается в том, что метод выполнения предоставляет API сервлета (что делает тестирование зависимым от контейнера). Стороннее расширение — Struts TestCase — предоставляет набор макетов объектов Struts1 (для тестирования).
Действие Struts 2 можно тестировать путем инициализации, установки свойств и вызова методов. Поддержка внедрения зависимостей также упрощает тестирование.
Захват входных данных:
• Struts1 использует объекты ActionForm для захвата входных данных. Все ActionForms должны наследовать базовый класс. Поскольку другие JavaBeans нельзя использовать в качестве ActionForms, разработчики часто создают избыточные классы для захвата входных данных. Динамические Beans (DynaBeans) могут использоваться в качестве альтернативы созданию традиционных ActionForms. Однако разработчики могут переописывать (создавать) существующие JavaBeans (что по-прежнему приводит к появлению избыточных JavaBean).
• Struts 2 использует свойства Action непосредственно в качестве входных свойств, устраняя необходимость во втором объекте ввода. Входные свойства могут быть расширенными типами объектов со своими собственными (под) свойствами. Доступ к свойствам действия можно получить через библиотеки тегов на веб-странице. Struts2 также поддерживает режим ActionForm. Богатые типы объектов, включая бизнес-объекты, можно использовать в качестве объектов ввода/вывода. Эта функция ModelDriven упрощает ссылку taglib на входные объекты POJO.
Язык выражения:
• Struts1 интегрирует JSTL и поэтому использует JSTL EL. Этот EL имеет базовый обход графа объектов, но поддержка коллекций и индексированных свойств слабая.
• Struts2 может использовать JSTL, но также поддерживает более мощный и гибкий язык выражений — «Язык нотации графов объектов» (OGNL).
Привяжите значение к странице (просмотру):
• Struts 1 использует стандартные механизмы JSP для привязки объектов к страницам для доступа.
Struts 2 использует технологию «ValueStack», позволяющую taglib получать доступ к значениям без привязки вашей страницы (представления) к объекту. Стратегия ValueStack позволяет повторно использовать страницы (представления) через ряд свойств с одинаковым именем, но разных типов.
Тип преобразования:
Свойства ActionForm Struts 1 обычно имеют тип String. Struts1 использует Commons-Beanutils для преобразования типов. Один преобразователь на класс, не настраиваемый для каждого экземпляра.
• Struts2 использует OGNL для преобразования типов. Предоставляет конвертеры для основных и часто используемых объектов.
проверять:
• Struts 1 поддерживает ручную проверку в методе проверки ActionForm или проверку с помощью расширения Commons Validator. Один и тот же класс может иметь разное содержимое проверки, но подобъекты не могут быть проверены.
• Struts2 поддерживает проверку с помощью метода validate и среды проверки XWork. Платформа проверки XWork использует проверку и проверку содержимого, определенные для типа класса атрибутов, для поддержки подсвойства проверки цепочки.
Контроль выполнения действий:
• Struts1 поддерживает отдельные процессоры запросов (жизненный цикл) для каждого модуля, но все действия в модуле должны иметь один и тот же жизненный цикл.
• Struts2 поддерживает создание различных жизненных циклов для каждого действия с помощью стеков перехватчиков. Стеки можно использовать с различными действиями по мере необходимости.
Эта статья взята из блога CSDN. При перепечатке указывайте источник: http://blog.csdn.net/Ryan_lz/archive/2009/12/29/5101758.aspx.