1. 程式人生 > >web專案載入順序

web專案載入順序

@WEB

web專案執行順序

現在主流的web開發框架一般都是基於Spring開發的,Spring生態圈量級非常之大,功能非常強大。今天講述一下普通的web專案載入順序。 雖然專案大部分都在使用SpringBoot、SpringCloud等微服務的架構來搭建專案,基本不會在進行這些配置了,但是如果專案追究Spring原始碼,這些基礎知識還是需要了解的。

  1. web.xml
    web專案執行時首先會載入web.xml配置檔案,一般該配置檔案在 /WebRoot(web)/WEB-INF/web.xml ,web.xml中的內容載入不依賴於內容書寫順序,而是以 context-param 、 listener、 filter、servlet的順序進行載入。web.xml中有以下幾項內容:
    (1)context-param
    以下為配置spring配置檔案目錄的配置。該配置是針對整個web專案上下文的。

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
      </context-param>
    

    (2)listener
    該配置用於向web容器中註冊一個事件監聽器,監聽事件發生事件,如何響應等資訊。事件監聽程式在建立、修改和刪除會話或servlet環境時得到通知。常與context-param聯合使用。

    <listener>
       // 該類繼承ServletContextListener 包含初始化方法contextInitialized(ServletContextEvent event) 和銷燬方法contextDestoryed(ServletContextEvent event)
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    

    (3)filter
    filter 在web專案中起到過濾請求的作用,可配置在web.xml中,也可在專案中使用程式碼 繼承Filter類來進行處理一些邏輯。Filter類中有 init(), doFilter(),destory() 方法。可獲取到請求ServletRequest 和ServletResponse,然後決定繼續處理哪些請求,阻擋哪些請求等。一般用作 防CRSF攻擊、防SQL注入、許可權過濾等
    web.xml中filter 需要和 filter-mapping 一起使用,如下為字元過濾器。

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    
    public interface Filter {
      default void init(FilterConfig filterConfig) throws ServletException {}
      void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;
      default void destroy() {}
    }
    

    (4)servlet
    SpringMVC 中圍繞 DispatcherServlet 來設計請求對映、檢視處理、檢視解析。DispatcherServlet 用於處理請求分發。具體內容見後續SpringMVC執行順序。

    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:SpringMVC.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      
      <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
    

    (5)歡迎頁
    web專案預設啟動載入的頁面。

    <welcome-file-list>
        <welcome-file>.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
    

SpringMVC執行順序

  1. 時序圖

在這裡插入圖片描述

2.元件

DispatcherServlet

前端控制器DispatcherServlet是SpringMVC整個流程控制中心,由它來排程其它元件相互配合,完成匹配請求URL,解析資料,響應資料,檢視解析以及檢視渲染等任務。

HandlerMapping

處理器對映器HandlerMapping負責根據使用者請求URL找到匹配的Handler處理器。

HandlerAdapter

處理器介面卡HandlerAdapter對處理器進行執行

ModelAndView

ModelAndView是Spring封裝的model和view組合物件。可用於處理資料和檢視。

ViewResolver

檢視解析器ViewResolver負責處理結果生成檢視,先根據邏輯檢視名稱找到物理檢視地址,再生成檢視物件,最後對檢視進行渲染,將處理結果通過頁面展現給使用者。

Controller

業務邏輯處理器,接受請求引數,進行業務處理,返回響應的資料和檢視。
3.applicationContext.xml和dispatcher-servlet.xml
applicationContext.xml 是Spring的全域性配置檔案,用來控制Spring特性,管理Bean的容器。
dispatcher-servlet.xml是SpringMVC中用作控制器,攔截器、轉發view等作用。

注意

在兩個配置檔案中最好不要宣告相同的bean。 applicationContext.xml是隨ContextLoaderListener而載入的,ContextLoaderListener 配置於 中的。dispatcher-servlet.xml是隨DispatcherServlet而載入的,而DispatcherServlet配置於 中,在web.xml中載入順序為 context-param 、listener 、 filter 、servlet 。所以先載入applicationContext.xml 再載入dispatcher-servlet.xml