`

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

阅读更多

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

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

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

1. DispatcherServlet概述

        DispatcherServlet是前端控制器设计模式的实现(见http://super-wangj.iteye.com/blog/2388441),提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。

       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被定义两次,后面一个优先)。
namespace WebApplicationContext命名空间。默认值是[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初始化的上下文关系如下图所示:
         从图中可以看出,ContextLoaderListener 初始化的上下文加载的Bean 是对于整个应用程序共享的,不管是使用什么表现层技术,一般如DAO层、Service层Bean;
        DispatcherServlet 初始化的上下文加载的Bean 是只对Spring Web MVC 有效的Bean,如Controller、HandlerMapping、HandlerAdapter等等,该初始化上下文应该只加载Web相关组件。
        整个DispatcherServlet初始化的过程主要做了如下两件事情
  1. 初始化Spring Web MVC使用的Web 上下文,并且可能指定父容器为(ContextLoaderListener加载了根上下文);
  2. 初始化DispatcherServlet使用的策略,如HandlerMapping、HandlerAdapter等。

 1.3 DispatcherServlet中使用的特殊的Bean

          DispatcherServlet默认使用WebApplicationContext作为上下文,其上下文中特殊的Bean如下:

  • Controller:处理器/页面控制器,做的是MVC中的C 的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理
  • HandlerMapping请求到处理器的映射,如果映射成功返回一个HandlerExecutionChain 对象(包含一个Handler处理器(页面控制器)对象、多个andlerInterceptor 拦截器)对象;如BeanNameUrlHandlerMapping将URL与Bean名字映射,映射成功的Bean就是此处的处理器;
  • HandlerAdapter:HandlerAdapter 将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;如SimpleControllerHandlerAdapter将对实现了Controller接口的Bean进行适配,并且调用处理器的handleRequest方法进行功能处理;
  • ViewResolver:ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为jsp视图;
  • LocalResover:本地化解析,因为Spring支持国际化,因此LocalResover 解析客户端的Locale信息从而方便进行国际化;
  • ThemeResovler:主题解析,通过它来实现一个页面多套风格,即常见的类似于软件皮肤效果;
  • MultipartResolver:文件上传解析,用于支持文件上传;
  • HandlerExceptionResolver处理器异常解析,可以将异常映射到相应的统一错误界面,从而显示用户友好的界面(而不是给用户看到具体的错误信息);
  • RequestToViewNameTranslator:当处理器没有返回逻辑视图名等相关信息时,自动将请求URL 映射为逻辑视图名;
  • FlashMapManager:用于管理FlashMap的策略接口,FlashMap用于存储一个请求的输出,当进入另一个请求时作为该请求的输入,通常用于重定向场景,后边会细述。

 2. 注解式控制器

        Spring3.1之后,SpringMVC使用处理器映射RequestMappingHandlerMapping处理器适配器RequestMappingHandlerAdapter来开启支持@Controller 和 @RequestMapping 注解的处理器。

2.1 常用注解

注解 作用
@Controller 用于标识是处理器类;
@RequestMapping 请求到处理器功能方法的映射规则;
@RequestParam 请求参数到处理器功能处理方法的方法参数上的绑定;
@ModelAttribute 请求参数到命令对象的绑定;
@SessionAttributes 声明session 级别存储的属性,放置在处理器类上,通常列出模型属性(如@ModelAttribute)对应的名称,则这些属性会透明的保存到session 中;
@InitBinder 自定义数据绑定注册支持,用于将请求参数转换到命令对象属性的对应类型;
@CookieValue cookie 数据到处理器功能处理方法的方法参数上的绑定;
@RequestHeader 请求头(header)数据到处理器功能处理方法的方法参数上的绑定;
@RequestBody 请求的body体的绑定(通过HttpMessageConverter 进行类型转换;
@ResponseBody 处理器功能处理方法的返回值作为响应体(通过HttpMessageConverter进行类型转换)
@ResponseStatus 定义处理器功能处理方法/异常处理器返回的状态码和原因;
@ExceptionHandler 注解式声明异常处理器;
@PathVariable 请求URI 中的模板变量部分到处理器功能处理方法的方法参数上的绑定,从而支持RESTful 架构风格的URI;

 

2.2 配置控制器样例

2.2.1 配置web.xml

<!-- 配置Spring初始化参数(配置文件位置). -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- 配置Spring监听器. -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置SpringMVC -->
<servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/spring-mvc.xml</param-value>
    </init-param>
     <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

 2.2.2 创建 Spring MVC 配置文件

<!-- 注解扫描包(SpringMVC只关注控制器类上的注解) -->
<context:component-scan base-package="com.wj.web" />

<!-- 开启注解 -->
<mvc:annotation-driven />

<!-- 静态资源(js/image)的访问 -->
<!-- 针对SpringMVC拦截所有请求的情况下才需要配置,以防对静态资源的访问也被拦截. -->
<!-- <mvc:resources location="/js/" mapping="/js/**"/> -->

<!-- 定义视图解析器(此处针对Jsp) -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 所有URI的前缀. -->
    <property name="prefix" value="/jsp/"></property>
    <!-- 所有URI的后缀. -->
    <property name="suffix" value=".jsp"></property>
</bean>

 2.2.3 处理器定义

@Controller                     // 指明当前类是控制器
@RequestMapping("/jsp/user")    // ①处理器的通用映射前缀
public class UserController {


    @RequestMapping("/getAllUser.action") 	// ②相对于①处的映射URL进行窄化
    public String getAllUser(HttpServletRequest request){
        List<User> userList = userService.getAllUser();
        request.setAttribute("userList", userList);
        return "user/index";
    }
}

 

 

 

  • 大小: 40.2 KB
分享到:
评论

相关推荐

    SpringMVC注解驱动的控制器详解

    SpringMVC注解驱动的控制器详解,具体效果与过程看博文 http://blog.csdn.net/evankaka/article/details/45562951

    springmvc常用注解标签详解

    在 SpringMVC 框架中,注解标签扮演着非常重要的角色,它们使得开发者可以轻松地定义控制器、请求映射、依赖注入等内容。在本文中,我们将详细地解释 SpringMVC 中常用的注解标签,包括@Controller、@RequestMapping...

    SpringMVC教程

    非常棒的SpringMVC教程, 简明 透彻 涵盖了基本工作中都会接触到的知识 每一章都是一个PDF,效果非常清楚 即有Spring2.5的 Controller接口的老版本 ...第六章 注解式控制器详解5(SpringMVC强大的数据绑定2).pdf

    demo_SpringMVC.rar_+SpringMVC demo_DEMO_spring mvc_spring mvc de

    Spring MVC 是 Spring 框架的重要组成部分,它是一个用于构建 Web 应用程序的模型-视图-控制器(MVC)架构。本示例项目 "demo_SpringMVC" 提供了一个基础的 Spring MVC 示例,旨在帮助开发者了解和学习如何使用该...

    源代码下载 第六章 注解式控制器详解

    标题中的“源代码下载 第六章 注解式控制器详解”表明了我们即将探讨的是关于Spring MVC框架中的注解式控制器的深入理解,并且提供了一套相关的源代码供学习和参考。这一章节通常会涵盖如何使用注解来实现Web应用...

    Java实训教程 Java软件开发实战 Java开发框架介绍 SpringMVC_5_常用注解 共22页.pptx

    - **控制器编写**:创建一个简单的控制器类,使用`@Controller`注解标识。 - **请求映射**:通过`@RequestMapping`注解来定义请求处理逻辑。 - **返回视图**:使用`ModelAndView`对象或返回字符串形式的视图名。 - *...

    annotation-springMVC.rar_springmvc_springmvc API chm

    《SpringMVC注解详解与应用》 SpringMVC作为Java Web开发中广泛使用的轻量级框架,极大地简化了Web应用程序的构建。其中,注解的使用是SpringMVC的一大特色,它使得代码更加简洁、易读,同时也提高了开发效率。下面...

    SpringMVC3.0_Demo

    SpringMVC是Spring框架的一个模块,专为构建Web应用程序提供模型-视图-控制器(MVC)架构。在SpringMVC 3.0版本中,引入了许多增强功能和优化,使得开发更加高效且灵活。这个名为"SpringMVC3.0_Demo"的压缩包文件很...

    springmvc19_day01_02.zip

    《SpringMVC基于注解开发详解》 SpringMVC作为Spring框架的重要组成部分,是Java Web开发中的主流MVC(Model-View-Controller)框架。它以其简洁、高效、灵活的特性,深受开发者喜爱。本教程将深入探讨SpringMVC...

    Java实训教程 Java软件开发实战 Java开发框架介绍 SpringMVC_8_标签库 共39页.pptx

    **SpringMVC_3_方法入参**(共41页):该章节详细讲解了如何在控制器的方法中接收不同的参数类型,例如原始类型、POJO对象、HTTP请求对象等,并且会介绍如何使用SpringMVC提供的各种注解来实现这些功能。 **...

    SpringMvc注解详解

    【SpringMvc注解详解】 SpringMvc 是 Spring 框架的一部分,主要负责处理 Web 请求。在 SpringMVC 中,注解扮演着至关重要的角色,它们简化了代码并减少了配置。以下是一些常用的 SpringMVC 注解及其详细解释: 1....

    springMVC详解以及注解说明

    ### SpringMVC详解及注解说明 #### 一、引言 随着软件开发技术的不断发展,基于注解(Annotation)的配置方式越来越受到开发者们的青睐。Spring框架自2.5版本开始,便提供了完全基于注解配置Bean的能力,极大地简化...

    SpringMVC注解开发的详解.doc

    SpringMVC注解开发是Java Web开发中一种高效的方式,它极大地简化了控制器的定义和请求处理。在SpringMVC框架中,`@Controller`注解用于标识一个类作为处理HTTP请求的控制器。这个注解使得类中的方法可以被SpringMVC...

    springmvc_mybatis1110

    SpringMVC是Spring框架的一个模块,主要处理HTTP请求和响应,提供了一种模型-视图-控制器(MVC)的架构模式。它简化了Web应用的开发,通过DispatcherServlet进行请求分发,HandlerMapping处理映射,ModelAndView构建...

    SpringMVC 常用注解类视频详解

    在Spring MVC框架中,注解是实现控制器、数据绑定、模型映射等核心功能的关键元素。这些注解简化了代码,使得开发更加高效且易于维护。以下是对Spring MVC常用注解的详细解释: 1. `@Controller`:这是定义一个类...

    spring_mvc.zip_Spring学生_spring mvc_springmvc 学生_springmvc 系统

    Spring MVC 是一个基于 Spring 框架的模型-视图-控制器(MVC)架构,它简化了在 Java Web 应用中的开发工作。在"spring_mvc.zip"中,我们可以看到一个针对学生管理系统的实例代码,这将帮助我们深入理解如何使用 ...

    SpringMVC九大常用注解

    ### SpringMVC九大常用注解详解 #### 一、@Controller **定义**: `@Controller` 注解是用来标记一个类作为控制器(Controller)组件,在Spring MVC框架中扮演着请求处理者的角色。 **作用**: 通过这个注解,可以将...

    SpringMVC+MyBatis+MySql注解示例

    SpringMVC通过注解可以极大地简化配置,如`@Controller`、`@RequestMapping`等,使得控制器类的编写更加直观。 ### MyBatis MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免...

Global site tag (gtag.js) - Google Analytics