Abstracthandlermapping ينفذ gethandler المحدد من قبل واجهة معالجة
1. توفير طريقة قالب Gethandlerinternal لتنفيذ الفئة الفرعية
2. إذا لم يتم الحصول على المعالج ، يتم استخدام defultthandler الافتراضي.
3. إذا كان المعالج من نوع السلسلة ، احصل على المثيل من السياق
4. تغليف المعالج من خلال gethandleerexecutionchain وأضف المقاطع
. gethandlerinternal (request) ؛ if (handler == null) {handler = getDefaulthandler () ؛} if (handler == null) {return null ؛} // bean name أو معالج حلها؟ if (مثيل المعالج) GethandleRexecutionchain (معالج ، طلب) ؛} // abstracthandlermapping/*** إنشاء handleRexecutionchain للمعالج المحدد ، بما في ذلك المعترضات المعمول بها. عنوان URL. قد تتجاوز الفئات الفرعية هذا من أجل تمديد/إعادة ترتيب قائمة التقاطعات. يجب أن تتعامل هذه الطريقة مع هاتين الحالتين بشكل صريح ، إما إما بناء handleRexecutionChain أو تمديد السلسلة الحالية.* <p> للاضطلاع ببساطة بإضافة اعتراض ، فكر null})* request request request http request* @إعادة HandleRexEcutionChain (never {code null}) HandleRexecutionChain) معالج: New HandleRexecutionChain (معالج) ؛ chain.addInterceptors (getAdaptedInterceptors ()) ؛ سلسلة lookuppath = urlPathHelper.getLookuppathforrequest (طلب) ؛ لـ (mediPtroptor mediptopptor: mappedInterceptors) {if (mediNterceptor.matches (pathuppath ، pathmatcher)) سلسلة؛} بعد ذلك ، ألق نظرة على Gethandlerinternal التي تنفذها AbstractUrlhandlermapping
. geturlpathhelper (). to // فضح path_within_handler_mapping_attribute بشكل جيد. (مثيل RawHandler من السلسلة) {String HandlerName = (String) RawHandler ؛ RawHandler = getApplicationContext (). getBean (معالجة) ؛} // طريقة معالج التحقق المحجوزة لا تستخدم ValidateHandler (RawHandler ، request) ؛ lookuppath ، null) ؛}} if (handler! = null && logger.isdebugenabled ()) {logger.debug ("mapping [" + lookuppath + "] to "]) لمزيد من التفاصيل ، راجع فئة antpathmatcher. org.springframework.util.antpathmatcher*/محمية كائن lookuphandler (سلسلة urlpath ، httpservletrequest طلب) يلقي الاستثناء {// المطابقة المباشرة؟ Search Search LARKEROBJECT HALLERLER = this.handlermap.get (urlpath) ؛ if (handler! = null) {// bean name أو معالج حلها؟ if (handler string) {String HandlerName = (String) Handler ؛ Handler = getApplicationContext (). getBean (handlername) ؛ urlpath ، urlpath ، null) ؛} // تطابق نمط؟ يتم تنفيذ المطابقة من خلال التعبيرات من خلال مضاد Matcher. ويرد التحليل المحدد أدناه القائمة <Tring> MatchingPatterns = ArrayList جديد <String> () ؛ لـ (string registerPattern: this.handlermap.keyset ()) {if (getPathMatcher (). match (registerPattern ، urlpath)) {matchingpatterns.add (registeredpattern) ؛}} سلسلة bestpatternmatch = null ؛ string> patterndatorator = getPathmatcher (). if (! matchingpatterns.isempty ()) {collections.sort (matchingpatterns ، patterncomparator) ؛ if (logger.isdebugenabled ()) {logger.debug ("أنماط مطابقة للطلب [" + urlpath + "] هي" + matchingpatterns) ؛ MatchingPatterns.get () ؛} if (bestpatternmatch! = null) {handler = this.handlermap.get (bestpatternmatch) ؛ pathwithInMapping = getPathMatcher (). extractwithinpattern (BestPatternMatch ، urlpath) ؛ // قد يكون هناك "أفضل أنماط" متعددة ، دعنا نتأكد من أن لدينا متغيرات قالب URI الصحيح // string> () ؛ لـ (String MatchingPattern: MatchingPatterns) {if (patterncomparator.compare (bestpatternmatch ، matchingpattern) ==) {map <string ، string> vars = getPathMatcher (). vars) ؛ uritemplatevariables.putall (decodedvars) ؛}} if (logger.isdebugenabled ()) {logger.debug ("متغيرات قالب URI للطلب [" + urlpath + "] uritemplatevariables) ؛} // لم يتم العثور على معالج ... إرجاع فارغ ؛} تم تصميمه للتحقق من المعالجات ، ولم يتم ذلك ، بما في ذلك الفئات الفرعية.
/*** التحقق من صحة المعالج المعطى مقابل الطلب الحالي.* <p> التنفيذ الافتراضي فارغ. يمكن تجاوزه في الفئات الفرعية ،* على سبيل المثال لفرض شروط مسبقة محددة معبر عنها في تعيينات URL.
تغليف المعالج على أنه HandleRexecutionChain ، وأضف PathExpositingHandlerNitceptor و UritEmplateVariableshandlerInterceptor اعتراض.
/*** قم بإنشاء كائن معالج للمعالج الخام المعطى ، وفضح المعالج الفعلي* ، {link #path_within_handler_mapping_attribute} ، وكذلك* {link #uri_template_variables_attribute} قبل تنفيذ المعالج. يعرض متغيرات سمة المسار ومتغيرات قالب URI* param rawhandler المعالج الخام لفضح* param pathwithinmapping المسار لفضحه قبل تنفيذ المعالج* @parar uritemplatevariables uri the proginter thisplate strupterder stringerder stringerder stringerder stringerder (togricterder stitepresher. BestMatchingPattern ، string pathwithinmapping ، خريطة <string ، string> uritemplatevariables) {handleRexecutionchain chain = new HandleRexecutionChain (RawHandler) ؛ chain.addInterceptor (New PathExposedHandLerInterceptor (BestMatchingPattern ، pathwithInMapping)) ؛ if (! collectionUtils.isempty (uritemplatevariables))المحتوى أعلاه هو المعرفة ذات الصلة بتفسير رمز مصدر springmvc للمعالجة - توزيع طلب سلسلة التجريدية. آمل أن يكون ذلك مفيدًا للجميع!