【Spring入门-05】DispatcherServlet

DispatcherServlet

Spring MVC 基于模型-视图-控制器(Model-View-Controller,MVC)模式实现,用于构建松散耦合的 Web 应用。

Spring MVC 框架是围绕 DispatcherServlet 设计的,DispatcherServlet 用来处理所有的 HTTP 请求和响应。

DispatcherServlet
DispatcherServlet 传入 HTTP 请求的事件序列

  1. 收到一个 HTTP 请求后,DispatcherServlet 根据 HandlerMapping 来选择并且调用适当的控制器
  2. 控制器接受请求,并基于使用的 GET 或 POST 方法来调用适当的 service 方法。service 方法将设置基于定义的业务逻辑的模型数据,并返回视图名称到 DispatcherServlet 中
  3. DispatcherServlet 会从 ViewResolver 获取帮助,为请求检取定义视图
  4. 一旦确定视图,DispatcherServlet 将把模型数据传递给视图,最后呈现在浏览器中

配置 DispatcherServlet

  1. 通过在 web.xml 配置 DispatcherServlet
  <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
  1. 借助 Servlet3 规范和 Spring 3.1 的功能增强,继承 AbstractAnnotationConfigDispatcherServetInitializer 的任意类会自动配置 DispatcherServlet 和 Spring 应用上下文
public abstract class AbstractAnnotationConfigDispatcherServletInitializer
		extends AbstractDispatcherServletInitializer {

	@Override
	@Nullable
	protected WebApplicationContext createRootApplicationContext() {
		Class<?>[] configClasses = getRootConfigClasses();
		if (!ObjectUtils.isEmpty(configClasses)) {
			AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
			context.register(configClasses);
			return context;
		}
		else {
			return null;
		}
	}

	@Override
	protected WebApplicationContext createServletApplicationContext() {
		AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
		Class<?>[] configClasses = getServletConfigClasses();
		if (!ObjectUtils.isEmpty(configClasses)) {
			context.register(configClasses);
		}
		return context;
	}

	@Nullable
	protected abstract Class<?>[] getRootConfigClasses();
	@Nullable
	protected abstract Class<?>[] getServletConfigClasses();
}

两个应用上下文

  • 当 DispatcherServlet 启动时,会创建 Spring 应用上下文,并加装配置文件或配置类中所声明的 bean,如控制器、视图解析器以及处理器映射。
  • ContextLoaderListener 也会创建 Spring 应用上下文,如驱动应用后端的中间层和数据层组件。

AbstractAnnotationConfigDispatcherServetInitializer 会同时创建 DispatcherServlet 和 ContextLoaderListener。
getRootConfigClasses() 方法返回的带有 @Configuration 注解的类将会用来定义 ContextLoaderListener 应用上下文的 bean。
getServletConfigClasses() 方法返回的带有 @Configuration 注解的类将会用来定义 DispatcherServlet 应用上下文的 bean。

参考

GitHub 代码
Spring 实战(第4版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值