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);
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!