`
prodream
  • 浏览: 106185 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SPRING分发器(DispatcherServlet)

阅读更多
分发器(DispatcherServlet

Spring的web框架——象其它web框架一样——是一个请求驱动的web框架,其设计围绕一个能将请求分发到控制器的servlet,它也提供其它功能帮助web应用开发。然而,Spring的DispatcherServlet所做的不仅仅是这些。它和Spring的ApplicationContext完全集成在一起,允许你使用Spring的其它功能。

DispatcherServlet和其它servlet一样定义在你的web应用的web.xml文件里。DispatcherServlet处理的请求必须在同一个web.xml文件里使用url-mapping定义映射。

<web-app>
    ...
    <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>    
</web-app>

在上面的例子里,所有以.form结尾的请求都会由DispatcherServlet处理。接下来需要配置DispatcherServlet本身。正如在第3.10节 “介绍ApplicationContext”中所描述的,Spring中的ApplicationContexts可以被限制在不同的作用域。在web框架中,每个DispatcherServlet有它自己的WebApplicationContext,它包含了DispatcherServlet配置所需要的bean。DispatcherServlet 使用的缺省BeanFactory是XmlBeanFactory,并且DispatcherServlet在初始化时会在你的web应用的WEB-INF目录下寻找[servlet-name]-servlet.xml文件。DispatcherServlet使用的缺省值可以使用servlet初始化参数修改(详细信息如下)。

WebApplicationContext仅仅是一个拥有web应用必要功能的普通ApplicationContext。它和一个标准的ApplicationContext的不同之处在于它能够解析主题(参考第12.7节 “主题使用”),并且它知道和那个servlet关联(通过到ServletContext的连接)。WebApplicationContext被绑定在ServletContext上,当你需要的时候,可以使用RequestContextUtils找到WebApplicationContext。

Spring的DispatcherServlet有一组特殊的bean,用来处理请求和显示相应的视图。这些bean包含在Spring的框架里,(可选择)可以在WebApplicationContext中配置,配置方式就象配置其它bean的方式一样。这些bean中的每一个都在下面被详细描述。待一会儿,我们就会提到它们,但这里仅仅是让你知道它们的存在以便我们继续讨论DispatcherServlet。对大多数bean,都提供了缺省值,所有你不必要担心它们的值。

表12.1.WebApplicationContext中特殊的bean

名称 解释
处理器映射(handler mapping(s)) (第12.4节 “处理器映射”) 前处理器,后处理器和控制器的列表,它们在符合某种条件下才被执行(例如符合控制器指定的URL)
控制器(controller(s)) (第12.3节 “控制器”) 作为MVC三层一部分,提供具体功能(或者至少能够访问具体功能)的bean
视图解析器(view resolver) (第12.5节 “视图与视图解析”) 能够解析视图名,在DispatcherServlet解析视图时使用
本地化信息解析器(locale resolver) (第12.6节 “使用本地化信息”) 能够解析用户正在使用的本地化信息,以提供国际化视图
主题解析器(theme resolver) (第12.7节 “主题使用”) 能够解析你的web应用所使用的主题,比如,提供个性化的布局
multipart解析器 (第12.8节 “Spring对multipart(文件上传)的支持”) 提供HTML表单文件上传功能
处理器异常解析器(handlerexception resolver) (第12.9节 “处理异常”) 将异常对应到视图,或者实现某种复杂的异常处理代码

当DispatcherServlet被安装配置好,DispatcherServlet一接收到请求,处理就开始了。下面的列表描述了DispatcherServlet处理请求的全过程:

  1. 搜索WebApplicationContext,并将它绑定到请求的一个属性上,以便控制器和处理链上的其它处理器能使用WebApplicationContext。缺省它被绑定在DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE这个关键字上

  2. 绑定本地化信息解析器到请求上,这样使得处理链上的处理器在处理请求(显示视图,准备数据等等)时能解析本地化信息。如果你不使用本地化信息解析器,它不会影响任何东西,忽略它就可以了

  3. 绑定主题解析器到请求上,使得视图决定使用哪个主题(如果你不需要主题,可以忽略它,解析器仅仅是绑定,如果你不使用它,不会影响任何东西)

  4. 如果multipart解析器被指定,请求会被检查是否使用了multipart,如果是,multipart解析器会被保存在MultipartHttpServletRequest中以便被处理链中的其它处理器使用(下面会讲到更多有关multipart处理的内容)

  5. 搜索合适的处理器。如果找到,执行和这个处理器相关的执行链(预处理器,后处理器,控制器),以便准备模型数据

  6. 如果模型数据被返还,就使用配置在WebApplicationContext中的视图解析器,显示视图,否则(可能是安全原因,预处理器或后处理器截取了请求),虽然请求能够提供必要的信息,但是视图也不会被显示。

在请求处理过程中抛出的异常可以被任何定义在WebApplicationContext中的异常解析器所获取。使用这些异常解析器,你可以在异常抛出时定义特定行为。

Spring的DispatcherServlet也支持返回Servlet API定义的last-modification-date,决定某个请求最后修改的日期很简单。DispatcherServlet会首先寻找一个合适的处理器映射,检查处理器是否实现了LastModified接口,如果是,将long getLastModified(request)的值返回给客户端。

你可以在web.xml文件中添加上下文参数或servlet初始化参数定制Spring的DispatcherServlet。下面是一些可能的参数。

表12.2.DispatcherServlet初始化参数

参数 解释
contextClass 实现WebApplicationContext的类,当前的servlet用它来实例化上下文。如果这个参数没有指定,使用XmlWebApplicationContext
contextConfigLocation 传给上下文实例(由contextClass指定)的字符串,用来指定上下文的位置。这个字符串可以被分成多个字符串(使用逗号作为分隔符)来支持多个上下文(在多上下文的情况下,被定义两次的bean中,后面一个优先)
namespace WebApplicationContext命名空间。缺省是[server-name]-servlet
分享到:
评论

相关推荐

    Spring源码学习十:DispatcherServlet请求分发源码分析1

    总的来说,Spring MVC的DispatcherServlet通过一系列步骤,从初始化时的bean扫描到请求到达时的分发处理,确保了请求能够准确地传递到正确的Controller方法。这一过程涉及到bean的扫描、请求映射的建立、拦截器的...

    spring MVC 配置文档

    一,配置分发器 DispatcherServlet 是Spring MVC 的入口 所有进入Spring Web 的 Request 都经过 DispatcherServlet 需要在 web.xml 中注册 DispatcherServlet &lt;servlet&gt; &lt;servlet-name&gt;dispatherContext...

    Spring MVC之DispatcherServlet_动力节点Java学院整理

    DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。  “某某规则”:是根据...

    Spring源码学习九:DispatcherServlet初始化源码分析1

    DispatcherServlet是SpringMVC的核心分发器,它实现了请求分发,是处理请求的入口,本篇将深入源码分析它的初始化过程。 首先,从DispatcherServlet的名称上可以看出它是一个Servlet,通过一张图来看一下它的实现...

    Spring mvc、 Spring、 Spring jdbc 整合 demo

    Spring MVC通过DispatcherServlet作为入口点,管理多个处理器映射器和视图解析器,实现灵活的请求分发。 2. **Spring Core** Spring Core是Spring框架的基础,提供了依赖注入(Dependency Injection, DI)和面向切...

    spring mvc DispatcherServlet之前端控制器架构详解

    DispatcherServlet是Spring MVC框架中的核心组件,作为前端控制器,负责拦截和分发请求到不同的控制器去处理。下面我们将详细介绍DispatcherServlet的架构和生命周期。 生命周期 DispatcherServlet的生命周期可以...

    Spring MVC+ Spring+ Mybatis 框架搭建

    Spring MVC通过DispatcherServlet作为前端控制器,接收请求并分发给相应的处理器(Controller)。处理器执行业务逻辑后,将结果返回给ModelAndView对象,再由视图解析器渲染视图。此外,Spring MVC还支持注解驱动,...

    spring4 、 springmvc4.2、springjdbc

    Spring MVC通过DispatcherServlet作为入口点,接收请求并分发到对应的控制器(Controller)。同时,它还支持多种视图技术,如JSP、FreeMarker、Thymeleaf等,使得开发者可以选择最适合他们项目的视图技术。 Spring ...

    Spring mvc + Spring + Spring jdbc 整合实例源码

    Spring MVC通过DispatcherServlet作为入口,接收请求并分发给相应的控制器(Controller)。控制器处理业务逻辑后,将结果传递给视图(View)进行渲染,最后返回给客户端。 在Spring MVC中,我们通常使用@Controller...

    Spring-MVC-DispatcherServlet-Example:Maven项目

    1. **DispatcherServlet** - 负责请求分发,它是Spring MVC的入口点。当Web服务器接收到请求时,DispatcherServlet会拦截请求,然后根据请求映射信息找到对应的处理器(Controller)。 2. **Controller** - 控制器...

    Spring MVC学习之DispatcherServlet请求处理详析

    总的来说,DispatcherServlet是Spring MVC中的核心组件,它通过统一的处理逻辑和灵活的组件配置,实现了HTTP请求的高效分发和处理。理解DispatcherServlet的工作流程,对于深入掌握Spring MVC框架至关重要。在实际...

    SpringTest.zip

    Spring MVC通过DispatcherServlet作为前端控制器,处理HTTP请求,并根据请求映射分发到相应的处理器。 二、Spring MVC 架构 1. DispatcherServlet:作为核心控制器,接收所有HTTP请求,然后转发给合适的处理器。 2....

    spring4.2,spring mvc,spring data,jpa,hibernate的程序构架

    Spring MVC通过DispatcherServlet作为入口点,处理HTTP请求,并将请求分发给相应的处理器。它还支持视图解析,如JSP、Thymeleaf等,以及模型-视图-适配器(MVA)和命令式模式。 Spring Data则是一个强大的模块,其...

    spring-mvc-官方中文文档

    Spring MVC 通过 DispatcherServlet 进行请求分发,并使用 HandlerMapping 和 HandlerAdapter 来管理和调用处理器。 2. **DispatcherServlet**:作为 Spring MVC 的核心组件,DispatcherServlet 负责接收 HTTP 请求...

    spring4.3.9最全jar包下载

    Spring MVC通过DispatcherServlet作为前端控制器,接收请求并分发给相应的处理器。 3. **Spring Web**: - Spring Web模块提供了与Web相关的上下文和实用工具,包括Servlet监听器、过滤器等,这些在Web应用程序中...

    Spring MVC 教程快速入门 深入分析

    三、Spring MVC核心流程图:描述了Spring MVC处理请求的流程,包括前端控制器接收请求,经过分发器分发给具体的控制器,然后由控制器处理业务逻辑,最后将结果返回给用户。 四、Spring MVC DispatcherServlet说明:...

    (最新)spring+spring mvc+mybatis 整合需要的jar包

    Spring MVC通过DispatcherServlet作为前端控制器,负责接收请求并分发到相应的处理器。模型层通常由Spring管理的Bean组成,视图层则可以是JSP、Thymeleaf等。 **MyBatis**: MyBatis是一个持久层框架,它简化了...

    自定义MVC框架(spring)

    综上所述,自定义Spring MVC框架涉及到的主要知识点包括:MVC模式、请求分发、控制器设计、模型管理、视图解析、配置与依赖注入,以及Web应用的基本文件结构。通过实践这个项目,开发者可以深入理解Spring MVC的工作...

    框架springmvc3.2+spring3.2+mybatis3.11整合附带jar包

    Spring MVC通过DispatcherServlet作为前端控制器,接收HTTP请求,并分发给相应的处理器。 2. **Spring**: Spring是一个全面的后端开发框架,提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-...

Global site tag (gtag.js) - Google Analytics