Heim > Java > javaLernprogramm > Detaillierte Einführung in den Spring MVC Interceptor

Detaillierte Einführung in den Spring MVC Interceptor

巴扎黑
Freigeben: 2017-09-08 09:43:36
Original
1377 Leute haben es durchsucht

Der Interceptor von Spring MVC befindet sich auf der HandlerMapping-Ebene. Jeder HandlerMapping kann seinen eigenen Interceptor haben.

Spring stellt uns Folgendes zur Verfügung 🎜>

org.springframework.web.servlet.HandlerInterceptor-Schnittstelle,

org.springframework.web.servlet.handler.HandlerInterceptorAdapter-Adapter,
implementieren Sie diese Schnittstelle oder erben Sie diese Klasse Sehr praktisch, um einen eigenen Abfangjäger zu implementieren.


verfügt über die folgenden drei Methoden:
Ausgeführt vor der Aktion:


Vor dem Generieren der Ansicht ausführen
 public boolean preHandle(HttpServletRequest request,
  HttpServletResponse response, Object handler);
Nach dem Login kopieren


Endgültig ausgeführt, kann zum Freigeben von Ressourcen verwendet werden
 public void postHandle(HttpServletRequest request,
  HttpServletResponse response, Object handler,
  ModelAndView modelAndView);
Nach dem Login kopieren


Implementieren Sie jeweils die Vorverarbeitung, die Nachverarbeitung (der Dienst wird aufgerufen und gibt ModelAndView zurück, aber die Seite wird nicht gerendert) und die Rückgabeverarbeitung (die Seite wurde gerendert)
 public void afterCompletion(HttpServletRequest request,
  HttpServletResponse response, Object handler, Exception ex)
Nach dem Login kopieren

In preHandle, Codierung und Sicherheit können durchgeführt werden.

In postHandle haben Sie die Möglichkeit, ModelAndView zu ändern.

In afterCompletion können Sie feststellen, ob eine Ausnahme aufgetreten ist, und diese ausführen Protokollierung basierend darauf, ob ex null ist.

Der Objekthandler im Parameter ist der nächste Interceptor.

Wie nutzt man Abfangjäger? Passen Sie einen Interceptor an und implementieren Sie die HandlerInterceptor-Schnittstelle:

Java-Code


Spring MVC tut es Sie verfügen nicht über einen vollständigen Abfangjäger und können nicht alle Anfragen davor und danach abfangen.
public class MyInteceptor implements HandlerInterceptor {   
  略。。。 
}
Nach dem Login kopieren

Der Interceptor von Spring MVC befindet sich auf der HandlerMapping-Ebene. Es können mehrere HandlerMappings vorhanden sein, und jedes HandlerMapping kann seinen eigenen Interceptor haben.

Wenn eine Anforderung die Implementierungsklassen der HandlerMapping-Schnittstelle nacheinander entsprechend dem Auftragswert von klein nach groß ausführt, je nachdem, was zuerst zurückgegeben wird, ist das nachfolgende HandlerMapping nicht beendet und dieser Vorgang ist abgeschlossen. . Fahren Sie einfach mit dem nächsten Vorgang fort.

Wann wird der Abfangjäger hingerichtet? Wenn eine Anfrage an ein HandlerMapping übergeben wird, sucht das HandlerMapping zunächst nach einem Prozessor, der die Anfrage bearbeitet. Wenn es sie findet, führt es den Interceptor aus und übergibt sie an den Zielprozessor.

Wenn kein Handler gefunden wird, wird dieser Interceptor nicht ausgeführt.

Es gibt drei Möglichkeiten, es in der Spring MVC-Konfigurationsdatei zu konfigurieren: Option 1, (ungefähr) Gesamtabfangjäger, alle URLs abfangen

Java-Code


Warum heißt es „ungefähr“? Wie bereits erwähnt, verfügt Spring nicht über einen Gesamtabfangjäger.
  <mvc:interceptors> 
  <bean class="com.app.mvc.MyInteceptor" /> 
</mvc:interceptors>
Nach dem Login kopieren

fügt für jedes HandlerMapping einen Interceptor ein. Es gibt immer ein HandlerMapping, das den Prozessor finden kann, und es kann höchstens ein Prozessor gefunden werden, sodass dieser Interceptor immer ausgeführt wird. Fungiert als totaler Abfangjäger.

<mvc:interceptors/>Wenn es sich um eine URL im REST-Stil handelt, werden auch statische Ressourcen abgefangen.


Option 2, (ungefährer) Total Interceptor, fängt übereinstimmende URLs ab.

Xml-Code


ist eine URL-Übereinstimmung mehr als Option 1.
<mvc:interceptors >  
 <mvc:interceptor>  
    <mvc:mapping path="/user/*" /> <!-- /user/* -->  
    <bean class="com.mvc.MyInteceptor"></bean>  
  </mvc:interceptor>  
</mvc:interceptors>
Nach dem Login kopieren

Wenn es sich um eine URL im REST-Stil handelt, werden auch statische Ressourcen abgefangen.


Option 3, Interceptor auf HandlerMappint.

Wenn es sich um eine URL im REST-Stil handelt, werden statische Ressourcen nicht abgefangen. Weil wir den Abfangjäger präzise injiziert haben.

Xml-Code


Wenn Sie
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">    
 <property name="interceptors">    
   <list>    
     <bean class="com.mvc.MyInteceptor"></bean>   
   </list>    
 </property>    
</bean>
Nach dem Login kopieren
verwenden, werden die beiden Beans DefaultAnnotationHandlerMapping und AnnotationMethodHandlerAdapter automatisch registriert, sodass keine Chance besteht um es noch einmal zu geben Es fügt das Interceptors-Attribut ein, sodass der Interceptor nicht angegeben werden kann.

<mvc:annotation-driven />, Natürlich können wir die beiden oben genannten Beans manuell konfigurieren, ohne <mvc:annotation-driven /> zu verwenden, und dann Interceptoren in das Interceptors-Attribut einfügen.


Tatsächlich empfehle ich nicht die Verwendung von

, sondern stattdessen das manuelle Schreiben detaillierter Konfigurationsdateien anstelle von

, was Ihnen eine bessere Kontrolle gibt. Wie ersetze ich <mvc:annotation-driven />,<mvc:annotation-driven /> durch

? Was genau hat er gemacht?

<mvc:annotation-driven />Ein Satz

hat tatsächlich die folgende Arbeit geleistet: (ohne das Hinzufügen Ihres eigenen definierten Interceptors)

<mvc:annotation-driven />Nachdem wir diese verstanden haben, haben wir mehr Kontrolle über Spring3 MVC und möchten es überall ändern Du gehst.

Xml-Code



Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den Spring MVC Interceptor. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage