恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

SpringMVC进阶(自定义拦截器以及异常处理)

  • 首页
  • 资讯中心
  • /
  • SpringMVC进阶(自定义拦截器以及异常处理)

相关资讯

本地模型部署实战:Ollama接入Superwhisper与Cohere 2026/8/28 22:23:14
AI视频换脸与数字人合成:本地部署、API集成与显存优化实战指南 2026/8/28 22:23:14
MCM/ICM竞赛全流程指南:从报名到论文提交的避坑手册 2026/8/28 22:23:14

最新资讯

基于YOLOv8的智慧教室学生专注度分析系统:从原理到部署实战
535B大模型全程公开训练:代码、数据、Loss曲线能学到什么?
Yeschef实战:用Claude Code调度Ollama构建局域网多机推理集群
LLM购物助手落地指南:从对话到购物车的架构与代码实现
基于深度学习的多模态可穿戴传感器融合实现BFRB检测实战
降AI率黑科技实测!降AIGC平台留学生亲测:Turnitin查重直接打出“纯人类写作”标签

今日推荐

云计算SPI三类服务模式是逐层抽象的关系:IaaS提供最底层的硬件资源,PaaS在IaaS基础上封装了开发运行环境,SaaS则进一步封装为可直接使用的软件
最新稳定版(Python 3.14):这是目前官方推荐的最新稳定版本。作为最后一个采用传统“3.x”命名的版本
etc目录下的profile.d文件目录设置环境变量和全局脚本shell

本周热门

Nextcloud 桌面客户端:把同步交给它,你只管改文件
如何将 HTML 转成 Word 文档且格式不丢失?html-to-docx 使用教程
Anki 批量操作卡片完整指南:一次搞定上千张,不再逐张修改

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

SpringMVC进阶(自定义拦截器以及异常处理)

