SSM6 11-27 SpringMvc过滤器和异常处理

try catch:处理异常

throw/throws:不处理 抛出

jvm中断程序运行 打印错误信息

web:经典三层模型:

dao(mapper)

service

web层

异常抛给web层Controller类的方法,每个方法可能处理异常,可能处理异常代码相似,造成重复代码重复编写

web层再往上抛     ->  前端控制器

SpringMVC处理异常机制如下

异常处理器实现:

  • 第一种方式:实现SpringMVC提供的全局异常处理器接口HandlerExceptionResolver
  • 第二种方式:基于注解@ControllerAdvice(标记的类,作为Controller类的通知(增强)类),底层是AOP模式,那么就会很灵活,这个通知类,不需要实现某个接口,继承某个类

第一种方式:

1.异常处理

1.异常分类:

1)系统异常(jdk自带异常),程序有问题

2)业务异常(自定义异常),用户不正当操作导致。

在我们编写的类的方法中  使用throw new自定义一查各类

判断异常类型 -> instanceof

往model里添加不同数据

把这个类交给spring管理

第二种方式

去掉上面这个

MyBookException.java

异常的advice异常通知类 对controller类的方法的增强

@ControlleAdvice

public class BookExceptionController{

@ResponseBody
public Map handleException(BookBaseException){

}



}

throw throws throwable

在处理异常的方法上使用@ExceptionHandler表示这个方法处理那种异常

如果响应json数据给前端,在方法上添加@ResponseBody注解

登录

这个实现类需要注入mapper

异常类

2.文件上传组件

SpringMVC对commits-fileupload的封装
提供文件上传组件: CommonsMultipartResolver 使用的时候,只需要在springmvc的配置文件中配置

提供了接收文件类型的数据类型: MultipartFile

前端要求:

  1. 提交方式: post
  2. 如果是ajax请求的content-type: multipart/form-data 
  3. 表单提交: enctype= multipart/form-data  

controller 进行参数绑定

后台要求

common-fileUpload

  • 导入依赖
  • 在springmvc的配置文件中配置CommonsMultipartResolver
  • 在Controller方法使用MultipartFile接收文件

3.拦截器(Springmvc  过滤器是javaweb的)

Interceptor

filter

1.过滤器是Javaweb的技术,只要是javaWeb项目就可以使用,拦截器是SpringMVc框架的,项目中添加SpringMVC依赖,才可以使用

