Heim  >  Artikel  >  Java  >  Ausführungsschritte nach dem Start des Spring MVC-Projekts (mit schematischer Darstellung)

Ausführungsschritte nach dem Start des Spring MVC-Projekts (mit schematischer Darstellung)

不言
不言Original
2018-09-19 14:23:364214Durchsuche

Der Inhalt dieses Artikels befasst sich mit den Ausführungsschritten nach dem Start des Spring MVC-Projekts (mit schematischem Diagramm). Ich hoffe, dass er für Sie hilfreich ist.

Ausführungsprozess nach dem Start des Spring MVC-Projekts:

1. Wenn das Webprojekt gestartet wird, laden Sie die Datei web.xml, einschließlich die Kernkonfigurationsdatei

Da der Kerncontroller von mvc in der Datei web.xml festgelegt ist, wird dieser Controller initialisiert

02 Der Anforderungspfad des Benutzers lautet beispielsweise localhost:8080/. hallo

Zu diesem Zeitpunkt wird /hello als Anforderungspfad betrachtet ====> Die Bean-ID in der Kernkonfigurationsdatei

03./hello wird vom Kerncontroller abgefangen und gehen Sie zum Handler-Mapper (HandlerMapping)

04 Die unterste Ebene findet zuerst das entsprechende HandlerMapping und gibt dann eine Prozessor-Ausführungskette zurück (HandlerExecutionChain)

05 das gerade ausgeführt wird und (1-N Interceptor)

06. HandlerAdapter entsprechend dem Handler der Prozessorausführungskette

07 Unser Controller

08. Nach dem Ausführen der Methode muss ein ModleAndView zurückgegeben werden

Modle ==》Map

View ==》String

09 Wenn der Ansichtsparser festgelegt ist, wird die Ansicht ausgeführt. Der Ansichtsname

hat keinen Ansichtsparser und wird ausgeführt. Die Ansicht muss ein sein Name der physischen Ansicht

Schema:

2. Sehen Sie sich den zugrunde liegenden Code an

01. Klicken Sie auf den Kerncontroller in der Datei web.xml

02. Suchen Sie die entsprechende Methode doDispatch

03 der folgende Code

protected void doDispatch(HttpServletRequest request, HttpServletResponse response)
HttpServletRequest processedRequest = request;  //请求对象
HandlerExecutionChain mappedHandler = null;  
//处理器执行链=我们即将执行的Controller+(1+拦截器)
boolean multipartRequestParsed = false;
//解析一个请求是否是文件上传请求

Suchen Sie den Handler (Controller), der gemäß unserer Anfrage ausgeführt werden muss

Strg+linke Maustaste klicken Sie auf getHandler()

und stellen Sie fest, dass der Rückgabewert dieser Methode ist eine Prozessor-Ausführungskette!

05. Suchen Sie nach der Eingabe von getHandler den folgenden Code:

 // Determine handler for the current request.  mappedHandler = getHandler(processedRequest);

06. Geben Sie weiterhin hm.getHandler(request) ein.

Nach der Eingabe werden Sie feststellen, dass es sich um diese Methode handelt eine Schnittstelle (Es gibt keine Methode zum Implementieren der Methode in HandlerMapping), also klicken Sie weiter auf die Implementierungsklasse AbstractHandlerMapping

07. Suchen Sie den folgenden Code und unterbrechen Sie den Punkt

HandlerExecutionChain handler = hm.getHandler(request);

08 Es wird festgestellt, dass der erhaltene Prozessor ausgeführt wird. Die Kette gibt unserem Kerncontroller

Object handler = getHandlerInternal(request);

und klickt auf getHandlerAdapter()

09. Suchen Sie den Haltepunkt des Codes unten

 // Determine handler adapter for the current request.  
 HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());

10. Klicken Sie dann auf „supports()“

. Es wurden 5 Implementierungsklassen gefunden

Aber der von uns geschriebene HelloController hat die Controller-Schnittstelle indirekt implementiert, sodass wir nur den Punkt in SimpleControllerHandlerAdapter brechen müssen!

12. Geben Sie den erhaltenen HandlerAdapter an den Kerncontroller zurück

13 Mit dem Prozessoradapter im Kerncontroller besteht der nächste Schritt darin, den echten Code auszuführen

 if (ha.supports(handler)) {
     return ha;
     }

14 . Klicken Sie auf handle

 // Actually invoke the handler.  
 mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

15. Klicken Sie auf handleRequest

, um den AbstractController aufzurufen.

Diese übergeordnete Klasse führt handleRequestInternal(Anfrage, Antwort) aus.

16. Klicken Sie auf handleRequestInternal

, um unsere Implementierungsklasse zu finden

@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
   return ((Controller) handler).handleRequest(request, response);
}

Das obige ist der detaillierte Inhalt vonAusführungsschritte nach dem Start des Spring MVC-Projekts (mit schematischer Darstellung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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