SpringMVC(三)_注解式控制器详解

        前言:本文首先简单介绍下DispatcherServlet及其特殊的Bean,然后学习如何通过注解的方式实现页面控制器。

本篇文章重点关注以下问题:

  • 简述DispatcherServlet
  • 注解式控制器详解

1. DispatcherServlet概述

       DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:

  • 通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor 拦截器);
  • 通过 HandlerAdapter 支持多种类型的处理器(HandlerExecutionChain中的处理器);
  • 通过ViewResolver 解析逻辑视图名到具体视图实现;
  • 渲染具体的视图等;
  • 本地化解析;
  • 如果执行过程中遇到异常将交给HandlerExceptionResolver 来解析;
  • 文件上传解析,如果请求类型是multipart将通过MultipartResolver 进行文件上传解析。

1.1 DispatcherServlet在web.xml中的配置

<!-- 配置 DispatcherServlet -->
<servlet>
	<servlet-name>dispatcherServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:springmvc.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>dispatcherServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
  • load-on-startup:表示启动容器时初始化该Servlet;
  • url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html 为扩展名的请求。
       注:该 DispatcherServlet 默认使用WebApplicationContext 作为上下文, Spring 默认配置文件为“/WEB-INF/[servlet名字]-servlet.xml”。
       DispatcherServlet的初始化参数:
参数描述
contextClass实现WebApplicationContext接口的类,当前的servlet用它来创建上下文。如果这个参数没有指定, 默认使用XmlWebApplicationContext
contextConfigLocation传给上下文实例(由contextClass指定)的字符串,用来指定上下文的位置。这个字符串可以被分成多个字符串(使用逗号作为分隔符) 来支持多个上下文(在多上下文的情况下,如果同一个bean被定义两次,后面一个优先)。
namespaceWebApplicationContext命名空间。默认值是[server-name]-servlet。

 1.2 上下文关系

       集成Web环境的通用配置:

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>
		classpath:spring-common-config.xml,
		classpath:spring-budget-config.xml
	</param-value>
</context-param>
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

       如上配置是Spring集成Web环境的通用配置;一般用于加载除Web 层的Bean(如DAO、Service等),以便于与其他任何Web 框架集成。

  • contextConfigLocation:表示用于加载Bean的配置文件;
  • contextClass:表示用于加载Bean的ApplicationContext实现类,默认WebApplicationContext。
       上下文创建完毕后,会将该上下文放在ServletContext,ContextLoaderListener初始化的上下文和DispatcherServlet初始化的上下文关系如下图所示:

相关推荐