写在前面的话:
 
最近被项目的代码折腾的死去活来的,其实框架也没有那么难理解,只是自己的Web基础太差,被Request和Response这一对神雕侠侣坑到泪流满面!今天捣腾了一下Spring
Web
MVC,本来想用JSTL的自定义标签开发或者Strust2的框架,但发现框架堆的太多太乱不利于开发效率,所以决定还是先采用Spring
Web
MVC的设计模式来试一试。然后,在网上搜了很多资料之后,我发现,大家基本上都是转发+贴代码,可以学习的东西实在是少之又少,在调试了一天别人的代码
之后,我决定直接去看Spring-Framework的官方文档:spring-framework-reference。由于这份文档目前还没有找到
中文版的,所以我把一些重要的内容按章节翻译下来,一方面留给自己当作参考资料,另一方面也是希望能帮助到想要学习Spring
framework的人。

PS:英语水平不是很高,部分内容翻译不流畅,希望见谅,如有错误,麻烦留言指正,不胜感激。

15.2:DispatcherServlet

和许多其他Web MVC框架一样,Spring Web
MVC是由request驱动,以servlet为中心设计的,而这个中心servlet能够将request分发到不同的控制器
(controllers),然后提供其他的能够用来开发Webapplication的功能模块。然而,Spring的DispatcherServlet能够做的更多,它能够完全和Spring
IoC容器结合,并且能够允许开发人员使用Spring容器中所有的要素;

Request处理Spring Web
MVC工作流的时候,DispatcherServlet所发挥的作用在下面的图中一览无余:

一些精通模式的读者会马上意识到,DispatcherServlet就是“前端控制器”(这是一种Spring Web MVC与其他先进的Web框架所共有的模式)设计模式的一种表达。

DispatcherServlet
本质上就是一个Servlet(继承了HttpServlet基类),在你的Web应用中使用它的时候,要在Web.xml中声明。同样的,你需要在
Web.xml中利用URL映射的方式,将那些你想要交给DispatcherServlet处理的requests进行映射。下面是一个标准的J2EE
Servlet配置:

在一些处理例子中,所有的以.form结束的requests将会被交给上述所声明DispatcherServlet处理。这仅仅是搭建Spring
Web MVC的第一步。你现在需要配置那些在Spring Web
MVC框架中所使用到的各种beans(也包括DispatcherServlet自己)。

在3.13部分,详细讲述了关于添加可用的ApplicationContext的内容,在Web MVC
框架中,每一个DispatcherServlet都有自己的WebApplication-Context,从已经被定义的根应用上下文中继承所有的
beans,这些被继承的beans能够在特定的Servlet范围内被覆盖,开发者也可以给一个给定的Servlet实例定义新的特定范围的
beans。

在初始化DispatcherServlet的基础上,Spring Web
MVC框架开始在你的Web应用WEB-INF的路径下寻找一个叫做[servlet-name]-servlet.xml的文件,然后以重新定义那些已
经以相同的名称在全局范围内定义的任何一个beans的方式创建这些已经在这个xml中被定义的beans。

思考下面的DispatcherServlet声明配置:

在拥有上述的Servlet配置文件之后,你需要在你的应用里创建一个/WEB-INF/golfing-servlet.xml的文件,这个文件将会包
含你的所有Spring Web MVC组件(beans),你能够通过一个servlet初始化参数去更改这个beans的配置文件的绝对路径。

这个WebApplicationContext是从一个拥有一些Web
application的额外必备要素的基本应用上下文ApplicationContext拓展来的。这个Web应用上下文和普通的
ApplicationContext在解决方案的可用性上有些不同。并且能够知道这个Web 应用上下文归属于哪一个Servle。这些WebApplicationContext封装在ServletContext中的,通过使用RequestContextUtils类中的静态方法,你就能够在你需要使用它的时候立马找到这个WebApplicationContext。

Spring中的DispatcherServlet用特殊的beans处理request,并且用合适的视图表现。这些beans是Spring框架中的一部分。你能够在WebApplicationContext中配置它们,就如同你配置其他的bean一样。然而,对于大多数beans来说,敏感的默认行为能够为你提供,因此并不需要你去配置它们。

关于这些beans的描述如下表:

