一、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>是启动顺序,让这个Servlet随Servletp容器一起启动。
- init-param 配置springMVC的配置文件读取路径
- servlet-mapping 对所有请求路径响应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};
}
}
首先需要知道扩展AbstractAnnotationConfigDispatcherServletInitializer的任意类都会自动地配置DispatcherServlet和Spring应用上下文。
继承这个类需要重写3个方法:
- getServletMappings 配置dispacherServlet映射到的路径。
- getServletConfigClasses() ,指定当DispatcherServlet加载应用上下文时,使用在WebConfig配置类(使用java配置)中的定义的关于web组件的bean,如控制器、视图解析器以及处理器映射bean。
- getRootConfigClasses()指定了创建ContextLoaderListener应用上下文bean的配置类。这些bean通常是驱动应用后端的中间层和数据层组件。
二、SpringBoot配置
2.1 配置类中配置
@Bean
public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {
return new ServletRegistrationBean(dispatcherServlet,"/api/*");
}
2.2 SpringBoot配置文件中配置
可以在application.properties加入配置,如:
server.servlet-path=/api/*
三、SpringMVC执行流程
- 用户请求DispathcerServlet。
- DispatcherServlet接受到请求,将根据请求信息交给处理器映射器。
- 处理器映射器(HandlerMapping)根据用户的url请求查找匹配该url的Handler,并返回一个执行链。
- DispacherServlet再根据执行链请求处理器适配器(HandlerAdapter)。
- 处理器适配器调用相应的handle进行处理。
- 对应的handler处理完成后返回ModelAndVIew给处理器适配器。
- 处理器适配器将接受的ModelAndView返回给DispatcherServlet。
- DispatcherServlet请求视图解析器来解析视图。
- 视图解析器处理完后返回View对象给DispacherServlet。
- 最后前端控制器对View进行视图渲染(即将模型数据填充至视图中)。