1.SpringMVC的理解
MVC 其实就是Model View Controller的简称,它是一种模式框架,分离机了表示和交互。它被分为了模型、视图、控制器。
(1)Model模型:程序的主体部分,主要包含业务数据和业务逻辑。在模型层,还会涉及到用户发布的服务,在服务里面会根据不同的业务需求,更新业务模型中的数据。
(2)View视图:程序呈现给用户的部分,是用户和程序交互的入口。用户通过视图输入需要的业务数据,并通过界面的事件交互,将对应的输入参数提交给后台管理器进行处理。
(3)Controller控制器:用来处理用户输入的数据已经更新业务模型的部分。控制器里面接收了用户和界面交互时候传递过来的数据,并根据数据业务逻辑来执行服务的调用和更新业务模型的数据和状态。
2.SpringMVC的执行流程
(1)用户通过客户端或者浏览器发送请求
(2)DispatcherServlet根据请求信息调用处理器映射器HandlerMapping解析对应Handler
(3)其实解析到的Handler就是Controller控制器
(4)处理器适配器HandlerAdapter会根据Handler找到真正的处理器来处理请求和执行相应业务逻辑
(5)处理器处理完之后,会返回一个ModelAndView,Model是返回的数据,View是逻辑视图
(6)视图解析器ViewResolver会将View逻辑视图解析成物理视图
(7)DispatcherServlet会根据返回的Model将其传给View
(8)把View返回给请求者
注意:
(1)DispatcherServlet是前端控制器:它是里面的核心组件,SpringMVC的入口函数,接口请求,相应结果。前端控制器就类似一个中央控制器,它的存在降低了各个组件之间的耦合度。请求到该控制器后,它就是里面的控制器,由它负责调用其它组件处理用户请求,也是整个流程控制的中心。
(2)HandlerMapping是处理器映射器:根据用户请求找到Handler
(3)HandlerAdapte是适配器处理器:按照特定规则去执行Handler
(4)ViewResolver是视图解析器:将返回的逻辑视图解析成物理视图也就是找到物理路径,最后在对View进行渲染呈现给用户
(5)Handler是处理器
(6)View是视图
3.SpringMVC转发和重定向的设置
(1)转发:在返回值前面加上forward
(2)重定向:在返回值前面加上redirect
4.SpringMVC常用的注解有哪些
(1)@ReuqestMapping:可以放在类上,也可以放在方法上,放在方法上的话是该方法的请求路径,在类上的话是本类下面的所有方法前面都得加上该父路径。
(2)@RequestBody:请求时可以将json作为参数传输给方法并转成对象。
如下面代码片段:
在想要访问getUserAuth方法时候,路径就是前缀/system/getUserAuth。里面的/system就是父级路径,/getUserAuth和/captcha就是各个方法上的访问路径,由于类上定义@RequestMapping,因此每个方法访问需要加上父路径。
@Controller
@RequestMapping("/system")
public class LoginController {
@Autowired
private SysUserService sysUserService;
@Autowired
private SysCaptchaService sysCaptchaService;
@RequestMapping("/getUserAuth")
public LoginVo getUserAuth(@RequestParam("username") String username) throws Exception {
return sysUserService.getUserAuth(username);
}
/**
* 验证码
*/
@RequestMapping("/captcha")
public void captcha(HttpServletResponse response, String uuid)throws IOException {
response.setHeader("Cache-Control", "no-store, no-cache");
response.setContentType("image/jpeg");
BufferedImage image = sysCaptchaService.getCaptcha(uuid);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
IOUtils.closeQuietly(out);
}
}
(3)@ResponseBody:将控制层方法的返回对象转化成json响应给前端客户。
5.SpringMVC处理统一异常
方式一:
自定义个异常处理类实现HandlerExceptionResolver接口,并实现里面的异常处理方法,然后把这个类交给Spring容器管理。
方式二:
在类上面加上@ControllerAdvice表名这一个全局异常处理类,在方法上面加上注解@ExceptionHandler,在这个注解里面有一个value属性值可以指定可处理的类型。