Rumah Java javaTutorial DispatcherServlet类讲解

DispatcherServlet类讲解

Jul 24, 2017 pm 04:22 PM
dispatcherservlet menganalisis

 =================下面是类定义以及类注释的一些翻译,还需要进行修改。=================

 /**

"serial"  DispatcherServlet
Salin selepas log masuk
}
Salin selepas log masuk

 

========================下面是这个类的部分比较重要的属性========================

 

    /** MultipartResolver used by this servlet */private MultipartResolver multipartResolver; /** LocaleResolver used by this servlet */private LocaleResolver localeResolver;/** ThemeResolver used by this servlet */private ThemeResolver themeResolver;/** List of HandlerMappings used by this servlet */private List<HandlerMapping> handlerMappings;   //处理器映射列表/** List of HandlerAdapters used by this servlet */private List<HandlerAdapter> handlerAdapters;   //处理器适配器列表/** List of HandlerExceptionResolvers used by this servlet */private List<HandlerExceptionResolver> handlerExceptionResolvers; //处理器异常解析器列表/** RequestToViewNameTranslator used by this servlet */private RequestToViewNameTranslator viewNameTranslator;/** FlashMapManager used by this servlet */private FlashMapManager flashMapManager;/** List of ViewResolvers used by this servlet */private List<ViewResolver> viewResolvers; //视图解析器列表
Salin selepas log masuk

 

============================下面是类的无参构造器============================

<span style="color: #008000">/**</span><span style="color: #008000"> * Create a new {</span><span style="color: #808080">@code</span><span style="color: #008000"> DispatcherServlet} that will create its own internal web
     * application context based on defaults and values provided through servlet
     * init-params. Typically used in Servlet 2.5 or earlier environments, where the only
     * option for servlet registration is through {</span><span style="color: #808080">@code</span><span style="color: #008000"> web.xml} which requires the use
     * of a no-arg constructor.
     * <p>Calling {</span><span style="color: #808080">@link</span><span style="color: #008000"> #setContextConfigLocation} (init-param 'contextConfigLocation')
     * will dictate which XML files will be loaded by the
     * {</span><span style="color: #808080">@linkplain</span><span style="color: #008000"> #DEFAULT_CONTEXT_CLASS default XmlWebApplicationContext}
     * <p>Calling {</span><span style="color: #808080">@link</span><span style="color: #008000"> #setContextClass} (init-param 'contextClass') overrides the
     * default {</span><span style="color: #808080">@code</span><span style="color: #008000"> XmlWebApplicationContext} and allows for specifying an alternative class,
     * such as {</span><span style="color: #808080">@code</span><span style="color: #008000"> AnnotationConfigWebApplicationContext}.
     * <p>Calling {</span><span style="color: #808080">@link</span><span style="color: #008000"> #setContextInitializerClasses} (init-param 'contextInitializerClasses')
     * indicates which {</span><span style="color: #808080">@code</span><span style="color: #008000"> ApplicationContextInitializer} classes should be used to
     * further configure the internal application context prior to refresh().
     * </span><span style="color: #808080">@see</span><span style="color: #008000"> #DispatcherServlet(WebApplicationContext)<br>     * 
     </span><span style="color: #008000">*/</span><span style="color: #0000ff">public</span><span style="color: #000000"> DispatcherServlet() {</span><span style="color: #0000ff">super</span><span style="color: #000000">();
        setDispatchOptionsRequest(</span><span style="color: #0000ff">true</span><span style="color: #000000">);
    }</span>
Salin selepas log masuk

 

 =================下面是initStrategies(ApplicationContext context)方法=================

主要是初始化上面提到的部分重要属性。

    //初始化这个DispatcherServlet使用到的策略对象。这个方法有可能会被子类覆盖。protected void initStrategies(ApplicationContext context) {        initMultipartResolver(context);
        initLocaleResolver(context);
        initThemeResolver(context);
Salin selepas log masuk
        /* 
      * 
         *    
         */     
        initHandlerMappings(context);