发布时间:2026/8/28 22:23:14
SpringMVC进阶(自定义拦截器以及异常处理) 文章目录* *1.自定义拦截器 * * * 1.基本介绍 * * 1.说明 * 2.自定义拦截器的三个方法 * 3.流程图 * 2.快速入门 * * 1.Myinterceptor01.java * 2.FurnHandler.java * 3.springDispatcherServlet-servlet.xml配置拦截器 * 4.单元测试 * 3.拦截特定路径 * * 1.拦截指定路径 * 2.通配符配置路径 * 4.细节说明 * 5.多个拦截器 * * 1.执行流程图 * 2.应用实例 * * 1.FurnHandler.java目标方法 * 2.拦截器 * 3.结果展示 * 2.异常处理 * * * 1.基本介绍 * 2.局部异常处理器 * * 1.需求分析 * 2.抛出问题 * * 1.MyExceptionHandler.java * 2.不处理异常则交给tomcat处理 * 3.局部异常实例 * * 1.MyExceptionHandler.java * 2.exception_mes.jsp * 3.结果展示 * 3.全局异常处理器 * 1.基本介绍 * 2.全局异常实例 * * * 1.MyGlobalException.java * 2.global_exception.jsp * 3.结果展示 * 3.细节说明 * * 1.局部异常优先级高于全局异常 * 2.处理异常机制 * 4.自定义异常 * * 1.基本介绍 * 2.自定义异常应用实例 * * 1.SelfException.java * 2.selfex.java * 3.结果展示 * 3.可以使用有参构造抛出异常交给异常处理器接管 * * 1.SelfException.java * 2.selfex.java抛出自定义异常并制定message * 3.MyGlobalException.java捕获自定义异常 * 4.结果展示 * 5.统一异常处理器 * * 1.基本介绍 * 2.需求分析 * 3.具体实现 * * 1.MyExceptionHandler.java抛出数组越界异常 * 2.springDispatcherServlet-servlet.xml配置统一异常处理器 * 3.arrEx.jsp异常处理页面 * 4.结果展示 * 6.对未知异常进行统一处理 * * 1.具体实现 * * 1.MyExceptionHandler.java抛出异常 * 2.springDispatcherServlet-servlet.xml修改统一异常处理器 * 3.allEx.jsp所有未知异常的处理 * 4.结果展示 * 7.异常处理的优先级 * * 1.局部异常处理器 * 2.全局异常处理器 * 3.统一异常处理器 * 4.Tomcat默认机制 * 3.springMVC阶段的配置文件 * * * 1.springDispatcherServlet-servlet.xml * 2.web.xml### 1.自定义拦截器##### 1.基本介绍###### 1.说明###### 2.自定义拦截器的三个方法###### 3.流程图##### 2.快速入门###### 1.Myinterceptor01.java package com.sun.web.interceptor; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * author 孙显圣 * version 1.0/ Component //注入容器 public class Myinterceptor01 implements HandlerInterceptor { /* * 在目标方法执行前被调用如果返回false目标方法不会被执行 * * param request * param response * param handler * return * throws Exception/ Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println(“preHandle”); return true; } /* * 在目标方法执行后被调用可以获取目标方法返回的ModelAndView可以根据业务进行二次处理 * * param request * param response * param handler * param modelAndView * throws Exception/ Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println(“postHandle”); } /* * 在渲染之后会被调用可以进行资源清理工作 * * param request * param response * param handler * param ex * throws Exception/ Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println(“afterCompletion”); } } ###### 2.FurnHandler.java package com.sun.web.interceptor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /* * author 孙显圣 * version 1.0/ Controller public class FurnHandler { RequestMapping(“/hi”) public String hi() { System.out.println(“hi方法被调用”); return “success”; } RequestMapping(“/hello”) public String hello() { System.out.println(“hello方法被调用”); return “success”; } } ###### 3.springDispatcherServlet-servlet.xml配置拦截器 mvc:interceptors /mvc:interceptors ###### 4.单元测试##### 3.拦截特定路径###### 1.拦截指定路径 mvc:interceptors mvc:interceptor mvc:mapping path“/hi”/ /mvc:interceptor /mvc:interceptors###### 2.通配符配置路径 mvc:interceptors mvc:interceptor mvc:mapping path/h/ mvc:exclude-mapping path“/hi”/ /mvc:interceptor /mvc:interceptors##### 4.细节说明##### 5.多个拦截器###### 1.执行流程图###### 2.应用实例###### 1.FurnHandler.java目标方法 RequestMapping(“/topic”) public String topic() { System.out.println(“topic执行”); return “success”; } ###### 2.拦截器 Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //只要参数中有topic是topic就直接响应 String topic request.getParameter(“topic”); if (topic.equals(“topic”)) { response.setContentType(“text/html;charsetutf-8”); response.getWriter().write(“请不要乱说话”); } //后面的不再执行 return false; } ###### 3.结果展示### 2.异常处理##### 1.基本介绍##### 2.局部异常处理器###### 1.需求分析###### 2.抛出问题###### 1.MyExceptionHandler.java package com.sun.web.exception; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; /** * author 孙显圣 * version 1.0/ Controller public class MyExceptionHandler { RequestMapping(“/getNum/{num}”) public String getNUm(PathVariable(“num”) Integer num) { //这里如果传进来的是0则会出现异常 System.out.println(10 / num); return “success”; } } ###### 2.不处理异常则交给tomcat处理###### 3.局部异常实例###### 1.MyExceptionHandler.java package com.sun.web.exception; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; /* * author 孙显圣 * version 1.0/ Controller public class MyExceptionHandler { RequestMapping(“/getNum/{num}”) public String getNUm(PathVariable(“num”) Integer num) { //这里如果传进来的是0则会出现异常 System.out.println(10 / num); return “success”; } //处理异常 ExceptionHandler({ArithmeticException.class, NullPointerException.class}) //参数是一个数组可以接受多个异常类型 public String exceptionHandler(Exception ex, HttpServletRequest request) { //当出现异常时异常会自动封装到ex中数据绑定 System.out.println(“异常的信息” ex.getMessage()); //可以将异常信息请求转发给下一个页面 request.setAttribute(“reason”, ex.getMessage()); return “exception_mes”; } } ###### 2.exception_mes.jsp %-- Date: 2024/3/1 Time: 8:47 User: 孙显圣 Version:1.0 --% % page contentType“text/html;charsetUTF-8” language“java” %Title出现异常异常信息是KaTeX parse error: Expected EOF, got # at position 57: …/html #̲##### 3.结果展示![i…{requestScope.reason}###### 3.结果展示##### 3.细节说明###### 1.局部异常优先级高于全局异常###### 2.处理异常机制先从发生异常的方法所在的类中查找有ExceptionHandler注解的方法如果异常不匹配则进行下一步* 从有ControllerAdvice注解的类查找有ExceptionHandler注解的方法如果匹配异常则处理无法匹配则交给tomcat处理##### 4.自定义异常###### 1.基本介绍###### 2.自定义异常应用实例###### 1.SelfException.java package com.sun.web.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; /** * author 孙显圣 * version 1.0/ //reason指的是返回的异常原因信息value指的是返回的响应状态 ResponseStatus(reason “年龄需要在1-120之间”, value HttpStatus.BAD_REQUEST) public class SelfException extends RuntimeException{ } ###### 2.selfex.java package com.sun.web.exception; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /* * author 孙显圣 * version 1.0/ Controller public class selfex { RequestMapping(“/selfex”) public void ex() { throw new SelfException(); } } ###### 3.结果展示###### 3.可以使用有参构造抛出异常交给异常处理器接管###### 1.SelfException.java package com.sun.web.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; /* * author 孙显圣 * version 1.0/ //reason指的是返回的异常原因信息value指的是返回的响应状态 ResponseStatus(reason “年龄需要在1-120之间”, value HttpStatus.BAD_REQUEST) //注意这个是给tomcat看的 public class SelfException extends RuntimeException{ public SelfException() { } //这样就可以从全局异常里获取message了 public SelfException(String message) { super(message); } } ###### 2.selfex.java抛出自定义异常并制定message package com.sun.web.exception; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /* * author 孙显圣 * version 1.0/ Controller public class selfex { RequestMapping(“/selfex”) public void ex() { throw new SelfException(“年龄需要在1-100”); //指定message } } ###### 3.MyGlobalException.java捕获自定义异常 package com.sun.web.exception; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import javax.servlet.http.HttpServletRequest; /* * author 孙显圣 * version 1.0/ ControllerAdvice //表示这个是处理全局异常的类 public class MyGlobalException { //处理自定义异常 ExceptionHandler(SelfException.class) public String selfex(Exception ex, HttpServletRequest request) { //将全局异常信息请求转发 request.setAttribute(“reason”, ex.getMessage()); return “global_exception”; } } ###### 4.结果展示##### 5.统一异常处理器###### 1.基本介绍###### 2.需求分析###### 3.具体实现###### 1.MyExceptionHandler.java抛出数组越界异常 package com.sun.web.exception; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /* * author 孙显圣 * version 1.0/ Controller public class MyExceptionHandler { //抛出数组越界异常局部异常处理器和全局异常处理器都没有处理则会交给统一异常处理器来处理 RequestMapping(“/arr”) public String array() { int[] ints {1, 2, 3}; System.out.println(ints[1222]); //交给统一异常处理器来处理 return “success”; } } ###### 2.springDispatcherServlet-servlet.xml配置统一异常处理器 arrEx ###### 3.arrEx.jsp异常处理页面 %-- Date: 2024/3/1 Time: 10:02 User: 孙显圣 Version:1.0 --% % page contentType“text/html;charsetUTF-8” language“java” %Title数组越界异常###### 4.结果展示##### 6.对未知异常进行统一处理###### 1.具体实现###### 1.MyExceptionHandler.java抛出异常 package com.sun.web.exception; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /* * author 孙显圣 * version 1.0/ Controller public class MyExceptionHandler { //没有归类的异常 RequestMapping(“/test”) public String test() { String str “hello”; char c str.charAt(10); //这里会抛出异常 return “success”; } } ###### 2.springDispatcherServlet-servlet.xml修改统一异常处理器 arrEx allEx ###### 3.allEx.jsp所有未知异常的处理 %-- Date: 2024/3/1 Time: 10:12 User: 孙显圣 Version:1.0 --% % page contentType“text/html;charsetUTF-8” language“java” %Title所有未知异常的处理界面###### 4.结果展示##### 7.异常处理的优先级###### 1.局部异常处理器方法上加ExceptionHandler({ArithmeticException.class, NullPointerException.class}) //参数是一个数组可以接受多个异常类型###### 2.全局异常处理器* 类上加ControllerAdvice //表示这个是处理全局异常的类* 方法上加ExceptionHandler({ArithmeticException.class, NullPointerException.class}) //参数是一个数组可以接受多个异常类型###### 3.统一异常处理器* 匹配方式是匹配尽可能具体的类型跟配置的顺序无关* 在Spring配置文件中配置 arrEx allEx ###### 4.Tomcat默认机制### 3.springMVC阶段的配置文件##### 1.springDispatcherServlet-servlet.xml ?xml version1.0 encodingUTF-8? context:component-scan base-package“com.sun.web”/ mvc:annotation-driven/mvc:annotation-driven mvc:default-servlet-handler/ mvc:interceptors mvc:interceptor mvc:mapping path“/topic”/ /mvc:interceptor /mvc:interceptors arrEx allEx ##### 2.web.xml ?xml version1.0 encodingUTF-8? CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 CharacterEncodingFilter / HiddenHttpMethodFilter org.springframework.web.filter.HiddenHttpMethodFilter HiddenHttpMethodFilter / springDispatcherServlet org.springframework.web.servlet.DispatcherServlet 1 springDispatcherServlet /

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号