• 在使用Spring MVC进行Web应用开发时,Controller是Web应用的核心。

  • Controller的实现类包含了对用户请求的处理逻辑,是用户请求和业务逻辑之间的“桥梁”,是Spring MVC框架的核心部分,负责具体的业务逻辑处理。

    基于注解的控制器

  • 传统风格的控制器不仅需要在配置文件中部署映射,而且只能编写一个处理方法,不够灵活。

  • 使用基于注解的控制器,具有如下两个优点:
    1. 在基于注解的控制器类中,可以编写多个处理方法,进而可以处理多个请求(动作)。这就允许将相关的操作编写在同一个控制器类中,从而减少控制器类的数量,方便以后的维护。
    2. 基于注解的控制器不需要在配置文件中部署映射,仅需要使用RequestMapping注解类型注解一个方法进行请求处理。
  • Spring MVC中最重要的两个注解类型是Controller和RequestMapping。

    请求处理方法中常出现的参数类型

    Servlet API类型,还有输入输出流、表单实体类、注解类型、与Spring框架相关的类型等等,其中特别重要的类型是org.springframework.ui.Model类型,该类型是一个包含Map的Spring框架类型。每次调用请求处理方法时,Spring MVC都将创建org.springframework.ui.Model对象。

  • 最常见的返回类型,是代表逻辑视图名称的String类型。

  • 此外,还有ModelAndView、Model、View以及其它任意的Java类型。

Controller接收请求参数的常见方式

  • Controller接收请求参数的方式有很多种,有的适合get请求方式,有的适合post请求方式,有的两者都适合。

    • 通过一个实体bean来接收请求参数,适用于get和post提交请求方式。

    • 注意:bean的属性名称必须与请求参数名称相同。

重定向与转发

  • 重定向:将用户从当前处理请求定向到另一个视图或处理请求,以前的request中存放的信息全部失效,并进入一个新的request作用域。重定向是客户端行为。
  • 转发:将用户对当前处理的请求转发给另一个视图或处理请求,以前的request中存放的信息不会失效。转发是服务器行为。
  • 在Spring MVC框架中,控制器类中处理方法的return语句默认就是转发实现,只不过实现的是转发到视图。

image.png
image.png

  • 在Spring MVC框架中,不管是重定向或转发,都需要符合视图解析器的配置,如果直接转发到一个不需要DispatcherServlet的资源,例如

return “forward:/html/my.html”;
则需要使用mvc:resources配置:

  • Spring MVC框架本身就是一个非常优秀的MVC框架,它具有一个依赖注入的优点。可以通过 org.springframework.beans.factory.annotation.Autowired 注解类型将依赖注入到一个属性(成员变量)或方法,如:

image.png

  • 在Spring MVC中,为了能被作为依赖注入,类必须使用org.springframework.stereotype.Service注解类型注明为@Service(一个服务)。另外,还需要在配置文件中使用元素来扫描依赖基本包。
  • 通过org.springframework.web.bind.annotation.ModelAttribute
  • 注解类型可经常实现两个功能:

    • 绑定请求参数到实体对象(表单的命令对象)
    • 注解一个非请求处理方法
  • “@ModelAttribute(“user”) UserForm user”语句的功能有两个,

    • ①将请求参数的输入封装到user对象中;
    • ②创建UserForm实例,以“user”为键值存储在Model对象中,与“model.addAttribute(“user”, user)”语句功能一样。如果没有指定键值,即“@ModelAttribute UserForm user”,那么创建UserForm实例时,以“userForm”为键值存储在Model对象中,与“model.addAttribute(“userForm”, user)”语句功能一样。
  • 被@ModelAttribute注解的方法,将在每次调用该控制器类的请求处理方法前被调用。

  • 这种特性可以用来控制登录权限,当然控制登录权限的方法很多,例如拦截器、过滤器等。