目录
@ResponseBody / @RestController
SpringMVC定义
Spring MVC(Model-View-Controller)是Spring框架的一部分,是基于Servlet API构建的Web原始框架。用于开发基于Java的Web应用程序。它采用MVC设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。
MVC定义
模型(Model): 表示应用程序中的数据和业务逻辑。在Spring MVC中,通常使用POJO(Plain Old Java Object)作为模型对象。通常模型对象负责在数据库中存取数据。
视图(View): 负责展示用户界面,通常是HTML页面、JSON响应或其他类型的视觉呈现。视图负责将模型数据渲染,并向用户呈现。
控制器(Controller): 接收并处理HTTP请求,并根据请求的内容选择相应的处理方法。控制器负责调度适当的业务逻辑,操作模型数据,并通过相应的视图返回响应结果。
SpringMVC工作原理
- 客户端发送请求至前端控制器DispatcherServlet。
- DispatcherServlet收到请求调用HandlerMapping处理器映射器根据请求的URL找到对应的处理器(Controller)。
- Controller调用业务逻辑后,将ModelAndView对象(封装视图和模型信息)返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
- ViewReslover视图解析器解析后返回具体的View给DispatcherServlet
- DispatcherServlet根据View和Model渲染视图响应给客户端
MVC的工作流程
用户通过视图层 发送请求到 服务器 ,在服务器中 请求被 Controller 接受,Controller 则调用响应的model层来处理请求,处理完之后的结果 返回给Controller,然后 controller 把结果响应给View 视图,渲染数据 最终展示在浏览器
@RequestMapping 注解
@RequestMapping是SpringWeb应用程序中最常被用到的注解之一,它是用来注册路由映射的。
@RequestMapp即可修饰类,也可同时修饰方法,当修饰类和方法时,访问的地址就是 “类的路由+方法的路由”。
指定请求的HTTP方法:GET/POST
可以通过method属性来指定具体的HTTP方法,例如GET、POST等。上述代码指定了只有当使用GET方法访问路径为"/hello"时,hello()方法才会被执行。【可以使用postman操作get请求】
@GetMapping 和 @PostMapping
@GetMapping和@PostMapping是Spring Framework中的注解,用于定义HTTP请求的处理方法的映射。
@GetMapping注解表示该方法用于处理HTTP GET请求。
@PostMapping注解表示该方法用于处理HTTP POST请求。
@ResponseBody / @RestController
@ResponseBody 返回的值如果是字符会转换成 text/html,如果返回的是对象会转换成application/json 返回给前端。
@ResponseBody 可以⽤来修饰⽅法或者是修饰类,修饰类表示类中的所有⽅法都会返回 html 或者json,⽽不是视图。
@RestController = @Controller + @ResponseBody
具体来说,当一个控制器方法被@ResponseBody注解标记时,Spring会将方法的返回值序列化成HTTP响应的内容,并直接发送给客户端。框架会根据请求的Content-Type和适用的消息转换器将返回值转换为相应的格式,如JSON、XML等。
文件上传
文件上传客户端三要素
-
表单项type="file"
-
表单的提交方式是post
-
表单的enctype属性是多部分表单形式,及enctype= “multipart/form-data"
服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数:
-
基本类型参数
-
POJO类型参数
-
数组类型参数
-
集合类型参数
拦截器
拦截器的作用
Spring MVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。
将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。
拦截器基本概念
Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
要使用Spring MVC中的拦截器,就需要对拦截器类进行定义和配置。通常拦截器类可以通过两种方式来定义。
- 通过实现HandlerInterceptor接口
- 继承HandlerInterceptor接口的实现类(如:HandlerInterceptorAdapter)来定义。
拦截器方法说明
preHandle:方法将在请求处理之前进行调用,该方法的返回值是布尔值Boolean类型的,当它返回为false时,表示请求结束,后续的Interceptor和Controller都不会再执行;当返回值为true时就会继续调用下一个Interceptor的preHandle方法
postHandle:该方法是在当前请求进行处理之后被调用,前提是preHandle方法的返回值为true时才能被调用,且它会在DispatcherServlet进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller处理之后的ModelAndView对象进行操作
afterCompletion:该方法将在整个请求结束之后,也就是在DispatcherServlet渲染了对应的视图之后执行,前提是preHandle方法的返回值为true时才能被调用