文档章节

Spring 官方文档第十六章笔记(2):DispatcherServlet

LiJIaming
 LiJIaming
发布于 2012/06/01 00:04
字数 653
阅读 779
收藏 0

Spring 官方文档第十六章笔记(2):DispatcherServlet


DispatcherServlet的责任:接受请求,根据配置将请求转发给相应的Controller。因为DispatcherServlet和Spring IOC容器集成在一起,所以可以使用Spring IOC容器的功能。


DispatcherServlet处理请求的过程如下:图中的Front Controller就是DispatcherServlet。



配置DispatcherServlet


DispatcherServlet就是一个J2EE servelt,需要在web.xm中就行配置:

<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>/example/*</url-pattern>
    </servlet-mapping>

</web-app>

所有以/example开头的请求,都会被名称为example的DispatcherServlet实例处理。


创建和配置[DispatcherServlet-name]-servlet.xml文件

Spring MVC中,容器使用bean来处理请求,这些bean定义在[DispatcherServlet-name]-servlet.xml文件中。

在Spring MVC中,每一个DispatcherServlet都拥有自己的WebApplicationContext,都继承自root WebApplicationContext。

继承图如下:


Spring MVC在初始化DispatcherServlet时,会读取[DispatcherServlet-name]-servlet.xml 文件,使用里面定义的bean覆盖继承来的同名的bean。

因为定义的DispatcherServlet的名称为example,所以创建example-servlet.xm文件。

DispatcherServlet使用特定的bean来process requests和render the appropriate views。这些特定的bean是Spring MVC的一部分。

可以在[DispatcherServlet-name]-servlet.xml中指定使用哪些bean。Spring MVC默认会配置一些bean,配置哪些bean在org.springframework.web.servlet包中的DispatcherServlet.properties指定。

DispatcherServlet处理请求的流程

1、WebApplicationContext将request封装为一个attribute,提供给controller和流程中其他元素使用。封装时的默认key为DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE。

2、The locale resolver is bound to the request to enable elements in the process to resolve the locale to use when processing the request (rendering the view, preparing data, and so on). 如果不需要,可以不使用。(如何配置,才能不使用?)

3、The theme resolver is bound to the request to let elements such as views determine which theme to use。如果不需要,可以不使用。(如何配置,才能不使用?)

4、如果配置了multipart file resolver,Spring MVC会检查request是否为multiparts,如果是,request会被包装为MultipartHttpServletRequest。

5、查询是否有相应的handler。如果有,则执行handler相关的execution chain(preprocessors, postprocessors, and controllers)。

6、如果返回了Model,则render view。反之则不render。


客制化DispatcherServlet

可以通过在web.xml中使用servelet初始化参数,可以客制化DispatcherServlet。

使用<init-param>进行配置。可以配置的参数如下:

contextClass:实现了WebApplicationContext的类,用于创建Servlet关联的context,默认为XmlWebApplicationContext。

contextConfigLocation:指定配置文件存放路径。可以使用逗号分隔,用于指定多个context。如果在不同的context中定义了相同的bean,使用最后定义的那一个。

namespace:配置WebApplicationContext的namespace,默认为[ DispatcherServlet-name]-servlet。

© 著作权归作者所有

共有 人打赏支持
LiJIaming
粉丝 22
博文 58
码字总数 25865
作品 0
深圳
程序员
私信 提问
Spring 官方文档第十六章笔记(1):SpringMVC简介

Spring Reference第十六章笔记(1)Introduction to Spring Web MVC framework Spring MVC的核心是DispatcherServlet。DispatcherServlet根据配置文件的配置将请求分发给各个 Controller 。 ...

LiJIaming
2012/05/31
0
0
springmvc学习笔记(1)-框架原理和入门配置

springmvc学习笔记(1)-框架原理和入门配置 标签: springmvc [TOC] 本文主要介绍springmvc的框架原理,并通过一个入门程序展示环境搭建,配置以及部署调试。 springmvc是spring框架的一个模块...

brianway
2016/03/08
271
0
springmvc笔记--配置文件简述

一:spring容器的配置文件 1:父spring容器(服务层service,持久层dao)的spring配置文件在<content-param></content-param>中定义 2:springmvc的DispatcherServlet上下文所用到的bean也需...

那位先生
2014/06/12
0
0
深入分析Spring 与 Spring MVC容器

Spring经典详解 Spring事务机制详解 Spring配置事务五种方式 关于Spring加载classpath与classpath*的过程剖析 深入分析Spring 与 Spring MVC容器 Spring系列文章 【第1章 Spring概述与结构】...

陶邦仁
2015/10/30
0
5
SpringMVC源码剖析(二)- DispatcherServlet的前世今生

上一篇文章《SpringMVC源码剖析(一)- 从抽象和接口说起》中,我介绍了一次典型的SpringMVC请求处理过程中,相继粉墨登场的各种核心类和接口。我刻意忽略了源码中的处理细节,只列出最简单的...

相见欢
2013/01/05
0
26

没有更多内容

加载失败,请刷新页面

加载更多

当程序员有了中年危机 你会发现你就是个屁

前言 程序员是一个怎样的存在?引用一句鸡汤的名言来说:你以为你用双手改变了世界,实际上是苍老了自己。为什么我今天会抛出这个话题,其实我也是一个懵懂的少年,我也曾经为了成为一名程序...

架构师springboot
29分钟前
3
0
大型网站B2C商城项目实战+MongoDB+Redis+zookeeper+MySQL

本文列出了当今计算机软件开发和应用领域最关键部分,如果你想保证你现在以及未来的几年不失业,那么你最好跟上这些技术的发展。虽然你不必对这十种技术样样精通,但至少应该对它们非常熟悉。...

java知识分子
29分钟前
2
0
大型企业网络系统集成方案如何设计?

网络系统集成是企业实现无纸化办公和即时通讯办公的基础建设,在以生产效率为核心竞争力的市场中,企业想要快速获取信息并有效提高企业工作效率及业务能力,企业网络系统集成是必不可少的,由...

Java干货分享
30分钟前
1
0
Spring应用学习——IOC

1. Spring简介 1. Spring的出现是为了取代EJB(Enterprise JavaBean)的臃肿、低效、脱离现实的缺点。Spring致力于J2EE应用的各层(表现层、业务层、持久层)的解决方案,Spring是企业应用开...

江左煤郎
31分钟前
1
0
用Redis轻松实现秒杀系统

导论 曾经被问过好多次怎样实现秒杀系统的问题。昨天又在CSDN架构师微信群被问到了。因此这里把我设想的实现秒杀系统的价格设计分享出来。供大家参考。 秒杀系统的架构设计 秒杀系统,是典型...

James-
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部