Spring dispatcherServlet
Spring dispatcherServlet
2023-09-27 14:20:52 时间
在一个工程中如果想要使用 spring MVC的话,只需要两个步骤
在web.xml中配置一个DispatcherServlet。
需要配置一个org.springframework.web.servlet.DispatcherServlet的servlet。
再定义一个dispatcherServlet-servlet.xml配置文件。
在这个配置文件里面只需要扩展一个路径映射关系,定义一个视图解析器,再定义一个业务逻辑的处理流程规则。
这样就可以搞定一个最基本的Spring MVC的应用了。
对于DispatcherServlet初始化的时候初始了哪些东西,这些可以在initStrategies中看到。
protected void initStrategies(ApplicationContext context) { //初始化MultipartResolver,主要是处理文件上传服务。 initMultipartResolver(context); //用于处理应用的国际化问题 initLocaleResolver(context); //用于定义一个主题 initThemeResolver(context); //用于定义用户设置的请求映射关系 initHandlerMappings(context); //用于根据Handler的类型定义不同的处理规则 initHandlerAdapters(context); //当Handler处理错误的时候,通过这个handler来做统一的处理 initHandlerExceptionResolvers(context); //将指定的ViewName按照定义的RequestToViewNameTranslator替换成想要的格式。 initRequestToViewNameTranslator(context); //用于将view解析成页面 initViewResolvers(context); //用于映射flash管理的。 initFlashMapManager(context); }
对于spring MVC框架中,有三个组件是用户必须定义和扩展的:
handlerMapping
定义URL映射规则
handlerAdapter
实现业务逻辑的handler实例对象
ViewResolver
渲染模版资源
看看DispatcherServlet启用的时候做了哪些工作?
public final void init() throws ServletException { if (logger.isDebugEnabled()) { logger.debug("Initializing servlet '" + getServletName() + "'"); } // Set bean properties from init parameters. try { PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties); BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this); ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext()); bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, this.environment)); initBeanWrapper(bw); bw.setPropertyValues(pvs, true); } catch (BeansException ex) { logger.error("Failed to set bean properties on servlet '" + getServletName() + "'", ex); throw ex; } // Let subclasses do whatever initialization they like. initServletBean(); if (logger.isDebugEnabled()) { logger.debug("Servlet '" + getServletName() + "' configured successfully"); } }
调用FrameworkServlet的createWebApplicationContext方法,初始化spring容器。
调用FrameworkServlet的onRefresh方法完成配置文件的加载,配置文件的加载同样是先查找servlet的init-param参数中设置的路径,如果没有,就会根据namespace+Servlet的名称来查找XML文件。
Spring容器加载的时候会调用DispatcherServlet的initStrategies方法来初始化springMVC框架所需要的八个组件,这八个组件对应的八个bean对应都保存在DispatcherServlet类中。
这样:spring MVC的初始化工作就完成了。这样就可以接受你的http请求了。
相关文章
- Spring Boot注解
- spring-cloud-sleuth+zipkin追踪服务实现(一)
- 《Spring 5 官方文档》5. 验证、数据绑定和类型转换(三)
- Spring ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别
- Spring面试专题及答案
- Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
- Spring 实现数据库读写分离
- 【Spring源码】循环依赖如何处理?
- 基于Spring注解搭建SpringMVC项目
- spring属性注入
- Spring Security 一键接入验证码登录和小程序登录
- spring mvc -- HttpMessageConverter、DispatcherServlet、Validator---@RequestBody @respondBody
- SpringMVC、Spring和Struts的区别
- Spring Mvc返回html页面404错误解决记录--转载
- spring mvc DispatcherServlet详解之一---处理请求深入解析(续)
- spring mvc DispatcherServlet详解前传---HttpServletBean类
- spring mvc DispatcherServlet详解之前传---前端控制器架构
- Spring Security入门Demo
- 【转】Spring Boot run方法执行流程
- spring MVC 架构图 中央控制器核心类DispatcherServlet
- Spring boot @Transactional