Добро пожаловать в часть 5 серии из 7 частей, где мы обсуждаем различные аспекты Struts2 Framework. В предыдущей статье мы увидели, как интегрировать фреймворк Tiles со Struts2.
Сегодня мы исследуем мир перехватчиков в Struts2. Мы увидим, что такое перехватчики и как их настроить в веб-приложении на базе Struts2.
Struts 2 Tutorial List
- Часть 1. Введение в Struts 2 Framework
- Часть 2. Создание приложения Hello World в Struts 2
- Часть 3: Руководство по проверке структуры Struts 2 с примером
- Часть 4: Руководство по плагину Struts 2 Tiles с примером
- Часть 5: Руководство по перехватчикам в Struts 2 с примером
- Часть 6: Пример загрузки файла Struts 2 и сохранения
- Часть 7: руководство по Struts 2 Ajax с примером
Struts 2 Interceptors: Основы
Struts2 предоставляет очень мощный механизм управления запросом с использованием перехватчиков. Перехватчики отвечают за большую часть обработки запросов. Они вызываются контроллером до и после вызова действия, таким образом, они находятся между контроллером и действием. Перехватчики выполняют такие задачи, как ведение журналов, проверка, загрузка файлов, защита от двойной отправки и т
. Д. Жизненный цикл обработки запросов в среде Struts2 в значительной степени обсуждается. Часть 1. Введение в Struts2 Framework .
- Запрос генерируется пользователем и отправляется в контейнер сервлета.
- Контейнер сервлетов вызывает фильтр FilterDispatcher, который, в свою очередь, определяет соответствующее действие.
- Один за другим перехватчики применяются перед вызовом действия. Перехватчики выполняют такие задачи, как ведение журнала, проверка, загрузка файлов, защита от двойной отправки и т. Д.
- Действие выполняется, а результат генерируется действием.
- Вывод Action отображается в представлении (JSP, Velocity и т. Д.), А результат возвращается пользователю.
Таким образом, перехватчики Struts2 устраняют сквозные задачи, такие как ведение журнала из компонентов действия, и обеспечивают более четкое разделение MVC.
Struts2 поставляется со списком перехватчиков по умолчанию, уже настроенным в приложении, в файле struts-default.xml. Мы можем создать наши собственные перехватчики и подключить их к веб-приложению на основе Struts2.
Framework создает объект ActionInvocation, который инкапсулирует действие и все перехватчики, настроенные для этого действия. Каждый перехватчик вызывается до того, как вызывается действие. Как только действие вызывается и генерируется результат, каждый перехватчик снова вызывается в обратном порядке для выполнения постобработки. Перехватчики могут изменить рабочий процесс действия. Это может помешать выполнению действий.
Наша цель
Нашей целью будет создание клиентского перехватчика MyLoggingInterceptor , который будет регистрировать запрос до вызова какого-либо действия. Также будет напечатано имя класса Action и время выполнения действия в миллисекундах.
Создать перехватчик регистрации
Создайте Java-класс MyLoggingInterceptor в пакете net.viralpatel.struts2.interceptors и скопируйте в него следующий контент.
package net.viralpatel.struts2.interceptor;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;public class MyLoggingInterceptor implements Interceptor{private static final long serialVersionUID = 1L;public String intercept(ActionInvocation invocation) throws Exception {String className = invocation.getAction().getClass().getName();long startTime = System.currentTimeMillis();System.out.println("Before calling action: " + className);String result = invocation.invoke();long endTime = System.currentTimeMillis();System.out.println("After calling action: " + className+ " Time taken: " + (endTime - startTime) + " ms");return result;}public void destroy() {System.out.println("Destroying MyLoggingInterceptor...");}public void init() {System.out.println("Initializing MyLoggingInterceptor...");}}
Настройка перехватчика в struts.xml
После того, как мы создали класс-перехватчик, все, что нам нужно сделать, это настроить его в файле struts.xml и использовать его с действиями.
Чтобы настроить вновь созданный перехватчик, добавьте следующий код в struts.xml
<interceptors><interceptor name="mylogging"class="net.viralpatel.struts2.interceptor.MyLoggingInterceptor"></interceptor><interceptor-stack name="loggingStack"><interceptor-ref name="mylogging" /><interceptor-ref name="defaultStack" /></interceptor-stack></interceptors>
Этот код должен быть добавлен после тега <result-types> в <package> </ package>.
Здесь мы сконфигурировали новый журнал перехватчиков с тегом <interceptor>. Также обратите внимание, что мы определили стек-перехватчик с именем loggingStack. Это сделано для того, чтобы Sturts2 также вызывал все перехватчики по умолчанию при вызове нашего пользовательского перехватчика. Это очень важно, так как логика проверки не будет работать в нашем приложении struts2, если мы игнорируем стек перехватчиков по умолчанию.
Мы можем сделать новый loggingStack в качестве стека перехватчиков по умолчанию или настроить его на каждом уровне действий. Чтобы сделать его стеком по умолчанию, мы должны добавить следующее в struts.xml
<default-interceptor-ref name="loggingStack"></default-interceptor-ref>
Как только мы добавим приведенный выше код в Struts.xml, logginStack будет применен ко всем действиям в этом пакете.
Также мы можем захотеть применить пользовательский стек перехватчиков только к определенным действиям. Для этого мы должны добавить тег interceptor-ref в действии.
<action name="login"class="net.viralpatel.struts2.LoginAction"><interceptor-ref name="loggingStack"></interceptor-ref><result name="success" type="tiles">/welcome.tiles</result><result name="error">Login.jsp</result></action>
Это все люди
Если мы выполним наше приложение StrutsHelloWorld в Eclipse и увидим журналы консоли, мы найдем операторы журнала, которые мы печатаем в нашем перехватчике.
Initializing MyLoggingInterceptor.........Before calling action: net.viralpatel.struts2.LoginAction....After calling action: net.viralpatel.struts2.LoginAction Time taken: 313 ms......Destroying MyLoggingInterceptor...
Скачать исходный код
Нажмите здесь, чтобы загрузить исходный код без файлов JAR (17 КБ)
Двигаться дальше
Сегодня мы увидели, что такое перехватчики Struts и как создать собственный перехватчик и настроить его с помощью веб-приложения на основе Struts2. В следующей части мы увидим пример загрузки файла Struts2.