[JAVA] Verstehen Sie den groben Fluss von der Anforderung zur Antwort in SpringWebMVC

Bei der Verwendung von Spring hatte ich oft große Probleme, wenn ich den Verarbeitungsablauf bis zu einem gewissen Grad nicht verstand. Daher werde ich den Inhalt des Lesens der Quelle als mein eigenes Memo zusammenfassen.

DispatcherServlet Alle Anfragen führen die Verarbeitung dieses Servlets durch. Um den Ablauf der Verarbeitung zu verfolgen, sollten Sie sich die Quelle der doService-Methode ansehen.

Damit dieses Servlet die nachfolgende Verarbeitung (Controller usw.) aufruft oder eine Antwort mit JSP usw. generiert. Sie benötigen die folgenden Bohnen.

Der allgemeine Verarbeitungsablauf ist wie folgt.

  1. Verwenden Sie HandlerMapping, um die nachfolgende Verarbeitung aus der Anforderung abzurufen.
  2. Verwenden Sie den HandlerAdapter, um den in 1 erfassten Prozess auszuführen. 3-1. Wenn beim Ausführen von Prozess 2 keine Ausnahme auftritt, verwenden Sie ViewResolver, um eine Ansicht aus dem Prozessergebnis von 2 abzurufen und den Zeichenprozess auszuführen. 3-2. Wenn eine Ausnahme als Ergebnis der Ausführung von Prozess 2 auftritt, erfassen Sie die Methode, die die in HandlerExceptionResolver aufgetretene Ausnahme behandelt, und führen Sie sie aus.

HandlerMapping Verwenden Sie die Methode getHandle, um die nachfolgende Verarbeitung aus der Anforderung abzurufen und die HandlerExecutionChain zurückzugeben. Die HandlerExecutionChain kann nicht nur den Handler (nachfolgende Controller-Methode), sondern auch mehrere Interceptors enthalten. DispatcherServlet verwendet diese HandlerExecutionChain, um Interceptor und Handler auszuführen.

Die am häufigsten verwendete Klasse zum Implementieren dieser Schnittstelle ist die RequestMappingHanlderMapping-Klasse. Diese Klasse verbindet Anforderungen und Prozesse basierend auf dem Inhalt von @ RequestMapping der Controller-Klasse.

HandlerAdapter Adatpter-Klasse zum Ausführen des von HandlerMapping erhaltenen Handlers. Verarbeitet gut vor und nach der Handlerausführung. (Grob)

Eine Klasse, die häufig zum Implementieren dieser Schnittstelle verwendet wird, ist die RequestMappingHandlerAdapter-Klasse. Es speichert Anforderungsparameter in einem Objekt, validiert es und generiert eine ModelAndView aus dem Rückgabewert eines Handlers. (Genau genommen wird die Verarbeitung an HandlerMethodArgumentResolver und HandlerMethodReturnValueHandler delegiert.)

HandlerExceptionResolver Wenn eine Ausnahme auftritt, wird die Ausnahme mit der nachfolgenden Verarbeitung verbunden.

Eine Klasse, die häufig zum Implementieren dieser Schnittstelle verwendet wird, ist die ExceptionHandlerExceptionResolver-Klasse. Methoden mit @ ExceptionHandler in Contoller oder ControllerAdvice werden von dieser Klasse ausgeführt. Übrigens, wie Sie anhand des Inhalts sehen können, hat die Controller-Seite Priorität, wenn der Controller und das ControllerAdvice über "@ ExceptionHandler" verfügen, der dieselbe Ausnahme behandelt.

ViewResolver Sie können die View-Klasse von ViewName abrufen.

Eine Klasse, die häufig zum Implementieren dieser Schnittstelle verwendet wird, ist die InternalResourceViewResolver-Klasse. Diese Klasse kann JstlView zum Zeichnen von JSP aus ViewName abrufen. Wenn der ViewName das Präfix "redirect:" hat, wird eine RedirectView für die Weiterleitungsverarbeitung generiert.

LocaleResolver Es scheint, dass Sie das Gebietsschema aus der Anfrage erhalten können. Ich habe es noch nicht verwendet, daher kenne ich die Details nicht. Wenn Sie jedoch SessionLocaleResolver verwenden, können Sie Gebietsschemainformationen in Sitzung speichern, sodass Sie das Gebietsschema anscheinend für jeden Benutzer verwalten können.

ThemeResolver Es scheint, dass Sie Theme von der Anfrage erhalten können. Ich habe Spring's Theme überhaupt nicht verwendet, daher kenne ich die Details nicht. ..

MultipartResolver Eine Schnittstelle zum Generieren einer mehrteiligen Datei aus einer mehrteiligen / Formulardatenanforderung. Wenn Sie Funktionen wie das Hochladen von Dateien benötigen, müssen Sie diesen Resolver als Bean definieren.

FlashMapManager Eine Schnittstelle zum Verwalten von FlashScope. FlashScope ist ein Bereich zum Speichern von Werten bis zum Umleitungsziel. Normalerweise wird SessionFlashMapManager verwendet und FlashScope wird mithilfe von Session realisiert. Ich habe hier über den Mechanismus geschrieben, also beziehen Sie sich bitte darauf, wenn Sie möchten. Übergeben Sie den Wert an das Umleitungsziel, ohne Umleitungsattribute in Spring MVC zu verwenden

Recommended Posts

Verstehen Sie den groben Fluss von der Anforderung zur Antwort in SpringWebMVC
Bestätigung und Umgestaltung des Flusses von der Anfrage zum Controller in [httpclient]
Ich möchte den Ablauf der Spring-Verarbeitungsanforderungsparameter verstehen
Java-Referenz zum Verständnis in der Abbildung
Tokoro habe ich in der Migration von Wicket 7 auf 8 umgeschrieben
Verstehen Sie die Eigenschaften von Scala in 5 Minuten (Einführung in Scala)
In der Abbildung verstandene Java-Klassen und -Instanzen
So ermitteln Sie die Prefetch-Anforderung (Prefetch) im Browser
Ändern Sie die Spring Boot REST API-Anforderung / Antwort von CamelCase in SankeCase
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
[Android] Ich möchte den Listener über die Schaltfläche in ListView abrufen
Übergeben Sie das Gebietsschema i18n an JavaScript
[java8] Um die Stream-API zu verstehen
Der Weg von JavaScript nach Java
So erhalten Sie den Einstellungswert (Eigenschaftswert) aus der Datenbank in Spring Framework
[Rails] Artikel für Anfänger, um den Fluss von form_with zu organisieren und zu verstehen
Was ist CHECKSTYLE: OFF in der Java-Quelle? Checkstyle zu wissen von
Kürzen Sie die UUID in Swift auf base64.
Untersuchen Sie den Ersatz von Docker zu Podman.
Konvertieren Sie Anforderungsparameter im Frühjahr in Enum
[Ruby] Von den Grundlagen bis zur Injektionsmethode
Antwortdaten direkt im Frühjahr schreiben
[Java] Fluss vom Quellcode zur Ausführung
So erhalten Sie das Datum mit Java
Verstehe in 5 Minuten !! Wie man Docker benutzt
03. Ich habe eine Anfrage von Spring Boot an die Postleitzahlensuch-API gesendet
Was ist ... (3 Punkte) in der Java-Quelle gefunden? Argument mit variabler Länge, von dem man wissen muss