工作流程:
- Web中,無非是請求和響應;
- 在SpringMVC中,請求的第一站是DispatcherServlet,充當前端控制器角色;
- DispatcherServlet會查詢一個或多個處理器映射(handler mapping)並根據請求所攜帶的URL信息進行決策,將請求發送給哪個SpringMVC控制器(controller);
- 控制器做兩件事:一是將數據打包,二是定義邏輯視圖名,然後返回給DispatcherServlet;
- DispatcherServlet通過視圖解析器(view resolver)來將邏輯視圖名匹配爲一個特定的視圖實現,它可能是也可能不是JSP;
- 交付數據模型,以視圖形式響應給客戶,整個請求流程完成。
- <welcome-file-list>[歡迎頁面,可定義多個,會依次查找可用視圖]
- <listener>
- <listener-class>基本配置包含Log4jConfigListener和ContextLoaderListener,且log4j監聽器在前,目前已廢除log4j監聽器,原因還在努力追問
- <context-param>指定上下文配置文件路徑,基本配置包含log4j和Spring配置文件
- <param-name>指定上下文名稱,一般爲:名稱+ConfigLocation後綴,如:contextConfigLocation,不可隨意定義,否則指定的配置文件無法加載成功,實際上它是org.springframework.web.servlet.FrameworkServlet中的一個成員變量,而FrameworkServlet是DispatcherServlet的父類,log4jConfigLocation目前不得而知
- <param-value>指定上下文路徑,如:classpath:applicationContext.xml
- <servlet>
- <servlet-name>Servlet名稱,可以自定義,但是需要遵守規則:比如指定爲Spring,那麼最好在classpath路徑中配置Spring-servlet.xml,否則需要在子元素<init-param>特別指出
- <servlet-class>因爲要配置MVC,所以指定爲:org.springframework.web.servlet.DispatcherServlet
- <init-param>[定義容器啓動時初始化的配置文件,作用主要是指定自定義配置文件的路徑,貌似可以指定多個]
- <param-name>[contextConfigLocation,不可更改,原因見3.1]
- <param-value>[可以自定義,如:classpath:spring-servlet.xml,如果不定義,那麼默認爲:classpath:${servlet-name}-servlet.xml,見4.1]
- <load-on-startup>[定義爲1,表示啓動等級,
標記容器是否在啓動的時候就加載這個servlet。
當值爲0或者大於0時,表示容器在應用啓動時就加載這個servlet;
當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才加載。
正數的值越小,啓動該servlet的優先級越高。]
- <param-name>[contextConfigLocation,不可更改,原因見3.1]
- <servlet-name>Servlet名稱,可以自定義,但是需要遵守規則:比如指定爲Spring,那麼最好在classpath路徑中配置Spring-servlet.xml,否則需要在子元素<init-param>特別指出
- <servlet-mapping>
- <servlet-name>與4.1保持一致
- <url-pattern>一般定義爲“/”,表示所有請求都通過DispatcherServlet來處理
- <filter>[以字符集爲例]
- <filter-name>[自行指定]
- <filter-class>[org.springframework.web.filter.CharacterEncodingFilter]
- <init-param>
- <param-name>[encoding,不可更改,它是CharacterEncodingFilter中定義的一個成員變量]
- <param-value>[UTF-8]
- <filter-mapping>
- <filter-name>[與6.1保持一致]
- <url-pattern>[/*表示所有請求都經過此過濾器過濾]
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="3.0" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 7 <display-name></display-name> 8 <welcome-file-list> 9 <welcome-file>/WEB-INF/views/home.jsp</welcome-file> 10 </welcome-file-list> 11 <!-- 加載指定位置的上下文配置文件 --> 12 <context-param> 13 <param-name>contextConfigLocation</param-name> 14 <param-value>classpath:applicationContext.xml</param-value> 15 </context-param> 16 <context-param> 17 <param-name>log4jConfigLocation</param-name> 18 <param-value>classpath:log4j.properties</param-value> 19 </context-param> 20 <!-- 定義LOG4J監聽器 --> 21 <listener> 22 <listener-class> 23 org.springframework.web.util.Log4jConfigListener 24 </listener-class> 25 </listener> 26 <listener> 27 <listener-class> 28 org.springframework.web.context.ContextLoaderListener 29 </listener-class> 30 </listener> 31 <servlet> 32 <servlet-name>Spring</servlet-name> 33 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 34 <!-- 表示啓動容器時初始化該servlet --> 35 <init-param> 36 <param-name>contextConfigLocation</param-name> 37 <param-value>classpath:Spring-servlet.xml</param-value> 38 </init-param> 39 <load-on-startup>1</load-on-startup> 40 </servlet> 41 <servlet-mapping> 42 <servlet-name>Spring</servlet-name> 43<!-- 表示哪些請求需要交給Spring Web MVC處理,/是用來定義默認servlet映射的。也可以如“*.html”表示攔截所有以html爲擴展名的請求 --> 44 <url-pattern>/</url-pattern> 45 </servlet-mapping> 46 <!-- 使用spring解決中文亂碼 --> 47 <filter> 48 <filter-name>CharacterEncodingFilter</filter-name> 49 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 50 <init-param> 51 <param-name>encoding</param-name> 52 <param-value>utf-8</param-value> 53 </init-param> 54 </filter> 55 <filter-mapping> 57 <filter-name>CharacterEncodingFilter</filter-name> 58 <url-pattern>/*</url-pattern> 59 </filter-mapping> 60 </web-app>