博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring mvc - 2、DispatcherServlet
阅读量:4625 次
发布时间:2019-06-09

本文共 4659 字,大约阅读时间需要 15 分钟。

DispatcherServlet

 

DispatcherServlet 应用了 Front Controller  前端控制器模式(Front Controller Pattern)。提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处

(前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序)

DispatcherServlet主要职责:

DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:

1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;

2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);

3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);

4、通过ViewResolver解析逻辑视图名到具体视图实现;

5、本地化解析;

6、渲染具体的视图等;

7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析

DispatcherServlet配置:

 

  配置在xml文件中

1     
2
3
4
DispatcherServlet
5
org.springframework.web.servlet.DispatcherServlet
6
7
8
contextConfigLocation
9
classpath:spring-servlet-config.xml
10
11
12
1
13
14
15
DispatcherServlet
16
17
/
18

 

集成Web环境的通用配置:

 

1     
4
5
6
contextConfigLocation
7
8 classpath:spring-context-mybatis.xml 9
10
11
12
org.springframework.web.context.ContextLoaderListener
13

 

ContextLoaderListener初始化的上下文和DispatcherServlet初始化的上下文关系,如图3-1 (此图来自网络,侵删)

 

 

  DispatcherServlet初始化

整个DispatcherServlet初始化的过程和做了些什么事情,具体主要做了如下两件事情:

1、初始化Spring Web MVC使用的Web上下文,并且可能指定父容器为(ContextLoaderListener加载了根上下文);

2、初始化DispatcherServlet使用的策略,如HandlerMapping、HandlerAdapter等。

 

  

  DispatcherServlet默认配置

DispatcherServlet.properties

# Default implementation classes for DispatcherServlet's strategy interfaces.# Used as fallback when no matching beans are found in the DispatcherServlet context.# Not meant to be customized by application developers.org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolverorg.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolverorg.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\	org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMappingorg.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\	org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\	org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapterorg.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\	org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\	org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolverorg.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslatororg.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolverorg.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

 

从如上配置可以看出DispatcherServlet在启动时会自动注册这些特殊的Bean,无需我们注册,如果我们注册了,默认的将不会注册。

 

因此如BeanNameUrlHandlerMapping、SimpleControllerHandlerAdapter是不需要注册的,DispatcherServlet默认会注册这两个Bean。

 

 

DispatcherServlet中使用的特殊的Bean

 

DispatcherServlet默认使用WebApplicationContext作为上下文,因此我们来看一下该上下文中有哪些特殊的Bean:

1、Controller处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理;

2、HandlerMapping请求到处理器的映射,如果映射成功返回一个HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象;如BeanNameUrlHandlerMapping将URL与Bean名字映射,映射成功的Bean就是此处的处理器;

3、HandlerAdapterHandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;如SimpleControllerHandlerAdapter将对实现了Controller接口的Bean进行适配,并且掉处理器的handleRequest方法进行功能处理;

4、ViewResolverViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为jsp视图;

5、LocalResover本地化解析,因为Spring支持国际化,因此LocalResover解析客户端的Locale信息从而方便进行国际化;

6、ThemeResovler主题解析,通过它来实现一个页面多套风格,即常见的类似于软件皮肤效果;

7、MultipartResolver文件上传解析,用于支持文件上传;

8HandlerExceptionResolver处理器异常解析,可以将异常映射到相应的统一错误界面,从而显示用户友好的界面(而不是给用户看到具体的错误信息);

9RequestToViewNameTranslator当处理器没有返回逻辑视图名等相关信息时,自动将请求URL映射为逻辑视图名;

10FlashMapManager用于管理FlashMap的策略接口,FlashMap用于存储一个请求的输出,当进入另一个请求时作为该请求的输入,通常用于重定向场景,后边会细述

 

转载于:https://www.cnblogs.com/myfield/p/6394272.html

你可能感兴趣的文章
Web接口测试-HttpClient
查看>>
Linux简单入门
查看>>
【Linux】Linux统计文件夹、文件数量的命令
查看>>
vscode git
查看>>
Python虚拟环境的配置
查看>>
【Sort】希尔排序
查看>>
机器人关节数学模型
查看>>
解决无法wifi上网的问题
查看>>
uvalive 5731 Qin Shi Huang’s National Road System
查看>>
SULLEY安装与使用
查看>>
洛谷 1144 最短路计数 bfs
查看>>
C++ 单例模式
查看>>
C++ 我想这样用(四)
查看>>
T-2-java面向对象
查看>>
URL重定向及跳转漏洞
查看>>
springboot使用fastjson中文乱码解决方法 【转载】
查看>>
JavaScript判断数组是否存在key
查看>>
抽象类和接口
查看>>
PAT-乙级-1048 数字加密
查看>>
Codeforces Round 492 (Div.1)
查看>>