分享知识-快乐自己:Spring中的(三种)异常处理机制
2021-06-22 05:03
YPE web->
标签:配置 title 自定义异常 ann 编写 and erro ESS eof
案例目录结构:
Web.xml 配置:
span>app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >Archetype Created Web Application encodingFilter class>org.springframework.web.filter.CharacterEncodingFilter class>encoding UTF-8 forceEncoding true encodingFilter /* mvc org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath*:Spring-*.xml 1 mvc /
第一种:使用Spring自带的异常处理机制:
ControllerWelcome:控制层:
package controller; import exception.NameException; import exception.PwdException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author asus */ @Controller @RequestMapping("/user") public class ControllerWelcome{ @RequestMapping("/name") public String nameException() { System.out.println("用户名异常!!!"); if (true) { throw new NameException("用户名异常"); } return "Welcome"; } @RequestMapping("/pwd") public String pwdException() { System.out.println("密码异常!!!"); if (true) { throw new PwdException("密码异常"); } return "Welcome"; } @RequestMapping("/other") public String otherException() { System.out.println(5 / 0); return "Welcome"; } }
定义的异常类:NameException (OtherException、PwdException;结构都一样 都继承 RuntimeException 实现三个方法)这里列举一个
package exception; /** * 密码异常 * @author asus */ public class PwdException extends RuntimeException{ public PwdException() { super(); } public PwdException(String message) { super(message); } public PwdException(String message, Throwable cause) { super(message, cause); } }
定义的 exception下的 jsp 页面同样这里列举一个:(其他两个只是换了一下 h1的内容做了一下区分而已)
NameException.jsp:
Title 用户名异常
Spring-Mvc.xml 配置:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> package="controller"/> class="org.springframework.web.servlet.view.InternalResourceViewResolver">
Spring-excption.xml 配置:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> exception/NameException exception/PwdException
提示:按住 SimpleMappingExceptionResolver 进来我们的底层查看,发现有个一常量值,就是用来获取我们编写的错误信息的(存放在了request作用域下)。如下所示
Welcome.jsp :
Title ${exception}
例如要访问:localhost:8080/user/name:这时页面就会跳转 Welcome.jsp 并且显示 用户名异常
第二种:自定义异常处理机制:
在上述中的 exception 包下添加我们的自定义的类:MyExceptionResolve 并且继承 AbstractHandlerExceptionResolver
MyExceptionResolve :
package exception; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 自定义异常处理机制 * @author asus */ public class MyExceptionResolve extends AbstractHandlerExceptionResolver { /** * @param request:请求 * @param response:响应 * @param handler:执行的某一Controller 控制器 * @param ex:异常信息 * @return */ @Override protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { //默认为其他异常页面 ModelAndView modelAndView=new ModelAndView("exception/OtherException"); //判断是什么类型的异常 if(ex instanceof NameException) { modelAndView.setViewName("exception/NameException"); }else if(ex instanceof PwdException) { modelAndView.setViewName("exception/PwdException"); } modelAndView.addObject("exception",ex); return modelAndView; } }
修改我们的配置文件:Spring-excption.xml 配置:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> class="exception.MyExceptionResolve"/>
还是按照上述的 方式运行页面即可 查看效果......
第三种:使用注解实现异常处理机制:
为了方便阅读:专门提升了一个编写注解方式的类:BaseControllerEx
package exception; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; /** * 使用注解实现异常处理机制 * @author asus */ @Controller public class BaseControllerEx { @ExceptionHandler(NameException.class) public ModelAndView nameEx(NameException ex) { ModelAndView modelAndView=new ModelAndView("exception/NameException"); modelAndView.addObject("exception",ex.getMessage()); return modelAndView; } @ExceptionHandler(PwdException.class) public ModelAndView nameEx(PwdException ex) { ModelAndView modelAndView=new ModelAndView("exception/PwdException"); modelAndView.addObject("exception",ex.getMessage()); return modelAndView; } }
注解的方式就不需要 Spring-excption.xml 配置了,所以直接干掉就可以或者注释掉配置
这时我们只需要稍微改动一下我们的 ControllerWelcome 类去继承我们的注解类:
运行方式同上述一致......
分享知识-快乐自己:Spring中的(三种)异常处理机制
标签:配置 title 自定义异常 ann 编写 and erro ESS eof
原文地址:https://www.cnblogs.com/mlq2017/p/9680920.html
文章标题:分享知识-快乐自己:Spring中的(三种)异常处理机制
文章链接:http://soscw.com/essay/97220.html