JAVAMVC框架之SPRINGMVC

欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系。本系列教程希望您能站在上帝的角度去观察(了解)Java体系。使Java的各种后端技术在你心中模块化;让你在工作中能将Java各个技术了然于心;能够即插即用。本章我们来一起了解Java的MVC框架之SpringMVC。 Java语言现在应用比较多的MVC框架有SpringMVC,Struts2两种。本章我们就来讲解SpringMVC,对于本篇SpringMVC本篇不会介绍其详细知识点及具体应用,Spring系列详细使用和高级应用相关知识都在第四章:Spring专栏进行讲解,本篇将会介绍SpringMVC的基础相关概念,这些基础概念是很重要的,它就如同盖房子的基石。本章示例源码下载 什么是MVC? 不可免俗地我还是想在本章开始与大家一起回顾一下什么是MVC?MVC其实就是一种软件的设计模式。在开发中并没有强制我们必须去遵循这种设计模式,但是遵循MVC模式会使我们系统层次更清晰;职责更明确;扩展性更强;耦合度降低。 什么是SpringMVC? SpringMVC就是一个严格遵循MVC设计模式的框架。说其是一个框架,那么SpringMVC框架中就应该有与Model,View,Controller相对应的组件;分别是Model模型对象,视图解析器,Controller控制器。 Spring MVC属于SpringFrameWork的后续产品,SpringMVC对于构建WEB项目而言是可选的,如果你使用Spring框架,你可以选择使用SpringMVC或者集成其他MVC框架。同时Spring MVC分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。 为什么使用SpringMVC? 学习门槛低,容易上手 SpringMVC继承了Spring框架的灵活性,容易扩展 Spring将控制器,模型对象,过滤器等分离,使组件之间松耦合 支持多种视图 轻松使用Spring生态下的其他组件 SpringMVC请求流程 用户发起请求到DispatchServlet Handler Mapping匹配请求信息的Handler(匹配条件:请求路径,方法,header信息) HandlerMapping向DispatchServlet返回handler,返回过程执行拦截器链(一系列拦截器Interceptor) 请求HandlerAdapter执行Handler HandlerAdapter根据Handler类型执行不同的Handler(处理器) Handler执行完毕返回给HandlerAdapter(处理器适配器)ModelAndView对象 HandlerAdapter将ModelAndView返回给DispatchServlet DispatchServlet请求ViewResolver解析ModelAndView ViewResolver向DispatchServlet返回View DispatchServlet将View和模型数据进行视图渲染 DispatchServlet向用户响应结果 SpringMVC常用组件 前端控制器DispatcherServlet 接受请求,响应结果,相当于转发器,中央处理器,减少了与其他组件之间的耦合度 处理器映射器HandlerMapping 根据规则查找需要执行的Handler 处理器适配器HandlerAdapter 根据Handler类型,寻找相应处理器执行Handler 处理器 Handler 可以实际处理请求的方法,如被@RequestMapping标注的方法 视图解析器 ViewResolver 进行视图解析,根据逻辑视图名解析成真正的视图(view) 视图View View是一个接口,实现类支持不同的view类型(jsp,framemark,pdf…) 文件上传解析器MultipartResolver 用于处理上传请求 配置SpringMVC 典型的XML配置方式 复制代码 复制代码 从Servlet3.0开始,可以完全脱离XML对SpringWeb项目进行配置 复制代码 /** * @Author:jimisun * @Description: * @Date:Created in 19:42 2018-09-28 * @Modified By: */ public class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class[] getRootConfigClasses() { return new Class[]{RootConfig.class}; } @Override protected Class[] getServletConfigClasses() { return new Class[]{WebConfig.class}; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } } 复制代码 SpringMVC单元测试 单元测试示例源码下载 复制代码 /** * @Author:jimisun * @Description: * @Date:Created in 07:58 2018-09-25 * @Modified By: */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:SpringMvc.xml", }) public class TestControllerTest { @Autowired private TestService testService; @Test public void sayhello() { String test = testService.sayHelloService("test"); System.out.println(test); } } 复制代码 验证Web请求参数 对于Controller接收到的参数,几乎在所有情况下我们都需要验证,SpringMVC开发中常用的验证方法有两种,Spring框架定义Validator校验和JSP-303 Bean Validation校验。 Spring Validator参数校验Spring Validator参数示例源码下载 复制代码 @RequestMapping("sayhello") public void sayhello(@Validated User user, BindingResult bindingResult) { if (bindingResult.hasErrors()) { System.out.println(bindingResult.getFieldError().getDefaultMessage()); } else { String s = testService.sayHelloService(user.getUsername()); System.out.println(s); } 复制代码 JSP-303 Bean Validation校验 Bean Validation校验源码下载 Spring在3.1的时候增加了对JSP-303 Bean Validation规范的支持,不仅可以对SpringMVC进行校验,还可以对Hibernate的对象存储进行校验,是一个通用的校验框架,在开发中我们都是用JSP-303 Bean Validation进行校验,也是个人推荐使用的。 hibernate-validator依赖 复制代码 org.hibernate hibernate-validator 6.0.4.Final 复制代码 相关配置 复制代码 复制代码 在接收参数时使用@Valid进行校验 复制代码 @RequestMapping("sayhello") public void sayhello(@Valid User user, BindingResult bindingResult) { if (bindingResult.hasErrors()) { System.out.println(bindingResult.getFieldError().getDefaultMessage()); } else { String s = testService.sayHelloService(user.getUsername()); System.out.println(s); } } 复制代码 使用下面注解对参数进行约束 Bean Validation 中内置的 constraint 注解 作用 @Valid 被注释的元素是一个对象,需要检查此对象的所有字段值 @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 true @AssertFalse 被注释的元素必须为 false @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @Size(max, min) 被注释的元素的大小必须在指定的范围内 @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内 @Past 被注释的元素必须是一个过去的日期 @Future 被注释的元素必须是一个将来的日期 @Pattern(value) 被注释的元素必须符合指定的正则表达式 Hibernate Validator 附加的 constraint 注解 作用 @Email 被注释的元素必须是电子邮箱地址 @Length(min=, max=) 被注释的字符串的大小必须在指定的范围内 @NotEmpty 被注释的字符串的必须非空 @Range(min=, max=) 被注释的元素必须在合适的范围内 @NotBlank 被注释的字符串的必须非空 @URL(protocol=, host=, port=, regexp=, flags=) 被注释的字符串必须是一个有效的url @CreditCardNumber 被注释的字符串必须通过Luhn校验算法, 银行卡,信用卡等号码一般都用Luhn 计算合法性 Java开发之上帝之眼系列教程其他文章 Java开发之上帝之眼系列教程前言和章节目录汇总 JavaIOC框架之Spring Framework JavaORM框架之Mybatis(Ibatis) --------------------------------------------------------------------------------------------------------------------------------------------------------------------- 勘误&感谢   本系列文章资料来源很多出自于互联网和在下本身的见解,受限于个人技术能力水平和其他相关知识的限制,相关见解错误或者资料引用错误请各位帮助留言校正!引用资料多来自于互联网,在下在引用前会遵循各位前辈或者博主的引用说明表示感谢,但互联网资料多是转发再转发或存在遗漏请原作者内信联系指正。 https://www.cnblogs.com/jimisun/p/9720684.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信