一、SpringMVC配置DispatcherServlet
1.1 SpringMVC基于XML配置DispacherServlet
<servlet-name>springMVC</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>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
在Web.xml里配置DispatcherServlet:
- <load-on-startup>1</load-on-startup>是啟動(dòng)順序,讓這個(gè)Servlet隨Servletp容器一起啟動(dòng)。
- init-param 配置springMVC的配置文件讀取路徑
- servlet-mapping 對(duì)所有請(qǐng)求路徑響應(yīng)DisPacherServlet。
1.2 SpringMVC基于配置類配置DisPacherServlet
package config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
//將DispatchServlet映射到"/"
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
//指定配置類
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
}
}
首先需要知道擴(kuò)展AbstractAnnotationConfigDispatcherServletInitializer的任意類都會(huì)自動(dòng)地配置DispatcherServlet和Spring應(yīng)用上下文。
繼承這個(gè)類需要重寫3個(gè)方法:
- getServletMappings 配置dispacherServlet映射到的路徑。
- getServletConfigClasses() ,指定當(dāng)DispatcherServlet加載應(yīng)用上下文時(shí),使用在WebConfig配置類(使用java配置)中的定義的關(guān)于web組件的bean,如控制器、視圖解析器以及處理器映射bean。
- getRootConfigClasses()指定了創(chuàng)建ContextLoaderListener應(yīng)用上下文bean的配置類。這些bean通常是驅(qū)動(dòng)應(yīng)用后端的中間層和數(shù)據(jù)層組件。
二、SpringBoot配置
2.1 配置類中配置
@Bean
public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {
return new ServletRegistrationBean(dispatcherServlet,"/api/*");
}
2.2 SpringBoot配置文件中配置
可以在application.properties加入配置,如:
server.servlet-path=/api/*
三、SpringMVC執(zhí)行流程

SpringMVC執(zhí)行流程.png
- 用戶請(qǐng)求DispathcerServlet。
- DispatcherServlet接受到請(qǐng)求,將根據(jù)請(qǐng)求信息交給處理器映射器。
- 處理器映射器(HandlerMapping)根據(jù)用戶的url請(qǐng)求查找匹配該url的Handler,并返回一個(gè)執(zhí)行鏈。
- DispacherServlet再根據(jù)執(zhí)行鏈請(qǐng)求處理器適配器(HandlerAdapter)。
- 處理器適配器調(diào)用相應(yīng)的handle進(jìn)行處理。
- 對(duì)應(yīng)的handler處理完成后返回ModelAndVIew給處理器適配器。
- 處理器適配器將接受的ModelAndView返回給DispatcherServlet。
- DispatcherServlet請(qǐng)求視圖解析器來(lái)解析視圖。
- 視圖解析器處理完后返回View對(duì)象給DispacherServlet。
- 最后前端控制器對(duì)View進(jìn)行視圖渲染(即將模型數(shù)據(jù)填充至視圖中)。