Предисловие
Система перехвата является важной частью структуры Struts2. Это не преувеличение, чтобы сказать, что без системы перехватчиков не будет такой простой в использовании структуры Struts2. В рамках Struts2 большое количество перехватчиков завершило много основных функций. Например, Params Interceptor отвечает за анализ параметров HTTP -запросов и установку свойств действия; Перехватчик сервис-конфигурации напрямую передает экземпляр httpservletrequest и экземпляр Httpservletresponse в http-запросе на действие; Inceptor Fileupload отвечает за анализ файлового домена в параметрах запроса и настройку домена файла на три свойства действия ... все это выполняется встроенным перехватчиком. Поэтому, освоив принципы и методы использования перехватчиков в Struts2, мы можем понять «спасательный круг» структуры Struts2.
Однако до сих пор, помимо настройки фильтра StrutSpreArandDexecutefilter в web.xml, мы еще не связались с какими -либо другими перехватчиками. Так почему же наше приложение может хорошо работать? Фактически, Struts2 позволил по умолчанию большое количество общих перехватчиков. Эти перехватчики будут работать до тех пор, пока пакет, настроенный на действие, наследует пакет Defuls-Defauls. Давайте посмотрим на встроенный перехватчик Struts2.
Struts2 встроенный перехватчик
В рамках Struts2 есть много встроенных перехватчиков. Эти перехватчики практически завершают 70% работы структуры Struts2, включая параметры запроса на анализ, присвоение параметров запроса атрибутам действия и т. Д. Умный дизайн Struts2 в значительной степени обусловлен проектом перехватчика; Когда необходимо расширить функцию Struts2, вам нужно только предоставить соответствующий перехватчик и настроить ее в контейнере Struts2.
Эти встроенные перехватчики настроены в файле struts-default.xml в форме пар имени класса, где имя является именем перехватчика, который является уникальным идентификатором перехватчика, который будет использоваться позже; Класс указывает класс реализации перехватчика. Для получения подробного описания этих встроенных перехватчиков, пожалуйста, обратитесь к официальной документации.
Настройте перехватчик
Определение перехватчика в файле struts.xml требует указания имени перехватчика для класса перехватчика, и определение перехвата завершено. Определите перехватчик с помощью <receptor .../>, например:
<!-Определите перехватчик, указав имя Interceptor и класс реализации Interceptor-> <name Interceptor = "Имя перехвата"> <param name = "param name"> value param </param> </receptor>
Кроме того, несколько перехватчиков могут быть соединены вместе, чтобы сформировать стек перехватчиков, а <receptor-ref .../> используется в перехватчике для определения ссылки на перехватчика. Например:
<receptor-stack name = "stack stach one one"> <receptor-ref name = "interceptor One"/> <interceptor-ref name = "receptor two"/> ... </receptor-stack>
С точки зрения структуры программы, стек перехватчиков состоит из нескольких перехватчиков; Но с точки зрения программной функции, стек и перехватчик перехватчиков одинаковы, а методы, которые они содержат, будут автоматически выполняться до выполнения метода выполнения действия. Поэтому мы можем полностью рассматривать стек перехватчиков как больший перехватчик.
Поскольку стек перехватчиков и перехватчик согласованы, стек перехватчиков также может содержать стек перехватчиков, например:
<receptor-stack name = "stack stack 2"> <receptor-ref name = "modeldriven"/> <interceptor-ref name = "interceptor Stack 1"/> </receptor-Stack>
Используя перехватчик
Как только стек и перехватчик перехватчиков определены, этот стек или перехватчик перехватчиков может использоваться для перехвата действия. Поведение перехвата перехвата будет выполнено до выполнения действия.
Используя элемент <receptor-ref .../>, синтаксис конфигурации использования перехватчика в действии точно такой же, как и синтаксис ссылки на перехватчик при настройке стека перехватчика. Например:
<name = "login"> <name = "ruct =">/error.jsp </result> <name = "успех">/wellwer.jsp </result> <!-Stack Interceptor-> <interceptor-ref name = "defaultstack"/> <!-Interceptor-ref name = "test1"/> <!-Interceptor с параметрами-nemptor-name name "/> extemptor <! name = "key"> динамические параметры </param> </receptor-ref> </action>
После завершения этой конфигурации эти три перехватчика будут работать до выполнения загрузки.
Настройте перехватчик по умолчанию
При настройке пакета он может быть указан с помощью перехватчика по умолчанию. Как только перехватчик по умолчанию будет указан для пакета, перехватчик по умолчанию будет работать, если действие в этом пакете не указывает явно перехватчик. Однако, как только мы явно применим перехватчик к действию в пакете, перехватчик по умолчанию не будет работать; Если действие требует использования перехватчика по умолчанию, вы должны вручную настроить ссылку на перехватчик.
Перехватчик по умолчанию для пакета, в котором находится действие, вступит в силу, только если в действии не будет явно применяться.
Настройте перехватчик по умолчанию для использования элемента <interceptor-ref .../>, который используется в качестве ребенка элемента <пакета .../>, и настройте перехватчик по умолчанию для всех действий в этом пакете. Например:
<interceptor-ref name = "Interceptor"/>
Вы также можете указать параметры для перехватчика по умолчанию, например:
<interceptor-ref name = "interceptor-ref name =" interceptor "> <param name =" name "> значение параметра </param> </default-interceptor-ref>
В файле struts-default.xml настроен абстрактный пакет с именем Struts-Default, в котором определяется ссылка на перехватчик по умолчанию с именем DefaultStack. Когда пакет мы определяем наследие пакета-пакета-градуса, он также наследует свой стек перехватчиков по умолчанию: DefaultStack, что также означает, что если мы не применяем перехватчик для действия, стек перехватчика DefaultStack вступит в силу автоматически.
Пользовательский перехватчик
1>. Добавьте класс, чтобы наследовать класс Abstractinterceptor или реализовать интерфейс Interceptor
Public Class TimeInterceptor Extrans AbstractInterceptor {/*** Обратное значение основного метода перехвата-это строка*/@переопределяемый перехват строки (actionInvocation invocation), выдвигает исключение {// todo Автогенерированный метод stubreturn "login";}}2>. Добавить дочерний узел перехватчиков в пакете struts.xml и добавить узел перехватчика под ним
<name пакета = "Goald" namespace = "/goord" extends = "common-pkg"> <Interceptors> <ineceptor name = "timeInterceptor"> </receptor> </receptors> </package>
3>.. Адд детского узла перехватчик-реф под узелом действия, который вы хотите перехватить
<name = "list_category" method = "list"> <receptor-ref name = "timeInterceptor"> </receptor-ref> <result name = "list" type = "Dispatcher">/pages/catelector/list.jsp </result> </action>
Суммировать
В этой статье представлена предварительная резюме ядра Stuts2 - перехватчика. В последующей статье мы будем реализовать нашего собственного перехватчика и применять точки знаний, обобщенные в этой статье.
Хорошо, вышеупомянутое содержимое этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.