参考于:https://www.cnblogs.com/myitnews/p/11565941.html#autoid-1-0-0html
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即便用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助咱们简化开发,Spring Web MVC也是要简化咱们平常Web开发的。与之相反的是基于组件的、事件驱动的Web框架,如Tapestry、JSF等。前端
- 前端控制器是DispatcherServlet;
- 应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;
- 页面控制器/动做/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也能够是任何的POJO类);
- 支持本地化(Locale)解析、主题(Theme)解析及文件上传等;
- 提供了很是灵活的数据验证、格式化和数据绑定机制;
- 提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。
用户请求发送给DispatcherServlet,DispatcherServlet调用HandlerMapping处理器映射器;java
HandlerMapping根据xml或注解找到对应的处理器,生成处理器对象【其实返回的是一个执行器链:包含handler和多个拦截器Interceptor】返回给DispatcherServlet;web
DispatcherServlet会调用相应的HandlerAdapter;spring
HandlerAdapter通过适配调用具体的处理器去处理请求,生成ModelAndView返回给DispatcherServlet编程
DispatcherServlet将ModelAndView传给ViewReslover解析生成View返回给DispatcherServlet;json
DispatcherServlet根据View进行渲染视图,最后响应给用户。设计模式
相似的表示组件做用的还有:架构
return new ModelAndView("index")
。@RestController public class HelloController { @GetMapping("/hello") public String hello(){ return "this is my spring-boot-quick-start..."; } @GetMapping("go") public ModelAndView go(){ ModelAndView mv = new ModelAndView("index"); return mv; } }
ExceptionHandler
,捕获Controller中抛出指定类型的异常。@ControllerAdvice public class GlobalExceptionHandler { @ResponseBody @ExceptionHandler(value = ApiException.class) public AjaxResult handle(ApiException e){ if(e.getErrorCode()!=null){ return AjaxResult.error(e.getErrorCode().getCode(), e.getMessage()); } return AjaxResult.error(e.getMessag()); } }
@ControllerAdvice public class MyControllerAdvice { @InitBinder public void globalInitBinder(WebDataBinder binder){ binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd")); } }
@ControllerAdvice public class MyControllerAdvice { @ModelAttribute(value = "message")//在全部拦截器的preHandler方法执行以后执行 public String globalModelAttribute(){ System.out.println("MyControllerAdvice.globalModelAttribute"); return "test"; } } @RestController public class HelloController { @GetMapping("go") public ModelAndView go(@ModelAttribute("message") String message){ System.out.println(message); //"test" ModelAndView mv = new ModelAndView(message); return mv; //跳转到 test.html页面 } }
@GetMapping("/go/{id}") public String PathVa(@PathVariable("id") Long id){ System.out.println(id); return "test"; }
处理请求地址映射的注解,可用于类或方法上。mvc
用于类上,表示类中的全部响应请求的方法都是以该地址做为父路径。
参数:
@RequestMapping(value = "/go",method = RequestMethod.GET)
= GetMapping("/go")
application/json, text/html;
能够对类成员变量、方法一级构造参数进行标注,完成自动装配。
首先将默认类型匹配的bean自动装配到属性中。
若是类型匹配的bean不止一个,接着根据名称匹配。
若是查询结果为空,则抛出异常,若是想避免,可使用required = false
。