请求往下传:客户端 -> 前端控制器 -> Controller -> Service -> Dao异常往上抛:Dao -> Service -> Controller -> 前端控制器 -> 异常处理器自定义异常处理器步骤分析:
- 创建异常处理器类实现 HandlerExceptionResolver
- 配置异常处理器
- 编写异常页面
- 测试异常跳转
public class GlobalExceptionResolver implements HandlerExceptionResolver {?/*** @param e 实际抛出的异常对象*/@Overridepublic ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {// 具体的异常处理:产生异常后 , 跳转到一个最终的异常页面ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("error", e.getMessage());modelAndView.setViewName("error");return modelAndView;}?}配置异常处理器spring-mvc.xml<bean id="globalExceptionResolver" class="com.renda.exception.GlobalExceptionResolver"/>编写异常页面srcmainwebappWEB-INFpageserror.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>ERROR</title></head><body>?ERROR:${error}?</body></html>测试异常跳转com.renda.controller.ExceptionController@Controllerpublic class ExceptionController {@RequestMapping("/testException")public String testException(){int i = 1/0;return "success";}}web 的处理异常机制<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>404 Error</title></head><body>Renda: 您请求的资源已经删除</body></html>?<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>500 Error</title></head><body>Renda: 网络故障 , 请稍后再试</body></html><!-- 处理 404 异常 --><error-page><error-code>404</error-code><location>/404.jsp</location></error-page><!-- 处理 500 异常 --><error-page><error-code>500</error-code><location>/500.jsp</location></error-page> 拦截器拦截器(interceptor)的作用Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter , 用于对处理器进行预处理和后处理 。
将拦截器按一定的顺序联结成一条链 , 这条链称为拦截器链 InterceptorChain 。在访问被拦截的方法或字段时 , 拦截器链中的拦截器就会按其之前定义的顺序被调用 。拦截器也是 AOP 思想的具体实现 。
拦截器和过滤器区别使用范围:
filter - 是 servlet 规范中的一部分 , 任何 Java Web 工程都可以使用。
interceptor - 是 SpringMVC 框架的一部分 , 只有使用了 SpringMVC 框架的工程才能用 。
拦截范围:
filter - 在 url-pattern 中配置了 /* 后 , 可以对所有资源进行过滤拦截 。
interceptor - 只会拦截访问控制器方法 , 如果访问的是 JSP、HTML、css、Image、JS 就不会进行拦截 。
快速入门步骤分析:
- 创建拦截器类实现 HandlerInterceptor 接口
- 配置拦截器
- 测试拦截器的拦截效果
public class MyInterceptor1 implements HandlerInterceptor {/*** 在目标方法执行之前进行拦截** @return false:不放行*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle1....");return true;}?/*** 在目标方法执行之后 , 视图对象返回之前 , 执行的方法*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle1....");}?/*** 在流程都执行完成后 , 执行的方法*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion1....");}}配置拦截器spring-mvc.jsp<mvc:interceptors><mvc:interceptor><!-- 对所有 controller 类里面的所有方法都进行拦截 --><mvc:mapping path="/**"/><bean class="com.renda.interceptor.MyInterceptor1"></bean></mvc:interceptor></mvc:interceptors>
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ajax请求controller ajax跨域报错处理
- 头条号满月复盘|自媒体新手的进阶之路,有你想要的干货
- Java进阶知识,轻松理解Java泛型
- 工程师进阶:深入TCP协议
- 黑客术语介绍!web渗透小白的进阶之路
- Linux 进阶语句
- Java开源框架之SpringMVC原理及源码解析
- 每个架构师都在研究的康威定律,程序员进阶路上,你思考过吗?
- MySQL进阶篇 | 合理的使用索引结构和查询
- 范振钰|钓鱼大师的饵料值得信服吗?进阶换饵鱼不认,为何蓝鲫有靠谱标签
