【知识要点】
- 方法映射概念
所谓的方法映射就是将前端发送的请求地址和后端提供的服务方法进行关联。在springMVC框架中主要使用@Controller和@RequestMapping两个注解符,实现请求和方法精准匹配。 - 注解符@Controller
Spring中包含了一个Controller接口,但是实现Controller接口只能处理一个单一的请求,使用起来非常不灵活。使用@Controller注解,可以标记类的实例是一个SpringMVC控制器对象,并可以支持同时处理多个请求动作,相对于实现变得更加简单,更加灵活,分发处理器会扫描使用了该注解类的方法 - 注解符@RequestMapping
SpringMVC中使用@RequestMapping来映射请求,也就是通过它来指定控制器可以处理哪些URL请求。注解符@RequestMapping可以使用到方法上,也可以使用到类上。注解符@RequestMapping使用在方法上,与URL中最后一个反斜杠后值与方法建立映射关系,注解在方法上时@RequestMapping很多属性,常用属性如下表所示,使用这些属性规定匹配规则。注解在类上,代表该类中所有方法都将映射为相对于类级别的请求,该控制器所处理的所有请求都被映射到value属性值所指定的路径下,起到窄化路径的作用
4)方法映射的组合注解
Spring框架的4.3版本中,引入了新的组合注解,来帮助简化常用的HTTP方法的映射,并更好的表达被注解方法的语义,如下表所示。
【实验目的】
- 了解注解符@Controller
- 熟悉springMVC请求映射过程
- 熟悉组合注解的使用
- 掌握@RequestMapping的使用
【实验内容】
- 编写前端控制器StudentController
- 注解符@Controller的使用
- 验证注解符@RequestMapping及其属性的使用
【实验步骤】
1. 创建SpringMVC工程demo2
2. 代码编写
在com.bjwl.controller包中添加学生控制类(StudentController),其代码如下所示
@Controller
@RequestMapping("student")
public class StudentController { @RequestMapping("list") public void getAllStudent(HttpServletResponse response) throws IOException { response.setContentType("text/html;charset=utf-8"); response.getWriter().write("测试注解符@RequestMapping中value"); }
}
代码的第1行使用注解符@Controller标注该类的实例是一个控制器对象;第2行在类上使用@RequestMapping注解,进行路径窄化表示请求路径必须包括student;第4行在方法使用@RequestMapping注解,请求url中最后一部分值与注解符value中的值进行匹配,从而建立请求与方法的映射关系
3. 验证@RequestMapping属性
- 验证method属性,下述代码中请求方法只能使用post方法,代码如下所示
@RequestMapping(value="list2",method = {RequestMethod.POST})
public void InsertStudent(HttpServletResponse response) throws IOException { response.setContentType("text/html;charset=utf-8"); response.getWriter().write("测试注解符@RequestMapping中method的使用");
}
- 验证params属性,示例代码中匹配请求参数必须包含username和password,且username的值不能是李四,代码如下所示
@RequestMapping(value = "verify3",params = {"username!=李四","password"})
public void handle3(HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType("text/html;charset=utf-8"); response.getWriter().write("测试注解符@RequestMapping中paramsshuxing ");
}
- 验证consumes和produces。示例代码中匹配的方法仅处理请求Content-Type为application/json类型的请求,produces标识代表返回的内容类型为application/json;代码如下所示
@RequestMapping(value = "verify5",consumes="application/json", produces="application/json")
public void handle5(HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType("application/json;charset=utf-8"); response.getWriter().write("验证consumes和produces");
}
4) 验证headers属性。使用headers可以更精确的映射请求,指定request中必须包含某些指定的header值,才能让该方法处理请求,代码如下所示。
@RequestMapping(value = "verify6",headers = "Content-Type=application/json;charset=utf-8")
public void handle6(HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType("application/json;charset=utf-8"); response.getWriter().write("验证headers属性");
}
4. 组合注解的使用
以下仅验证@PostMapping和@PutMapping注解,示例代码如下。
@PostMapping("insert")public void insert(HttpServletResponse response) throws IOException {response.setContentType("application/json;charset=utf-8");response.getWriter().write("验证@PostMapping,新增成功");}@PutMapping("update")public void update(HttpServletResponse response) throws IOException {response.setContentType("application/json;charset=utf-8");response.getWriter().write("验证@PutMapping,修改成功");}
修改请求方法类型,返回404