AbstractHandhermaping implementiert den Gethandler
1. Geben Sie die GetHandlerinternale Vorlagenmethode zur Implementierung von Unterklassen an
2. Wenn der Handler nicht erhalten wird, wird der Standard -DefaultHandler verwendet.
3. Wenn der Handler vom Typ String ist, erhalten Sie die Instanz aus dem Kontext
V.
// AbstractHandlermaping/*** Suchen Sie nach einem Handler nach der angegebenen Anfrage und fällt auf den Standard -Handler zurück, wenn kein spezifischer gefunden wird. GetHandlerinternal (Request); if (Handler == null) {Handler = getDefaultHandler ();} if (Handler == null) {return null;} // Bean -Name oder gelöstes Handler? if (Handler Instance von String) {String Handlername = (String). GetHandRerexexecutionChain (Handler, Anfrage);} // AbstractHandlermaping/*** Erstellen Sie eine HandlexexexexexexexcutionChain für den angegebenen Handler, einschließlich anwendbarer Interceptors. URL. Unterklassen können dies* überschreiben, um die Liste der Interceptors zu erweitern/neu zu ordnen. Diese Methode sollte diese beiden Fälle explizit behandeln,* entweder einen neuen HandleExexexexcutionChain oder die vorhandene Kette erweitern. null})* @param request current HTTP request* @return the HandlerExecutionChain (never {@code null})* @see #getAdaptedInterceptors()*/protected HandlerExecutionChain getHandlerExecutionChain(Object handler, HttpServletRequest request) {HandlerExecutionChain chain =(handler instanceof HandlexexexexexexcutionChain) Handler: Neue HandlexexexexexcutionChain (Handler); ketten.addinterceptors (getAdAtAtTEnterceptors ()); String -Lookuppath = urlpathHelper.getLookuppathForRequest (Request); für (MattedInterceptor MaptingInterceptor: MattedInterceptors) {if (mapPedInterceptor.Matches (Lookuppath, PathMather) {{CHACKS.AdDInterce.} {caintor.adDinterceptor (mappedinterceptor (mappercedinterceptor) (mappedDinterceptor (mappedizes} (ashinterceptor Kette;} Schauen Sie sich als nächstes die von AbstracturlHandlermaping implementiertes GethandLinternal an
// AbstracturlHandlermaping/*** Suchen Sie nach einem Handler nach dem URL -Pfad der angegebenen Anforderung. getUrlpathHelper (). getlookuppathforRequest (Anfrage); // find HandlerObject Handler = LookupHandler (Lookuppath, Anfrage); Wenn (Handler == NULL) {// Wenn es keine Übereinstimmung mit dem Handler gibt, müssen Sie die Standardeinstellung finden. zum // path_within_handler_mapping_attribute auch dafür entdecken. Handler? if (rawHandlerinstanz von String) {String Handlername = (String) RawHandler; RawHandler = getApplicationContext (). getBean (Handlername);} // Die reservierte Verifizierungshandler -Vorlagemethode verwendet ValidateHandler (Rawhandler). Lookuppath, null);}} if (Handler! Handler;} // AbstracturlHandlermaping/*** Suchen Sie nach einer Handlerinstanz für den angegebenen URL-Pfad. Weitere Informationen finden Sie in der AntathMatcher -Klasse. @see org.springframework.util.antpathMatcher*/Protected Object LookupHandler (String urlPath, httpServletRequest -Anforderung) löst eine Ausnahme aus {// Direct Match? Suchen Sie direkt HandlerObject Handler = this.Handlermap.get (urlPath); if (Handler! URLPATH, URLPATH, NULL);} // Musterübereinstimmung? Durch die Übereinstimmung durch Ausdrücke wird durch AntathMatcher implementiert. Die spezifische Analyse finden Sie unten die Liste <string> MatchingPatterns = new ArrayList <string> (); für (String registriertePattern: this.Handlermap.keyset ()) {if (getPathMatcher (). Match (registriertPattern, urlPath)) {MatchingPatterns.Add (registriertPattern);}} String Bestpatternmatch = null; Vergleiche <string> mustercomator = getPathMatherer (). if (! MatchingPatterns.isempty ()) {collections.sort (MatchingPatterns, MusterComparator); if (logger.isdebugenabled ()) {logger.debug ("Matching -Muster für Anforderung [" + urlpath + "] sind" + MatchingPatterns); MatchingPatterns.get ();} if (BestPatternMatch! pathwithinmapping = getPathMatcher (). ExtractPathWitHinPattern (BestPatternMatch, UrlPath); // Es gibt möglicherweise mehrere 'beste Muster', stellen wir sicher, dass wir die richtigen URI -Vorlagenvariablen für alle THEMAP <string, String> uriTemplateVariable = New LinkedHashMap <String, String> () () (). für (String MatchingPattern: MatchingPatterns) {if (musterComparator.comPare (BestPatternMatch, MatchingPattern) ==) {MAP <STRING, STRING> VARS = GetPatPheSther (). ExtracturItemplateVariable (MatchingPattern, URLATEL). vars); UritemplateVariables.putall (decodedVars);}} if (logger.isdebugenabled ()) {logger.debug ("URI -Vorlagenvariablen für Anforderung [" + urlPath + "] sind" + uritemplateVariable); UritemplateVariables);} // Kein Handler gefunden ... NULL zurückgeben;} Entworfen, um Handler zu überprüfen, wird nichts unternommen, einschließlich Unterklassen.
/*** Validieren Sie den angegebenen Handler gegen die aktuelle Anfrage.* <p> Die Standardimplementierung ist leer. Kann in Unterklassen überschrieben werden,* beispielsweise, um bestimmte Voraussetzungen durchzusetzen, die in URL -Mappings ausgedrückt werden.
Kapitulieren Sie den Handler als HandlexexexexecutionChain und fügen Sie PathExpoSitingHandlerInterceptor- und UritemplateVariablesHandLinterceTor -Interceptor hinzu.
/*** Erstellen Sie ein Handler -Objekt für den gegebenen Rohhandler, wobei der tatsächliche* Handler, den {@link #path_within_handler_mapping_attribute} sowie* die {@link #uri_template_variable_attribute} vor der Ausführung des Handlers mit A -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@{{@@@@@@@@@@{@{{{{{{{{{{{{{{{{{{{{{{{{{lindex). Interceptor, der das Pfadattribut und die URI -Template -Variablen enthüllt* @param rawHandler Der Rohhandler, der entlarvt* @Param Pathwithinmapping den Pfad, der vor der Ausführung des Handlers* @param uritemplatevariable die Uri -Template -Variablen ausführen kann. RAWHandler, String BESTMATCHINGPATTERN, STRING PATHWITHINMAPPING, MAP <STRING, STRING> URITEMPLETVARIABLE) {HandlexexexexCutionChain Chain = new HandlexexexexCutionChain (RawHandler); chain.addinterceptor (neuer pathExposedHandlerInterceptor (BestMatchingPattern, Pathwithinmapping)); if (! CollectionUtils.isempty (UritemplateVariables)) {chain.addinterceptor (neuer UritemplatevariableShandlerInterzeptor (UritemplateVarias);Der obige Inhalt ist das relevante Kenntnis der SpringMVC -Quellcode -Interpretation von HandleMapping - AbstracturlHandlermaping -Serienanforderungsverteilung, die Ihnen vorgelegt wurde. Ich hoffe, es wird für alle hilfreich sein!