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处理请求的全过程:
-
搜索WebApplicationContext,并将它绑定到请求的一个属性上,以便控制器和处理链上的其它处理器能使用WebApplicationContext。缺省它被绑定在DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE这个关键字上
-
绑定本地化信息解析器到请求上,这样使得处理链上的处理器在处理请求(显示视图,准备数据等等)时能解析本地化信息。如果你不使用本地化信息解析器,它不会影响任何东西,忽略它就可以了
-
绑定主题解析器到请求上,使得视图决定使用哪个主题(如果你不需要主题,可以忽略它,解析器仅仅是绑定,如果你不使用它,不会影响任何东西)
-
如果multipart解析器被指定,请求会被检查是否使用了multipart,如果是,multipart解析器会被保存在MultipartHttpServletRequest中以便被处理链中的其它处理器使用(下面会讲到更多有关multipart处理的内容)
-
搜索合适的处理器。如果找到,执行和这个处理器相关的执行链(预处理器,后处理器,控制器),以便准备模型数据
-
如果模型数据被返还,就使用配置在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-MessageSource
2010-05-05 15:41 1715将Spring自带的org.springframework.c ... -
spring的扩展点--PropertyPlaceholderConfigurer
2010-05-05 14:01 1071它的作用是一个资源属性的配置器,能够将BeanFactory的 ... -
ApplicationContextAware
2010-03-30 14:36 1148JDK-doc 2.5.6 Interface Applic ... -
org.springframework.beans.factory.BeanCreationException: Error creating bean wit
2010-01-24 18:45 3810org.springframework.beans.facto ... -
SPRING框架的7大模块
2008-08-23 16:48 981核心容器:核心容器 ... -
使用Spring编写第一个程序-spring初级体验
2008-08-23 16:52 783对最原始的HelloWorld.java ... -
Spring中BeanFactory配置文件的元素解析
2008-08-24 11:39 737<?xml version="1.0" ... -
使用Lookup方法注射方法
2008-08-24 17:46 687spring方法解决下面的问题:一个singleton bea ... -
替换任意的方法
2008-08-24 18:06 825在spring中不但提供了Lookup方法来注射方法,还提供了 ... -
一个普通表单控制器(SimpleFornController)处理视图流转的例子
2008-08-26 09:40 777Spring附有一些简单的窗体处理handler,这些hand ... -
SimpleFormController简单表单控制器的处理流程
2008-08-26 10:19 8691.当表单控制器接 ... -
Spring的View和ViewResolver的使用
2008-09-11 23:15 1526打开Spring的源代码,我们可以在org.springfra ... -
ModelAndView解析
2008-09-16 09:39 1264查看spring的帮助文档得到以下信息: org.sprin ... -
spring验证器Validator接口
2008-09-16 21:30 2623spring2.0 Validator接口 ... -
spring web mvc配置
2008-09-17 11:04 1122spring内建一个请求驱动 ... -
spring视图解析器
2008-09-17 15:21 1343spring最常用的JSP/JSTL视图解析器是: Int ... -
Spring dataSource配置
2010-01-23 13:40 1812不管通过何种持久化 ... -
AOP(Aspect Oriented Programming ) 面向切面编程
2010-01-23 13:38 830AOP是什么? AOP是OO ...
相关推荐
总的来说,Spring MVC的DispatcherServlet通过一系列步骤,从初始化时的bean扫描到请求到达时的分发处理,确保了请求能够准确地传递到正确的Controller方法。这一过程涉及到bean的扫描、请求映射的建立、拦截器的...
一,配置分发器 DispatcherServlet 是Spring MVC 的入口 所有进入Spring Web 的 Request 都经过 DispatcherServlet 需要在 web.xml 中注册 DispatcherServlet <servlet> <servlet-name>dispatherContext...
DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。 “某某规则”:是根据...
DispatcherServlet是SpringMVC的核心分发器,它实现了请求分发,是处理请求的入口,本篇将深入源码分析它的初始化过程。 首先,从DispatcherServlet的名称上可以看出它是一个Servlet,通过一张图来看一下它的实现...
Spring MVC通过DispatcherServlet作为入口点,管理多个处理器映射器和视图解析器,实现灵活的请求分发。 2. **Spring Core** Spring Core是Spring框架的基础,提供了依赖注入(Dependency Injection, DI)和面向切...
DispatcherServlet是Spring MVC框架中的核心组件,作为前端控制器,负责拦截和分发请求到不同的控制器去处理。下面我们将详细介绍DispatcherServlet的架构和生命周期。 生命周期 DispatcherServlet的生命周期可以...
Spring MVC通过DispatcherServlet作为前端控制器,接收请求并分发给相应的处理器(Controller)。处理器执行业务逻辑后,将结果返回给ModelAndView对象,再由视图解析器渲染视图。此外,Spring MVC还支持注解驱动,...
Spring MVC通过DispatcherServlet作为入口点,接收请求并分发到对应的控制器(Controller)。同时,它还支持多种视图技术,如JSP、FreeMarker、Thymeleaf等,使得开发者可以选择最适合他们项目的视图技术。 Spring ...
Spring MVC通过DispatcherServlet作为入口,接收请求并分发给相应的控制器(Controller)。控制器处理业务逻辑后,将结果传递给视图(View)进行渲染,最后返回给客户端。 在Spring MVC中,我们通常使用@Controller...
1. **DispatcherServlet** - 负责请求分发,它是Spring MVC的入口点。当Web服务器接收到请求时,DispatcherServlet会拦截请求,然后根据请求映射信息找到对应的处理器(Controller)。 2. **Controller** - 控制器...
总的来说,DispatcherServlet是Spring MVC中的核心组件,它通过统一的处理逻辑和灵活的组件配置,实现了HTTP请求的高效分发和处理。理解DispatcherServlet的工作流程,对于深入掌握Spring MVC框架至关重要。在实际...
Spring MVC通过DispatcherServlet作为前端控制器,处理HTTP请求,并根据请求映射分发到相应的处理器。 二、Spring MVC 架构 1. DispatcherServlet:作为核心控制器,接收所有HTTP请求,然后转发给合适的处理器。 2....
Spring MVC通过DispatcherServlet作为入口点,处理HTTP请求,并将请求分发给相应的处理器。它还支持视图解析,如JSP、Thymeleaf等,以及模型-视图-适配器(MVA)和命令式模式。 Spring Data则是一个强大的模块,其...
Spring MVC 通过 DispatcherServlet 进行请求分发,并使用 HandlerMapping 和 HandlerAdapter 来管理和调用处理器。 2. **DispatcherServlet**:作为 Spring MVC 的核心组件,DispatcherServlet 负责接收 HTTP 请求...
三、Spring MVC核心流程图:描述了Spring MVC处理请求的流程,包括前端控制器接收请求,经过分发器分发给具体的控制器,然后由控制器处理业务逻辑,最后将结果返回给用户。 四、Spring MVC DispatcherServlet说明:...
Spring MVC通过DispatcherServlet作为前端控制器,负责接收请求并分发到相应的处理器。模型层通常由Spring管理的Bean组成,视图层则可以是JSP、Thymeleaf等。 **MyBatis**: MyBatis是一个持久层框架,它简化了...
Spring MVC通过DispatcherServlet作为前端控制器,接收请求并分发给相应的处理器。 3. **Spring Web**: - Spring Web模块提供了与Web相关的上下文和实用工具,包括Servlet监听器、过滤器等,这些在Web应用程序中...
综上所述,自定义Spring MVC框架涉及到的主要知识点包括:MVC模式、请求分发、控制器设计、模型管理、视图解析、配置与依赖注入,以及Web应用的基本文件结构。通过实践这个项目,开发者可以深入理解Spring MVC的工作...
Spring MVC通过DispatcherServlet作为前端控制器,接收HTTP请求,并分发给相应的处理器。 2. **Spring**: Spring是一个全面的后端开发框架,提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-...