Spring MVC

Spring MVC

MVC定义

  • MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,其核⼼思想是通过将业务逻辑、数据、显示分离来组织代码
  • MVC 是⼀种设计模式, Spring MVC 是⼀款很优秀的 MVC 框架。 Spring MVC 可以帮助我们进⾏更简洁的 Web 层的开发,并且它天⽣与 Spring 框架集成。 Spring MVC 下我们⼀般把后端项⽬分为Service 层(处理业务)、 Dao 层(数据库操作)、 Entity 层(实体类)、 Controller 层(控制层,返回数据给前台⻚⾯)。

Spring MVC 的核⼼组件有哪些?

  • DispatcherServlet : 核⼼的中央处理器,负责接收请求、分发,并给予客户端响应。
  • HandlerMapping : 处理器映射器,根据 uri 去匹配查找能处理的 Handler ,并会将请求涉及到的拦截器和 Handler ⼀起封装。
  • HandlerAdapter : 处理器适配器,根据 HandlerMapping 找到的 Handler ,适配执⾏对应的Handler ;Handler : 请求处理器,处理实际请求的处理器。
  • ViewResolver : 视图解析器,根据 Handler 返回的逻辑视图 / 视图,解析并渲染真正的视图,并传递给 DispatcherServlet 响应客户端

SpringMVC ⼯作原理了解吗?

在这里插入图片描述

  • 客户端(浏览器)发送请求, DispatcherServlet 拦截请求。
  • DispatcherServlet 根据请求信息调⽤ HandlerMapping 。 HandlerMapping 根据 uri 去匹配查找能处理的 Handler (也就是我们平常说的 Controller 控制器) ,并会将请求涉及到的拦截器和Handler ⼀起封装。
  • DispatcherServlet 调⽤ HandlerAdapter 适配执⾏ Handler 。
  • Handler 完成对⽤户请求的处理后,会返回⼀个 ModelAndView 对象给DispatcherServlet , ModelAndView 顾名思义,包含了数据模型以及相应的视图的信息。 Model 是返回的数据对象, View 是个逻辑上的 View 。
  • ViewResolver 会根据逻辑 View 查找实际的 View 。
  • DispaterServlet 把返回的 Model 传给 View (视图渲染)。
  • 把 View 返回给请求者(浏览器)

统⼀异常处理怎么做?

  • 推荐使⽤注解的⽅式统⼀异常处理,具体会使⽤到 @ControllerAdvice + @ExceptionHandler 这两个注解 。
  • 这种异常处理⽅式下,会给所有或者指定的 Controller 织⼊异常处理的逻辑(AOP),当
    Controller 中的⽅法抛出异常的时候,由被 @ExceptionHandler 注解修饰的⽅法进⾏处理。
  • ExceptionHandlerMethodResolver 中 getMappedMethod ⽅法决定了异常具体被哪个被@ExceptionHandler 注解修饰的⽅法处理异常

Spring 管理事务的⽅式有⼏种

  • 编程式事务 : 在代码中硬编码(不推荐使⽤) : 通过 TransactionTemplate 或者
    TransactionManager ⼿动管理事务,实际应⽤中很少使⽤,但是对于你理解 Spring 事务管理原理有帮助。
  • 声明式事务 : 在 XML 配置⽂件中配置或者直接基于注解(推荐使⽤) : 实际是通过 AOP 实现(基于 @Transactional 的全注解⽅式使⽤最多)

Spring 事务中哪⼏种事务传播⾏为?

事务传播⾏为是为了解决业务层⽅法之间互相调⽤的事务问题
正确的事务传播⾏为可能的值如下:

  • TransactionDefinition.PROPAGATION_REQUIRED
    使⽤的最多的⼀个事务传播⾏为,我们平时经常使⽤的 @Transactional 注解默认使⽤就是这个事务传播⾏为。如果当前存在事务,则加⼊该事务;如果当前没有事务,则创建⼀个新的事务。
  • TransactionDefinition.PROPAGATION_REQUIRES_NEW
    创建⼀个新的事务,如果当前存在事务,则把当前事务挂起。也就是说不管外部⽅法是否开启事
    务, Propagation.REQUIRES_NEW 修饰的内部⽅法会新开启⾃⼰的事务,且开启的事务相互独⽴,互不⼲扰。
  • TransactionDefinition.PROPAGATION_NESTED
    如果当前存在事务,则创建⼀个事务作为当前事务的嵌套事务来运⾏;如果当前没有事务,则该取值等价于 TransactionDefinition.PROPAGATION_REQUIRED 。
  • TransactionDefinition.PROPAGATION_MANDATORY
    如果当前存在事务,则加⼊该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)

若是错误的配置以下 3 种事务传播⾏为,事务将不会发⽣回滚:

  • TransactionDefinition.PROPAGATION_SUPPORTS : 如果当前存在事务,则加⼊该事务;如果当前没有事务,则以⾮事务的⽅式继续运⾏。
  • TransactionDefinition.PROPAGATION_NOT_SUPPORTED : 以⾮事务⽅式运⾏,如果当前存在事务,则把当前事务挂起。
  • TransactionDefinition.PROPAGATION_NEVER : 以⾮事务⽅式运⾏,如果当前存在事务,则抛出异常。

@Transactional(rollbackFor = Exception.class)注解了解吗

  • Exception 分为运⾏时异常 RuntimeException 和⾮运⾏时异常。事务管理对于企业应⽤来说是⾄关重要的,即使出现异常情况,它也可以保证数据的⼀致性。
  • 当 @Transactional 注解作⽤于类上时,该类的所有 public ⽅法将都具有该类型的事务属性,同时,我们也可以在⽅法级别使⽤该标注来覆盖类级别的定义。如果类或者⽅法加了这个注解,那么这个类⾥⾯的⽅法抛出异常,就会回滚,数据库⾥⾯的数据也会回滚。
  • 在 @Transactional 注解中如果不配置 rollbackFor 属性,那么事务只会在遇到 RuntimeException 的时候才会回滚,加上 rollbackFor=Exception.class ,可以让事务在遇到⾮运⾏时异常时也回滚。

相关推荐

  1. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-03-27 15:14:02      41 阅读
  2. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-03-27 15:14:02      33 阅读
  3. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-03-27 15:14:02      34 阅读
  4. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-03-27 15:14:02      35 阅读
  5. <span style='color:red;'>springMVC</span>

    springMVC

    2024-03-27 15:14:02      27 阅读
  6. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-03-27 15:14:02      19 阅读
  7. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-03-27 15:14:02      27 阅读
  8. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-03-27 15:14:02      16 阅读
  9. SpringMVC

    2024-03-27 15:14:02       23 阅读
  10. <span style='color:red;'>springMVC</span>

    springMVC

    2024-03-27 15:14:02      17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-27 15:14:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-27 15:14:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-27 15:14:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-27 15:14:02       18 阅读

热门阅读

  1. unity中平台判断

    2024-03-27 15:14:02       14 阅读
  2. .NET Core教程:深入实践与实例解析

    2024-03-27 15:14:02       18 阅读
  3. Gartner发布2024年影响技术提供商的重大趋势

    2024-03-27 15:14:02       18 阅读
  4. Windows CMD命令大全(快速上手)

    2024-03-27 15:14:02       18 阅读
  5. 深入理解 C++ 中的 IO 流【iostream篇】

    2024-03-27 15:14:02       16 阅读
  6. Canathus 一个简单的React表单验证工具

    2024-03-27 15:14:02       15 阅读
  7. python教程(3更新中)

    2024-03-27 15:14:02       16 阅读