3.2. 重写doService方法
实现了Http请求的处理过程,具体流程如下图,即开头提及的SpringMVC处理Http请求的过程,前面已经介绍过流程,这里不再赘述 。
文章插图
3.3. mvc:annotation-driven 按照之前说的,先看resource/META-INF/spring.handlers文件,这个配置在spring-webmvc模块下,内容为:
http://www.springframework.org/schema/mvc=org.springframework.web.servlet.config.MvcNamespaceHandler
支持的标签如下:文章插图
annotation-driven的解析类为:AnnotationDrivenBeanDefinitionParser,该类主要自动做了如下动作:
- 注入了RequestMappingHandlerMapping和BeanNameUrlHandlerMapping两个HandlerMapping实现
- 注入了RequestMappingHandlerAdapter、HttpRequestHandlerAdapter和SimpleControllerHandlerAdapter三个HandlerAdapter实现 。需要指出的是对于RequestMappingHandlerAdapter,如果没有配置message-converters标签指定消息处理器的话,会根据classpath中存在的包自动注入处理器,包括: ByteArrayHttpMessageConverter StringHttpMessageConverter ResourceHttpMessageConverter SourceHttpMessageConverter AllEncompassingFormHttpMessageConverter 如果存在com.rometools.rome.feed.WireFeed类,则增加AtomFeedHttpMessageConverter、RssChannelHttpMessageConverter 如果存在com.fasterxml.jackson.dataformat.xml.XmlMapper类,则增加MappingJackson2XmlHttpMessageConverter 如果存在javax.xml.bind.Binder类,则增加Jaxb2RootElementHttpMessageConverter 如果存在com.fasterxml.jackson.databind.ObjectMapper和com.fasterxml.jackson.core.JsonGenerator,则增加MappingJackson2HttpMessageConverter 如果存在com.google.gson.Gson,则增加GsonHttpMessageConverter
- 注入了ExceptionHandlerExceptionResolver用于实现@ExceptionHandler注解、注入了ResponseStatusExceptionResolver用于实现@ResponseStatus和DefaultHandlerExceptionResolver
- 注入了AntPathMatcher和UrlPathHelper用于路径解析
4. WebApplicationInitializer Servlet3.0+提供了ServletContainerInitializer接口,用于在web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等 。
每个框架要使用ServletContainerInitializer就必须在对应的jar包的META-INF/services 目录创建一个名为javax.servlet.ServletContainerInitializer的文件,文件内容指定具体的ServletContainerInitializer实现类 。spring-web模块下便存在该配置:
文章插图
内容为:
org.springframework.web.SpringServletContainerInitializer
SpringServletContainerInitializer的主要功能是加载classpath下的所有WebApplicationInitializer实现类(非接口、非抽象类),按照@Order进行排序后依次执行WebApplicationInitializer的onStartup方法 。spring-web模块提供的抽象类实现AbstractContextLoaderInitializer能够不用web.xml配置增加RootContext;提供的抽象类实现AbstractDispatcherServletInitializer能够不用web.xml配置增加DispatcherServlet 。当然更重要的实现是SpringBoot中的实现,这个后续介绍SpringBoot时再提 。
更多原创内容请搜索微信公众号:啊驼(doubaotaizi)
【SpringMVC加载流程】
推荐阅读
- 在淘宝开店流程 淘宝网店怎么开的流程?
- 开淘宝网店的流程 淘宝店铺开设流程
- 淘宝店铺怎么开店流程 淘宝开店的具体操作流程
- 淘宝开店的具体操作流程 开淘宝店的流程和步骤
- 公司名称核准流程是怎么样的 企业名称预先核准申请书
- 茶行业如何利用全流程服务体系实现品牌突围
- ICP许可证申请流程
- 2020淘宝开店流程及费用 开淘宝店要钱吗2020
- 【婚礼流程表】婚礼当天的详细流程表
- 开淘宝店铺需要什么流程 开设淘宝店的主要流程