springMVC---配置檔案解析(web.xml)

♂???木發表於2018-12-08

前言


接著前面一片文章SpringMVC---IDEA 搭建SpringMVC工程,繼續解析各配置檔案是用來幹嘛的。只有弄懂每一個配置項的意義,才能更好的掌握springMVC.

問題


web.xml檔案詳解:

1、web.xml檔案作用是什麼?
  web.xml檔案的作用是配置web工程啟動,對於一個web工程來說,web.xml可以有也可以沒有,如果存在web.xml檔案;web工程在啟動的時候,web容器(tomcat容器)會去載入web.xml檔案,然後按照一定規則配置web.xml檔案中的元件。

2、web容器載入web.xml檔案的規則是怎樣的?
  web容器載入順序:ServletContext -> context-param -> listener -> filter ->servlet ;不會因在web.xml中的書寫順序改變:   
  a、web容器啟動後,會去載入web.xml檔案,讀取listener和context-param兩個節點
  b、建立一個ServletContext(Servlet上下文)這個上下文供所有部分共享
  c、容器將context-param轉換成鍵值對,交給ServletContext
  d、接著按照上述順序繼續執行

springMVC---配置檔案解析(web.xml)

SpringMVC的web.xml檔案


1、配置程式碼及流程圖示例:

springMVC---配置檔案解析(web.xml)

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--Spring MVC 配置 並新增監聽-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/spring/*</param-value>
  </context-param>

  <!-- 字元過濾器 傳值亂碼-->
  <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>

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!--配置前端控制器 進行請求分發 DispatcherServlet本質也是一個Servlet -->
  <servlet>
    <!--名字可以自定義-->
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/springmvc.xml</param-value>
    </init-param>
    <!--標記容器啟動的時候就啟動這個servlet-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <!--攔截所有-->
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>
複製程式碼

2、載入順序
a、首先載入Spring容器載入器:ContextLoaderListener

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
複製程式碼

  檢視ContextLoaderListener原始碼可以發現其實現了ServletContextListener並繼承了ContextLoader類,ServletContextListener主要用於監聽web容器的啟動和銷燬,ContextLoader用於web容器啟動後載入springApplicationContext上下文。
  ServletContextListener的兩個方法為contextInitialized,contextDestroyed,主要用來監聽Web應用的生命週期,當web應用初始化或者結束時會觸發ServletContextEvent,並由監聽器監聽觸發其他操作。
  ContextLoader主要用於載入上下文:當web伺服器開啟時候,觸發ServletContextEvent並被ContextLoaderListener監聽到,此時執行,ContextLoaderListener中的contextInitialized方法,此方法為ContextLoader中的方法,檢視原始碼可以發現其建立了WebApplicationContext,並將springApplicationContext中的bean註冊到容器中供專案使用。

springMVC---配置檔案解析(web.xml)

b、載入過濾器Filter(此處以編碼過濾器CharacterEncodingFilter為例)此過濾器的作用就是設定請求引數的編碼為UTF-8.

<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>
複製程式碼

c、載入Servlet:初始化DispatcherServlet,在SpringMVC架構中,DispatchServlet負責請求分發,起到控制器的作用

<!--配置前端控制器 進行請求分發 DispatcherServlet本質也是一個Servlet -->
  <servlet>
    <!--名字可以自定義-->
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/springmvc.xml</param-value>
    </init-param>
    <!--標記容器啟動的時候就啟動這個servlet-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <!--攔截所有-->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
複製程式碼

相關文章