浅析DispatcherServlet

来源:互联网 发布:怎么下载淘宝号 编辑:程序博客网 时间:2024/06/05 14:44

前端控制器DispatcherServlet截获请求后做了什么工作呢?DispatcherServlet又是如何分配请求呢?
分析DispatcherServlet的源码如下:

protected viod initStrategies(ApplicationContext context){    initMultipartResolver(context);//初始化上传文件解析器    initLocaleResolver(context);//初始化本地解析器    initThemeResolver(context);//初始化主题解析器    initHandlerMapping(context);    //初始化处理器映射器,将请求映射到处理器    initHandlerAdapters(context);//初始化处理器适配器    initHandlerExceptionResolver(context);    //初始化处理器异常解析器,如果执行过程中遇到异常将交给HandlerExceptionResolver来解析    initRequestToViewNameTranslator(context);    //初始化请求到具体视图名称解析器    initViewResolvers(context);    //初始化视图解析器,通过ViewResolver解析逻辑视图名到具体视图实现    initFlshMapManager(context);//初始化flash映射管理}

initStrategies方法将在WebApplicationContext初始化后自动执行,自动扫描上下文的Bean,根据名称或者类型匹配的机制查找自定义组件,如果没有找到则会装配一套Spring的默认组件.在org.springframework.web.servlet路径下有一个DispatcherServlet.properties配置文件,该文件指定了DispatcherServlet所使用的默认组件.

# 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.AcceptHeaderLocaleResolver//主题解析器org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver//处理器映射(2个)org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\    org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping//处理器适配器 3org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter//异常处理器 3org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\    org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\    org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver//视图名解析器 org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator//视图解析器org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver//FlashMap映射管理org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

如果开发者希望使用自定义的类型组件,则只需要在Spring配置文件中配置自定义的Bean组件即可.
Spring MVC如果发现上下文中有用户自定义的组件,就不会使用默认的组件.
以下是DispatcherServlet装配每种组件的细节

–>本地化解析器。 只允许一个实例

1)查找名为localeResolver、类型为.LocaleResolver的bean作为该类型组件。2)如果没有找到则使用默认的实现类AcceptHeaderLocaleResolver作为该类型组件

–>主题解析器。只允许一个实例

1)

原创粉丝点击