2.过滤器配置/*,拦截所有资源请求,拦截器,/** 拦截的经过前端控制器的请求

3.执行时间,过滤器先执行,拦截器是否执行

没有经过前端控制器不会拦截


拦截器的实现

1.编写一个类实现拦截器接口Handlerlnterceptor

亦可以是作为异常处理器使用

排除请求 那些url(自定义)

拦截器里面的方法一定都执行吗?它们的顺序是什么?

一个拦截器的执行流程

客户端的请求先经过拦截器的PreHandler()->返回true放行请求可以继续请求,返回false时请求结束,

下一个就是执行处理器当中的方法->再进入拦截器PostHandle()->再走到拦截器的AfterCompletion

->如果上一步都完成了,说明请求完成

多个浏览器的

谁先配谁先执行 -Ainterceptor ->Binterceptor  此时A  B都放行 都会到目标资源

规律:

1. preHandle()执行顺序与mvc:interceptor顺序一致, postHandl
afterCompletion()与
mvc:interceptor顺序相反

2.处理器能不能执行,要求所有的拦截器的preHandle()返回true才执行

3.只要某个拦截器的preHandle()方法返回true,这个拦截器的afterCompletion()一定执行

拦截器中Prehandle()用的比较多

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【驱动】串口驱动分析(二)-tty core

前言 tty这个名称源于电传打字节的简称,在linux表示各种终端,终端通常都跟硬件相对应。比如对应于输入设备键盘鼠标,输出设备显示器的控制终端和串口终端。也有对应于不存在设备的pty驱动。在如此众多的终端模型之中,linux是怎么…

Flutter使用flutter_gen管理资源文件

pub地址: https://pub.dev/packages/flutter_gen 1.添加依赖 在你的pubspec.yaml文件中添加flutter_gen作为开发依赖 dependencies:build_runner:flutter_gen_runner: 2.配置pubspec.yaml 在pubspec.yaml文件中,配置flutter_gen的参数。指定输出路…

《C++ Primer》第10章 算法(二)

参考资料: 《C Primer》第5版《C Primer 习题集》第5版 10.4 再探迭代器(P357) 除了为每个容器定义的迭代器外,头文件 iterator 中还定义了额外的几种迭代器: 插入迭代器(insert iterator)&…

Selenium 连接到现有的 Google Chrome 示例

python 3.7 selenium 3.14.1 urllib3 1.26.8 Google Chrome 119.0.6045.160 (64位) chromedriver.exe 119.0.6045.105(win32) 1 Google Chrome 添加参数 "--remote-debugging-port9222" 2 测试效果(chromedriver.exe 要和 Google Chrome 版本…

vue3 router-view 使用keep-alive报错parentcomponent.ctx.deactivate is not a function

问题 如下图,在component组件上添加v-if判断,会报错: parentcomponent.ctx.deactivate is not a function 解决方法 去除v-if,将key直接添加上。由于有的公用页面,需要刷新,不希望缓存,所以需要添加key…

分支和循环

通常来说,C语言是结构化的程序设计语言,这里的结构包括顺序结构、选择结构、循环结构,C语言能够实现这三种结构,如果我们仔细分析,我们日常生活中所见的事情都可以拆分为这三种结构或者它们的组合。 下面我会仔细讲解我…

Boost:进程间共享内存

Linux编程:进程间共享内存_linux 判断共享内存是否存在-CSDN博客 介绍了如何在linux的进程间共享内存。 Boost对共享内存进行了封装,可以更为方便的使用共享内存。 1.创建共享内存 #include <boost/interprocess/shared_memory_object.hpp> using namespace boost::i…

【人工智能Ⅰ】实验4:贝叶斯分类

实验4 贝叶斯分类 一、实验目的 1. 了解并学习机器学习相关库的使用。 2. 熟悉贝叶斯分类原理和方法&#xff0c;并对MNIST数据集进行分类。 二、实验内容 1. 使用贝叶斯方法对mnist或mnist variation数据集进行分类&#xff0c;并计算准确率。数据集从网上下载&#xff0…

vue.js ——Vuex

基本概念 vue进行开发过程中有没有遇到这样一种场景&#xff0c;就是有些时候一些数据是一种通用的共享数据&#xff08;比如登录信息&#xff09;&#xff0c;那么这类数据在各个组件模块中可能都会用到&#xff0c;如果每个组件中都去后台重新获取那么势必会造成性能浪费&am…

websocket 消息包粗解

最近在搞websocket解析&#xff0c;记录一下: 原始字符串 &#xfffd;~&#xfffd;{"t":"d","d":{"b":{"p":"comds/comdssqmosm7k","d":{"comdss":{"cmdn":"success",…

C++ Primer : const 很容易被忽略,却极为细粒的syntax

const qualifier 释义 : const修饰符 constconstexprconst_cast 通过将变量的类型定义为const&#xff0c;可以使变量不可变: const int bufSize 512; // input buffer size bufSize 512; // error: attempt to write to const objectBecause we can’t change the value o…

vue简述

vue为渐进式框架&#xff1a;vmmv 1.易用 有html、css、javascript基础&#xff0c;即可学习vue框架 2.高效、开发前端页面 非常高效 1.vue的体积小、压缩完只需要20k的大小 2.超快的虚拟dom操作js中非常多的dom操作&#xff0c;vue设计虚拟dom非常快 3.设计时vue底层深度优化 …

免费使用GPT的网站

登录ChatGPT系统 登录ChatGPT系统 登录ChatGPT系统

ArkTs变量类型、数据类型基础语法

可以参考官网学习路径学习HarmonyOS第一课|应用开发视频教程学习|HarmonyOS应用开发官网 ArkTS是华为自研的开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者以…

浅谈安科瑞ASJ继电器在菲律宾矿厂的应用

摘要&#xff1a;对电气线路进行接地故障保护&#xff0c;方式接地故障电流引起的设备和电气火灾事故越来越成为日常所需。针对用户侧主要的用能节点&#xff0c;设计安装剩余电流继电器&#xff0c;实时监控各用能回路的剩余电流状态。通过实时监控用能以及相关电力参数、提高…

ESP32-Web-Server编程- 通过 Highcharts 创建图表(Chart)实时显示设备信息

ESP32-Web-Server编程- 通过 Highcharts 创建图表&#xff08;Chart&#xff09;实时显示设备信息 概述 上节讲述了通过 Server-Sent Events&#xff08;以下简称 SSE&#xff09; 实现在网页实时更新 ESP32 Web 服务器的传感器数据&#xff0c;并通过表格显示传感器的数据。…

操作系统--中断异常

操作系统第一章易错总结 1.操作系统的功能 ⭐ 编译器是操作系统的上层软件&#xff0c;不是操作系统需要提供的功能。 ⭐注意&#xff1a; 1.批处理的主要缺点是缺乏交互性 2.输入/输出指令需要中断操作&#xff0c;中断必须在核心态下执行 3.多道性是为了提高系统利用率和…

【Spring MVC】Filter 过滤器异常处理 HandlerExceptionResolver 分析

文章目录 前言版本说明测试 Demo1、自定义过滤器 DemoFilter2、自定义业务异常 ServiceException3、自定义异常处理类 DemoExceptionHandler4、DemoController5、请求测试 问题分析1、日志打印记录2、Debug 方法 解决方案1、修改自定义过滤器2、请求测试 解决方案分析1、日志打…

提升技能素养,AMCAP做出合适的决策

近年来&#xff0c;智能配置投资与理财逐渐受到关注并走俏。这是一种简单快捷的智慧化理财方式&#xff0c;通过将个人和家族的闲置资金投入到低风险高流动性的产品中。 国际财富管理投资机构AMCAP集团金融分析师表示&#xff1a;智能配置投资与理财之所以持续走俏&#xff0c…

6.3 Windows驱动开发:内核枚举IoTimer定时器

内核I/O定时器&#xff08;Kernel I/O Timer&#xff09;是Windows内核中的一个对象&#xff0c;它允许内核或驱动程序设置一个定时器&#xff0c;以便在指定的时间间隔内调用一个回调函数。通常&#xff0c;内核I/O定时器用于周期性地执行某个任务&#xff0c;例如检查驱动程序…