(简单介绍一下:

Handler mappings:操作执行一系列的预处理、后续处理,当得到匹配的参数之后,就执行控制器;

View resolvers:将视图名称解析给视图;

Locale resolver:是一种为了提供国际化视图而对客户端使用的环境场所解析;

Theme resolver:能够解析你的Web 应用使用的主题,举个例子:提供个性化的布局;

Multipart file resolver:包括了能够处理HTML表单上的下载文档;

Handler exception resolvers:映射视图的异常或者实现其他更多更复杂的异常处理代码;

在你建立DispatcherServlet之后,一个请求进入了一个特定的DispatcherServlet,这个DispatcherServlet开始如下面的的过程一样处理这个请求:

1、
WebApplicationContext搜索并且将这个request封装成一个属性,这样控制器和这个过程中的其他元素就能够使用了。这样的封装默
认是由Key—DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE执行的。

2、Locale resolve通过封装请求是为了让解析场所所使用的元素变为可用。这是过程中的可选项。

3、(很简单自己看,翻累了)The theme resolver is bound to the request to
let elements such as views determine which theme to use. If you do
not use themes, you can ignore it.

4、寻找一个合适的Handler,如果这个Handler被找到了,和这个Handler所关联的处理链开始执行,并准备返回一个model或者View。

5、如果返回的是Model,视图就表现出来。如果返回的不是model(也许是因为预处理器或者后续处理拦截了这个请求,也许是因为安全原因),没有视图表现出来,因为request已经被完成了。

翻译:Spring-Framework-Reference Document:15.2-DispatcherServlet的更多相关文章

  1. Spring Framework Reference,Documentation,spring英文文档.pdf 官方文档

    直接上链接:http://files.cnblogs.com/files/kongkaikai/spring-framework-reference.pdf 官网链接:http://docs.spri ...

  2. Spring Framework 4.3.22.RELEASE Reference文档目录

    <Spring Framework Reference Documentation 4.3.22.RELEASE> https://docs.spring.io/spring/docs/4 ...

  3. Spring Boot Reference Guide

    Spring Boot Reference Guide Authors Phillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch,  ...

  4. Spring系列(零) Spring Framework 文档中文翻译

    Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...

  5. Spring Framework 5.0.0.M3中文文档 翻译记录 Part I. Spring框架概览1-2.2

    Part I. Spring框架概览 The Spring Framework is a lightweight solution and a potential one-stop-shop for ...

  6. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->关于spring framework中的beans

    Spring framework中的beans 1.概述 bean其实就是各个类实例化后的对象,即objects spring framework的IOC容器所管理的基本单元就是bean spring ...

  7. Spring Framework 学习笔记——核心技术之Spring IOC

    Spring Framework 官网文档学习笔记--核心技术之Spring IOC 官方文档 spring-framework-5.3.9 1. Spring Framework 核心技术 1.1 ...

  8. Hello Spring Framework——依赖注入(DI)与控制翻转(IoC)

    又到年关了,还有几天就是春节.趁最后还有些时间,复习一下Spring的官方文档. 写在前面的话: Spring是我首次开始尝试通过官方文档来学习的框架(以前学习Struts和Hibernate都大多是 ...

  9. Learn Spring Framework(continue update...)

    Part I. Overview of Spring Framework The Spring Framework is a lightweight(轻量级的) solution and a pote ...

随机推荐

  1. pypcap 安装

    1.下载winpcap开发包 https://www.winpcap.org/devel.htm 下载https://github.com/pynetwork/pypcap/releases最新发布的 ...

  2. MyEclipse部署项目报"Add Deployment". Invalid Subscription Level - Discontinuing this MyEclipse

    "Add Deployment". Invalid Subscription Level - Discontinuing this MyEclipse 猜测应该是MyEclipse ...

  3. expose a port on a living Docker container

    if you have a container that with something running on its port 8000, you can run wget http://contai ...

  4. SQL中判断值是否为NULL

    在 SQL 中,我们如果在操作数据库时使用 WHERE 子句判断一个列的值是否为 NULL,我们不能够使用 column_name=null 来进行判断,这是不正确的,我们应该使用 is null 来 ...

  5. MySQL查找出重复的记录

    问题 查找表中多余的重复记录,重复记录是根据单个字段来判断的.例如:有张表中有uid和uname两个字段,现在需要查找出uname重复的所有数据列.数据表如下: id o_id uname 1 11 ...

  6. %和format的区别

    在python中字符串的格式化分为两种:%和format.那么我们在什么时候来使用它们呢?它们有什么区别呢? 举个例子:我们根据一个坐标来表示一个动作 #定义一个坐标 point = (250,250 ...

  7. Apache配置基于IP的虚拟主机 Apache virtual host configuration is based on the IP

    Step 1: 检查是否开启 httpd-vhosts.conf apache/conf/httpd.conf文件 # Virtual hosts Include conf/extra/httpd-v ...

  8. JS框架的实现

    众多流行的JS库都不同程度的污染了原生JS,最典型的如Prototype ,Mootools .JQuery则完全例外,一个匿名函数执行后便诞生了集所有API为一身的强大 $ .虽然如此,JQuery ...

  9. SpringBoot学习:整合Mybatis,使用HikariCP超高性能数据源

    一.添加pom依赖jar包: <!--整合mybatis--> <dependency> <groupId>org.mybatis.spring.boot</ ...

  10. 洛谷P3369普通平衡树(Treap)

    题目传送门 转载自https://www.cnblogs.com/fengzhiyuan/articles/7994428.html,转载请注明出处 Treap 简介 Treap 是一种二叉查找树.它 ...