传统风格的控制器不仅需要在配置文件中部署映射,而且只能编写一个处理方法,不够灵活。
使用基于注解的控制器具有以下 2 个优点:
Spring MVC 中最重要的两个注解类型:@Controller 和 @RequestMapping
@Controller 注解用于声明某类的实例是一个控制器。例如,在 com.cmj,controller 包中创建控制器类 HelloController.java
package com.cmj.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/")
public String index() {
return "index";
}
@RequestMapping("/hello")
public String hello() {
return "hello";
}
}
在这段代码中,我们需要在这个HelloController类的上方用@controller进行修饰,才可以把这个设置为系统所可以看到的控制类
Spring MVC 使用扫描机制找到应用中所有基于注解的控制器类,所以,为了让控制器类被 Spring MVC 框架扫描到,需要在配置文件中声明 spring-context,并使用
元素指定控制器类的基本包(请确保所有控制器类都在基本包及其子包下)。
例如,在 SpringMvc3应用的配置文件Myservlet.xml 中添加以下代码:
其中的
一个控制器内有多个处理请求的方法,如 UserController 里通常有增加用户、修改用户信息、删除指定用户、根据条件获取用户列表等。每个方法负责不同的请求操作,而 @RequestMapping 就负责将请求映射到对应的控制器方法上。
在基于注解的控制器类中可以为每个请求编写对应的处理方法。使用 @RequestMapping 注解将请求与处理方法一 一对应即可。
@RequestMapping 注解可用于类或方法上。
用于类上,表示类中的所有响应请求的方法都以该地址作为父路径。 就是一个大的入口,下面还可以有其他子类:例如父类为student。那在他下面的话,是添加学生、修改学生、删除学生等;有一个统一的父类,就不用多次去配置
作用于方法上,就直接到达该方法;网址映射为项目名后跟着对应的该方法
value 属性是 @RequestMapping 注解的默认属性,因此如果只有 value 属性时,可以省略该属性名,如果有其它属性,则必须写上 value 属性名称。如下。
@RequestMapping(value="toUser")
@RequestMapping("toUser")
@RequestMapping(value="toUser",“getUser”)
通过在 @RequestMapping 注解下,在value中的属性,表示在URL中对应的名字,都会走到该方法中
例如:
@RequestMapping(value = {"/hello","/add"})
public String hello() {
return "hello";
}
这边通过value可以看成是一个数组,后续可以通过以下都可以调用该方法:
127.0.0.1:8080/项目名/hello与 127.0.0.1:8080/项目名/add都会走到该方法中来
method 属性用于表示该方法支持哪些 HTTP 请求。如果省略 method 属性,则说明该方法支持全部的 HTTP 请求。
@RequestMapping(value = "toUser",method = RequestMethod.GET) 表示该方法只支持 GET 请求。也可指定多个 HTTP 请求,如 @RequestMapping(value = "toUser",method = {RequestMethod.GET,RequestMethod.POST}),说明该方法同时支持 GET 和 POST 请求。
后续可以直接 @RequestMapping改为对应的@getMapping或者是@DeleteMapping,就是增删改查,就可以直接是调用这种get或者是delete请求
@GetMapping
public String add() {
return "student";
}