首页 > 其他分享 >SpringMVC学习笔记(四)

SpringMVC学习笔记(四)

时间:2022-09-20 16:14:55浏览次数:70  
标签:pre 拦截器 SpringMVC 方法 笔记 学习 执行 异常 IOC

拦截器

拦截器需要实现HandlerInterceptor接口

然后配置到IOC文件中

在mvc:interceptors标签中配置拦截器bean或ref

这种方式会拦截所有路径

在mvc:interceptors标签中配置mvc:interceptor

这种方式可以配置拦截器拦截的路径范围

注意:拦截器中的拦截路径中的 " /* "不代表所有路径,只代表一层路径," /** "才是全部路径

 

接口中三个方法的执行时间

preHandle在控制器方法执行前执行

postHandle控制器方法执行后执行

afterCompletion控制器方法执行后,且渲染视图完毕之后

 

这三个方法都通过

HandlerExecutionChain mappedHandler这个玩意调用

其中pre按正序执行,每次执行给handler里面的索引加一,直到执行完或者返回false

当pre都没进行拦截时会执行全部的post

然后无论pre有没有返回false都会执行finally中的after,利用索引标记了全部返回true的pre

 

所以分析下来,应该在pre里面写打开资源,返回false时不应该打开资源

post写对响应的处理

after处理pre打开的资源

 

异常处理器

接口HandlerExceptionResolver

IOC默认配置了一个异常处理器:DefaultHandlerExceptionResolver

 

自己配置异常处理器:

文件方式

先在IOC文件中配置bean org.springframework.web.servlet.handler.SimpleMappingExcetionResolver

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
  <property name="exceptionMappings"> 
    <props> 
      <prop key="异常的全类名">发生异常后应该跳转的页面</prop>
      <prop key="java.lang.ArithmeticException">error</prop>
    </props> 
  </property> 
  <!--exceptionAttribute属性设置一个属性名,将出现的异常信息在请求域中进行共享 --> 
  <property name="exceptionAttribute" value="ex">
  </property> 
</bean>

注解方式

类前加@ControllerAdvice注解

类中的方法添加@ExceptionHandler注解,注解里的value属性设置为 异常.class

然后在方法里面设置Throwable的形参和Model的形参,就会自动获取到这两个类型的参数,在model里面共享异常参数,就可以在其他地方使用,和之前普通的controller方法共享参数方法一样

//@ControllerAdvice将当前类标识为异常处理的组件 
@ControllerAdvice 
public class ExceptionController { 
  //@ExceptionHandler用于设置所标识方法处理的异常 
  @ExceptionHandler(ArithmeticException.class) 
  //ex表示当前请求处理中出现的异常对象 
  public String handleArithmeticException(Exception ex, Model model){ 
    model.addAttribute("ex", ex); 
    return "error"; 
  } 
}

 

也需要被IOC扫描

 

标签:pre,拦截器,SpringMVC,方法,笔记,学习,执行,异常,IOC
From: https://www.cnblogs.com/darkpar/p/16697462.html

相关文章

  • 《Spatial-Spectral T ransformer for Hyperspectral Image Classification》论文笔记
    论文题目《Spatial-SpectralTransformerforHyperspectralImageClassification》 论文作者:XinHe1,YushiChen1,*andZhouhanLin2论文发表年份:2021模型简......
  • 分布式锁的学习
    对forupdate的认识:forupdate是对数据库加锁的语句,并且是加悲观锁,可能是表锁也可能是行锁,根据你的查询语句进行判断,如果selectforupdata*fromtablewhereid=1,id......
  • CSAPP(读书笔记)
    一 计算机系统漫游1.1信息就是位+上下文C语言源程序是以字节序列的方式存储在文件中的,每个字节对应一个ASCⅡ编码,例如第一个字节整数值位35,对应字符'#'一个......
  • Markdown学习下载及使用
    Markdown学习及使用一、标题标题写法为:#号加对应的标题,多级标题对应多个#二、字体1、前后加一个*号为斜体Hellowword2、前后加两个*号为加粗Hellowword3、......
  • 快速学习JasperReport-数据填充
    1数据填充我们介绍了如何使用JasperReport来生成简单的文本报表,正式企业开发中动态数据展示也是报表中最重要的一环,接下来我们共同研究的就是填充动态数据到PDF报表中。......
  • 机器学习——聚类(K-Means)
    机器学习——聚类(K-Means)那是什么无监督学习——聚类聚类是基于相似对象将一组对象分组为类/类别的过程。聚类是一部分无监督学习.这种方法通常用于确定业务决策,特......
  • python机器学习(第一章 Python机器学习基础)
    第一章Python机器学习基础基础:Python官网:https://www.python.org/doc/;历史版本下载与维护信息:https://www.python.org/downloads/Anaconda官网:https://www.anacond......
  • 学习 Linux 并没有你想象的那么难。
    学习Linux并没有你想象的那么难。PhotobyGabrielHeinzeronUnsplash我离开Windows并切换到Linux作为我的主要操作系统已经1年了。一个充满问题的更改,并且担......
  • 网络芯片CH395Q学习开发-补充-和电脑网线直连程序配置方式
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/LearnCH395Q"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明......
  • 备忘录笔记
    备忘录笔记隐私政策更新时间:2022年9月生效时间:2021年8月广州菁宏信息科技有限公司非常注重保护用户(“您”)的个人信息及隐私,我们深知个人信息对您的重要性,并将按照法律法规......