Перехватчик перехватчика в SpringMVC также очень важен и полезен. Его основная функция - перехват пользовательских запросов и выполнение соответствующей обработки. Например, он может выполнить проверку разрешений или определить, входит ли пользователь в систему, или определить, является ли текущее время времени покупки билета, например, 12306.
1. Определите класс реализации Interceptor
Запросы перехвата перехвата в SpringMVC реализованы через HandlerInterceptor. Определить перехватчик в SpringMVC очень проста. Есть два основных способа. Первым способом является определение класса Interceptor, который реализует интерфейс Spring Handlerinterceptor, или этот класс наследует класс, который реализует интерфейс Handlerinterceptor, такой как абстрактный класс, который предоставил пружина, который реализует интерфейс HandlerInterceptor, который уже предоставляется Spring; Второй способ - реализовать интерфейс Spring WebRequestInterceptor или наследовать класс, который реализует интерфейс WebRequestInterceptor.
(I) реализация интерфейса Handlerinterceptor
В интерфейсе HandlerIntercepter определены три метода, и мы используем эти три метода для перехвата пользовательских запросов.
(1) Prehandle (httpservlectrequest, метод httpservletresponse, ручка объекта), как следует из названия, будет вызван до обработки запроса. Interceptor в SpringMVC называется в форме цепи. Несколько перехватчиков могут существовать одновременно в приложении или в запросе. Каждый вызов перехватчика будет выполняться в последовательности в соответствии с его распоряжением об объявлении, и первые из них выполняются,-это метод Prehandle в перехватчике, поэтому в этом методе могут быть выполнены некоторые операции предварительной инициализации или предварительно обработать текущий запрос, или некоторые суждения могут быть сделаны в этом методе, чтобы решить, должен ли этот запрос продолжаться.
Возвращаемое значение этого метода имеет логический тип Boolean. Когда он возвращается к FALSE, это означает, что запрос заканчивается, а последующий перехватчик и контроллер больше не будут выполнены; Когда возвращаемое значение верно, метод Prehandle следующего перехватчика будет по -прежнему называться. Если это уже последний перехватчик, будет вызван метод контроллера текущего запроса.
(2) Posthandle (httpservlectrequest, метод ответа httpservletresponse, ModelAndView ModelAndView). Из объяснения метода Prehandle мы знаем, что этот метод, включая метод последствия, который должен быть упомянут позже, может быть вызван только тогда, когда возвращаемое значение метода Prehandle текущего перехватчика является истинной.
Метод Posthandle, как следует из названия, выполняется после обработки текущего запроса, то есть после того, как метод контроллера будет вызван, но он будет вызван до возврата DispatcherServlet и отображает представление, поэтому мы можем работать на объекте ModelandView после процесса контроллера в этом методе. Направление вызовов метода постхандле является противоположностью Prehandle, что означает, что поставский метод перехватчика, объявленного первым, будет выполнен позже, что несколько похоже на процесс выполнения перехватчика в Struts2. Процесс выполнения перехватчика в StrutS2 также прикован, но в Struts2 метод ActionInvocation должен быть вызван вручную, чтобы вызвать призыв к следующему перехватчику или действию. Затем содержимое в каждом перехватчике до метода Invoke будет выполнено в объявленном порядке, а содержимое после метода Invoke будет изменен.
(3) Последствия (запрос httpservlectrequest, метод httpservletresponse, метод обработки объекта, Exception Ex), этот метод должен быть выполнен, когда возвращаемое значение текущего метода предварительного перехватчика является истинной. Как следует из названия, этот метод будет выполнен после завершения всего запроса, то есть после того, как диспетчер ведут соответствующий представление. Основная функция этого метода - очистить ресурсы.
Вот простое описание кода:
Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; Импорт org.springframework.web.servlet.handlerinterceptor; Импорт org.springframework.web.servlet.modelandView; Public Class Springmvcinterceptor реализует HandlerInterceptor { /*** Метод Prehandle используется для перехвата процессора. Как следует из названия, этот метод будет вызван до процесса контроллера. Перехватчик перехватчика в SpringMVC прикован, и несколько перехватчиков могут существовать одновременно. Затем SpringMVC выполнит один за другим в соответствии с порядком объявления, и все методы Prehandle в перехватчике будут вызваны до того, как будет вызван метод контроллера. Структура цепи перехвата SpringMVC также может быть прервана. Этот метод прерывания делает возвращаемое значение Prehandle в False. Когда возвращаемое значение Prehandle является ложным, весь запрос заканчивается. */ @Override public boolean prehandle (httpservletrequest, httpservletresponse, обработчик объекта) бросает исключение {// } /*** Этот метод будет выполнен только тогда, когда текущее возвращаемое значение метода Prehandle перехватчика верно. Posthandle используется для перехвата процессора. Его время выполнения происходит после обработки процессора*, то есть после того, как метод контроллера будет вызван, но он будет выполнен до того, как диспетчер вернут представление, что означает, что в этом методе вы можете управлять моделью и обзор*. Структура цепи этого метода является противоположностью нормального направления доступа, то есть провозглашенный метод, сначала будет вызван позже. Это немного похоже на процесс выполнения перехватчика в Struts2. * Только в методе перехвата в Struts2 метод ActionInvocation должен быть вызван вручную. Метод ActionInvocation в Struts2 заключается в том, чтобы вызвать следующего перехватчика * или вызвать действие, а затем содержимое, которое необходимо вызвать перед перехватчиком, записано перед вызовом к вызову, и содержимое, которое необходимо вызвать после того, как перехватчик записывается после вызова к методу вызывающего. * / @Override public void poshandle (httpservletRequest, httpservletresponse, обработчик объекта, ModelandView ModelandView) выбрасывает исключение {// TODO Auto Generated Method Stub} / *** Этот метод также должен быть выполнен, когда возвращаемое значение соответствующего соответствующего метода предварительного перехвата. Этот метод будет выполнен после того, как весь запрос будет выполнен, то есть DispatcherServlet делает выполнение представления. * Основная функция этого метода - очистить ресурсы. Конечно, этот метод может быть выполнен только тогда, когда текущее возвратное значение метода Prehandle перехватчика верно. */ @Override public void-последствия (запрос httpservlectrequest, httpservletresponse, обработчик объекта, исключение Ex), бросает исключение {// todo автоматическое сгенерированное метод}}}}}}}}} (Ii) Реализовать интерфейс WebRequestInterceptor
Есть также три метода, определенные в WebRequestInterceptor, и мы также используем эти три метода для реализации перехвата. Все три метода передают один и тот же параметр webRequest, так что же это за WebRequest? Этот WebRequest - интерфейс, определяемый Spring. Определения метода в нем в основном такие же, как httpservletrequest. Все операции, выполненные на WebRequestInterceptor в WebRequestInterceptor, будут синхронизированы с HttpservletRequest, а затем переданы в текущем запросе.
(1) Метод Prehandle (запрос WebRequest). Этот метод будет вызван до обработки запроса, то есть он будет вызван до вызова метода контроллера. Этот метод отличается от Prehandle в Handlerinterceptor. Основное отличие состоит в том, что возвращаемое значение метода является недействительным, что означает, что нет возврата. Поэтому мы обычно используем его для подготовки ресурсов. Например, когда мы используем Hibernate, мы можем подготовить объект сеанса Hibernate в этом методе, а затем использовать SetatTribute (имя, значение, объем) WebRequest, чтобы поместить его в свойство WebRequest. Здесь мы можем поговорить о третьем объеме параметра метода SetAttribute, который имеет целочисленный тип. Три константа определены для интерфейса родительского уровня WebRequest requestTributes:
Scope_Request: его значение равно 0, что означает, что оно доступно только в запросе.
Scope_session: его значение составляет 1. Если среда позволяет это, она представляет локальный изолированный сеанс, в противном случае она представляет собой нормальный сеанс и может быть доступен в рамках сеанса.
Scope_global_session: его значение составляет 2. Если среда позволяет это, она представляет глобально общий сеанс, в противном случае она представляет собой обычный сеанс и может быть доступен в рамках сеанса.
(2) Метод Posthandle (запрос WebRequest, ModelMap Model). Этот метод будет вызван после обработки запроса, то есть после того, как метод контроллера будет вызван, но будет вызван до того, как будет отображаться возвраты представления, поэтому вы можете изменить отображение данных, изменяя модель данных модели данных в этом методе. Этот метод имеет два параметра. Объект WebRequest используется для передачи всех данных запроса. Например, данные, полученные в Prehandle, могут быть переданы и доступны через WebRequest; ModelMap - это объект модели, возвращаемый после процесса контроллера. Мы можем изменить возвращенную модель модели, изменив ее свойства.
(3) Последствия (WebRequest запрос, Exception Ex) Метод. Этот метод будет выполнен после того, как весь запрос будет обработан, то есть после возврата и отображения представления. Следовательно, в этом методе можно выполнить операцию выпуска ресурса. Параметр WebRequest может передать ресурсы, которые мы подготовили в Prehandle здесь для выпуска. Параметр исключения представляет объект запрашиваемого исключения в настоящее время. Если исключение, добавленное в контроллер, было обработано процессором исключений Spring, то объект исключения является нулевым.
Вот простое описание кода:
Импорт org.springframework.ui.modelmap; Import org.springframework.web.context.request.webrequest; Импорт org.springframework.web.context.request.webrequestinterceptor; Общедоступный класс Allinterceptor реализует WebRequestInterceptor { /*** Выполнить до обработки запроса. Этот метод в основном используется для подготовки данных ресурсов, а затем их можно помещать в WebRequest в качестве атрибутов запроса*/ @override public void prehandle (запрос WebRequest), выброшенное исключение {// todo Автогенерированный метод System.out.println («Allinterceptor ..................»); request.setAttribute («запрос», «запрос», webRequest.scope_request); // Это помещается в объем запроса, поэтому вы можете получить только request.setattribute («Session», «Session», в запросе в текущем запросе. WebRequest.Scope_Session); // Это размещено в сессии. Если среда позволяет это, к ней можно получить доступ только в локально изолированном сеансе. В противном случае, к нему можно получить доступ в обычном сеансе тока. Request.setattribute ("Globalsession", "Globalsession", WebRequest.scope_global_session); // Если среда позволяет это, к ней можно получить доступ в глобально общем сеансе, в противном случае его можно получить в обычном сеансе текущего. ModelMap представляет объект модели, возвращаемый после того, как контроллер запрошен для обработки контроллера, поэтому в этом методе могут быть изменены свойства модели Model для достижения эффекта изменения возвращенной модели. */ @Override public void poshandle (запрос WebRequest, ModelMap Map) Throws Exception {// TODO Auto Generated Method Stub для (String Key: map.keyset ()) System.out.println (Key + "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- AfterComplotion (запрос WebRequest, исключение исключения), выбросит исключение {// TODO AutoGenated Method System.out.println (Exception + "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= "); }}2. Добавьте определенный класс перехвата в систему перехвата Springmvc
1. Добавьте схему, которая поддерживает MVC в файле конфигурации SpringMVC
xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemalocation = "http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd "
Вот пример моего утверждения:
<Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-insstance" xmlns: context = "http://wwww.spramemema" xmlns: "http://www.spramema. xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.spramework.org/schema/beans.3. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd ">
Таким образом, вы можете использовать тег MVC в файле конфигурации SpringMVC. В тег MVC есть MVC: перехватыватели, которая используется для объявления перехвата SpringMVC.
(Ii) Используйте метку MVC: Interceptors, чтобы объявить перехватчик, который необходимо добавить в цепь перехватчика SpringMVC
<MVC: Interceptors> <!- Используйте Bean, чтобы определить перехватчик. Перехватчик, непосредственно определенный в корне MVC: Interceptors будет перехватывать все запросы-> <Bean/> <MVC: Interceptor> <MVC: PATH mapping = "/test/number.do"/> <!-Представление, определенное в MVC: Interceptor-это специфический запрос-> <bean/> </mvc: interceptor> </mvcc: mvcc: </mvc: </mvc: </mvc: </mvc: </mvc:> </mvc: </mvc: </mvc: </mvc:
Из приведенного выше примера мы видим, что серия перехватчиков может быть объявлена с использованием тега MVC: Interceptors, а затем они могут сформировать цепь перехватчиков. Порядок выполнения перехватчика выполняется в порядке объявлений. Сначала будет выполнен метод Prehandle в объявленном перехватчике, но его метод и метод последствия для поклонности будет выполнен позже.
Существует два основных способа объявления перехватчика в соответствии с меткой MVC: Interceptors:
(1) Непосредственно определить объект бобов класса реализации перехватчика. Interceptor Interceptor, объявленный таким образом, будет перехватывать все запросы.
(2) Используйте тег MVC: Interceptor, чтобы объявить. Interceptor, объявленный таким образом, может определить путь запроса, который необходимо перехватить через подтхт MVC: отображение.
После двух вышеупомянутых шагов определенный перехватчик будет действовать для перехвата конкретных запросов.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.