Salin selepas log masuk
        initHandlerExceptionResolvers(context);
        initRequestToViewNameTranslator(context);
        initViewResolvers(context);
        initFlashMapManager(context);
    }
Salin selepas log masuk

 

 ========================下面是DispatherServlet的doService()方法==================

        doService(HttpServletRequest request, HttpServletResponse response) = WebAsyncUtils.getAsyncManager(request).hasConcurrentResult() ? " resumed" : """DispatcherServlet with name '" + getServletName() + "'" + resumed +
                    " processing " + request.getMethod() + " request for [" + getRequestUri(request) + "]"<String, Object> attributesSnapshot = =  HashMap<String, Object><?> attrNames == (.cleanupAfterInclude || attrName.startsWith("org.springframework.web.servlet"=  (inputFlashMap !=  (! (attributesSnapshot !=
Salin selepas log masuk

 

=========================================================================

  doDispatch(HttpServletRequest request, HttpServletResponse response) ==  multipartRequestParsed = WebAsyncManager asyncManager == = processedRequest == (processedRequest !=mappedHandler = (mappedHandler ==  || mappedHandler.getHandler() == HandlerAdapter ha =String method = isGet = "GET" (isGet || "HEAD" lastModified ="Last-Modified value for [" + getRequestUri(request) + "] is: " + ( ServletWebRequest(request, response).checkNotModified(lastModified) && (!mv ==dispatchException =  NestedServletException("Handler dispatch failed" NestedServletException("Handler processing failed" (mappedHandler !=
Salin selepas log masuk

 

 

=========================================================================

  /** * Return the HandlerExecutionChain for this request.
     * <p>Tries all handler mappings in order.
     * @param request current HTTP request
     * @return the HandlerExecutionChain, or {@code null} if no handler could be found     */protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {for (HandlerMapping hm : this.handlerMappings) {if (logger.isTraceEnabled()) {
                logger.trace("Testing handler map [" + hm + "] in DispatcherServlet with name '" + getServletName() + "'");
            }
            HandlerExecutionChain handler = hm.getHandler(request);if (handler != null) {return handler;
            }
        }return null;
    }
Salin selepas log masuk

=========================================================================

 /** * Render the given ModelAndView.
     * <p>This is the last stage in handling a request. It may involve resolving the view by name.
     * @param mv the ModelAndView to render
     * @param request current HTTP servlet request
     * @param response current HTTP servlet response
     * @throws ServletException if view is missing or cannot be resolved
     * @throws Exception if there's a problem rendering the view     */protected void render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response) throws Exception {// Determine locale for request and apply it to the response.Locale locale = this.localeResolver.resolveLocale(request);
        response.setLocale(locale);

        View view;if (mv.isReference()) {// We need to resolve the view name.view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);if (view == null) {throw new ServletException("Could not resolve view with name '" + mv.getViewName() +
                        "' in servlet with name '" + getServletName() + "'");
            }
        }else {// No need to lookup: the ModelAndView object contains the actual View object.view = mv.getView();if (view == null) {throw new ServletException("ModelAndView [" + mv + "] neither contains a view name nor a " +
                        "View object in servlet with name '" + getServletName() + "'");
            }
        }// Delegate to the View object for rendering.if (logger.isDebugEnabled()) {
            logger.debug("Rendering view [" + view + "] in DispatcherServlet with name '" + getServletName() + "'");
        }try {if (mv.getStatus() != null) {
                response.setStatus(mv.getStatus().value());
            }
            view.render(mv.getModelInternal(), request, response);
        }catch (Exception ex) {if (logger.isDebugEnabled()) {
                logger.debug("Error rendering view [" + view + "] in DispatcherServlet with name '" +getServletName() + "'", ex);
            }throw ex;
        }
    }
Salin selepas log masuk

 

=========================================================================

 /** * Resolve the given view name into a View object (to be rendered).
     * <p>The default implementations asks all ViewResolvers of this dispatcher.
     * Can be overridden for custom resolution strategies, potentially based on
     * specific model attributes or request parameters.
     * @param viewName the name of the view to resolve
     * @param model the model to be passed to the view
     * @param locale the current locale
     * @param request current HTTP servlet request
     * @return the View object, or {@code null} if none found
     * @throws Exception if the view cannot be resolved
     * (typically in case of problems creating an actual View object)
     * @see ViewResolver#resolveViewName     */protected View resolveViewName(String viewName, Map<String, Object> model, Locale locale,
            HttpServletRequest request) throws Exception {for (ViewResolver viewResolver : this.viewResolvers) {
            View view = viewResolver.resolveViewName(viewName, locale);if (view != null) {return view;
            }
        }return null;
    }
Salin selepas log masuk

 

=========================================================================

=========================================================================

=========================================================================

=========================================================================

=========================================================================

Atas ialah kandungan terperinci DispatcherServlet类讲解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara melaksanakan statistik dan analisis data dalam uniapp Cara melaksanakan statistik dan analisis data dalam uniapp Oct 24, 2023 pm 12:37 PM

Cara melaksanakan statistik dan analisis data dalam uniapp 1. Pengenalan latar belakang Statistik dan analisis data merupakan bahagian yang sangat penting dalam proses pembangunan aplikasi mudah alih Melalui statistik dan analisis tingkah laku pengguna, pembangun boleh mempunyai pemahaman yang mendalam tentang pilihan dan penggunaan pengguna. tabiat. Dengan itu mengoptimumkan reka bentuk produk dan pengalaman pengguna. Artikel ini akan memperkenalkan cara melaksanakan statistik data dan fungsi analisis dalam uniapp, dan menyediakan beberapa contoh kod khusus. 2. Pilih statistik data dan alat analisis yang sesuai Langkah pertama untuk melaksanakan statistik dan analisis data dalam uniapp ialah memilih statistik data dan alat analisis.

Bagaimana untuk menggunakan pangkalan data MySQL untuk ramalan dan analitik ramalan? Bagaimana untuk menggunakan pangkalan data MySQL untuk ramalan dan analitik ramalan? Jul 12, 2023 pm 08:43 PM

Bagaimana untuk menggunakan pangkalan data MySQL untuk ramalan dan analitik ramalan? Gambaran Keseluruhan: Peramalan dan analitik ramalan memainkan peranan penting dalam analisis data. MySQL, sistem pengurusan pangkalan data hubungan yang digunakan secara meluas, juga boleh digunakan untuk tugasan ramalan dan analisis ramalan. Artikel ini akan memperkenalkan cara menggunakan MySQL untuk ramalan dan analisis ramalan, serta menyediakan contoh kod yang berkaitan. Penyediaan data: Pertama, kita perlu menyediakan data yang berkaitan. Katakan kita ingin membuat ramalan jualan, kita memerlukan jadual dengan data jualan. Dalam MySQL kita boleh gunakan

Pemantauan dan analisis log masa nyata di bawah Linux Pemantauan dan analisis log masa nyata di bawah Linux Jul 29, 2023 am 08:06 AM

Pemantauan dan analisis log masa nyata di bawah Linux Dalam pengurusan sistem harian dan penyelesaian masalah, log ialah sumber data yang sangat penting. Melalui pemantauan masa nyata dan analisis log sistem, kami boleh mengesan situasi tidak normal dalam masa dan mengendalikannya dengan sewajarnya. Artikel ini akan memperkenalkan cara melaksanakan pemantauan dan analisis log masa nyata di bawah Linux, dan memberikan contoh kod yang sepadan. 1. Pemantauan log masa nyata Di bawah Linux, sistem log yang paling biasa digunakan ialah rsyslog. Dengan mengkonfigurasi rsyslog, kami boleh menggabungkan log aplikasi yang berbeza

Bagaimana untuk menggunakan bahasa Go untuk analisis visualisasi data? Bagaimana untuk menggunakan bahasa Go untuk analisis visualisasi data? Jun 10, 2023 am 10:46 AM

Dengan kemunculan era data besar, analisis visualisasi data memainkan peranan penting dalam semua lapisan masyarakat. Sebagai bahasa pengaturcaraan yang pantas, cekap dan selamat, bahasa Go telah secara beransur-ansur menduduki tempat dalam bidang analisis visualisasi data. Artikel ini akan meneroka cara menggunakan bahasa Go untuk analisis visualisasi data. 1. Plotly, perpustakaan visualisasi data yang biasa digunakan dalam bahasa Go: boleh digunakan untuk mencipta grafik interaktif dalam penyemak imbas dan menyokong pelbagai jenis grafik, seperti graf garis, graf bar, plot serakan, peta haba, dsb. Gonum/plo

Langkah-langkah analisis statistik Langkah-langkah analisis statistik Jun 28, 2023 pm 03:27 PM

Analisis statistik selalunya merujuk kepada proses pengisihan, pengkelasan dan pentafsiran data relevan yang dikumpul. Langkah-langkah asas analisis statistik termasuk: 1. Mengumpul data 2. Menyusun data 3. Menganalisis data;

Analisis sebab mengapa direktori sekunder DreamWeaver CMS tidak boleh dibuka Analisis sebab mengapa direktori sekunder DreamWeaver CMS tidak boleh dibuka Mar 13, 2024 pm 06:24 PM

Tajuk: Analisis sebab dan penyelesaian mengapa direktori sekunder DreamWeaver CMS tidak boleh dibuka Dreamweaver CMS (DedeCMS) ialah sistem pengurusan kandungan sumber terbuka yang berkuasa yang digunakan secara meluas dalam pembinaan pelbagai laman web. Walau bagaimanapun, kadangkala semasa proses membina tapak web, anda mungkin menghadapi situasi di mana direktori sekunder tidak boleh dibuka, yang membawa masalah kepada operasi biasa tapak web. Dalam artikel ini, kami akan menganalisis kemungkinan sebab mengapa direktori sekunder tidak boleh dibuka dan memberikan contoh kod khusus untuk menyelesaikan masalah ini. 1. Analisis sebab yang mungkin: Masalah konfigurasi peraturan pseudo-statik: Semasa penggunaan

Analisis kes aplikasi Python dalam sistem pengangkutan pintar Analisis kes aplikasi Python dalam sistem pengangkutan pintar Sep 08, 2023 am 08:13 AM

Ringkasan analisis kes aplikasi Python dalam sistem pengangkutan pintar: Dengan perkembangan pesat sistem pengangkutan pintar, Python, sebagai bahasa pengaturcaraan berbilang fungsi, mudah dipelajari dan digunakan, digunakan secara meluas dalam pembangunan dan aplikasi sistem pengangkutan pintar. Artikel ini menunjukkan kelebihan dan potensi aplikasi Python dalam bidang pengangkutan pintar dengan menganalisis kes aplikasi Python dalam sistem pengangkutan pintar dan memberikan contoh kod yang berkaitan. Pengenalan Sistem pengangkutan pintar merujuk kepada penggunaan komunikasi moden, maklumat, penderiaan dan cara teknikal lain untuk berkomunikasi melalui

Analisis sama ada bahasa pengaturcaraan utama Tencent ialah Go Analisis sama ada bahasa pengaturcaraan utama Tencent ialah Go Mar 27, 2024 pm 04:21 PM

Tajuk: Adakah bahasa pengaturcaraan utama Tencent Go: Analisis mendalam Sebagai syarikat teknologi terkemuka di China, Tencent sentiasa menarik banyak perhatian dalam pilihan bahasa pengaturcaraannya. Dalam beberapa tahun kebelakangan ini, sesetengah orang percaya bahawa Tencent menggunakan Go sebagai bahasa pengaturcaraan utamanya. Artikel ini akan menjalankan analisis mendalam sama ada bahasa pengaturcaraan utama Tencent ialah Go dan memberikan contoh kod khusus untuk menyokong pandangan ini. 1. Aplikasi bahasa Go dalam Tencent Go ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google Kecekapan, kesesuaian dan kesederhanaannya disukai oleh banyak pembangun.

See all articles