spring mvc统一异常处理的3种方式(附带实例)-mile米乐体育
设计模式
2021年02月06日 15:32
1
- 使用 spring mvc 提供的简单异常处理器 simplemappingexceptionresolver。
- 实现 spring 的异常处理接口 handlerexceptionresolver 自定义自己的异常处理器。
- 使用 @exceptionhandler 注解实现异常处理
1)创建应用 springmvcdemo10
创建应用 springmvcdemo10,并导入 spring mvc 相关的 jar 包。2)创建自定义异常类
在 src 目录下创建 exception 包,并在该包中创建自定义异常类 myexception。具体代码如下:package exception; public class myexception extends exception { private static final long serialversionuid = 1l; public myexception() { super(); } public myexception(string message) { super(message); } }
3)创建 dao 层
在 src 目录下创建 dao 包,并在该包中创建 testexceptiondao 类,在该类中定义 3 个方法,分别抛出“数据库异常”“自定义异常”和“未知异常”。具体代码如下:package dao; import java.sql.sqlexception; import org.springframework.stereotype.repository; @repository("testexceptiondao") public class testexceptiondao { public void daodb() throws exception { throw new sqlexception("dao中数据库异常"); } public void daomy() throws exception { throw new sqlexception("dao中自定义异常"); } public void daono() throws exception { throw new sqlexception("dao中未知异常"); } }
4)创建 service 层
在 src 目录下创建 service 包,并在该包中创建 testexceptionservice 接口和 testexceptionserviceimpl 实现类,在该接口中定义 6 个方法,其中有 3 个方法调用 dao 层中的方法,有 3 个是 service 层的方法。 service 层的方法是为演示 service 层的“数据库异常”“自定义异常”和“未知异常”而定义的。 testexceptionservice 接口的代码如下:package service; public interface testexceptionservice { public void servicemy() throws exception; public void servicedb() throws exception; public void daomy() throws exception; public void daodb() throws exception; public void serviceno() throws exception; public void daono() throws exception; }testexceptionserviceimpl 实现类的代码如下:
package service; import java.sql.sqlexception; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.service; import dao.testexceptiondao; import exception.myexception; @service("testexceptionservice") public class testexceptionserviceimpl implements testexceptionservice { @autowired private testexceptiondao testexceptiondao; @override public void servicemy() throws exception { throw new myexception("service中自定义异常"); } @override public void servicedb() throws exception { throw new sqlexception("service中数据库异常"); } @override public void daomy() throws exception { testexceptiondao.daomy(); } @override public void daodb() throws exception { testexceptiondao.daodb(); } @override public void serviceno() throws exception { throw new sqlexception("service中未知异常"); } @override public void daono() throws exception { testexceptiondao.daono(); } }
5)创建控制器类
在 src 目录下创建 controller 包,并在该包中创建 testexceptioncontroller 控制器类,代码如下:package controller; import java.sql.sqlexception; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import service.testexceptionservice; import exception.myexception; @controller public class testexceptioncontroller { @autowired private testexceptionservice testexceptionservice; @requestmapping("/db") public void db() throws exception { throw new sqlexception("控制器中数据库异常"); } @requestmapping("/my") public void my() throws exception { throw new myexception("控制器中自定义异常"); } @requestmapping("/no") public void no() throws exception { throw new exception("控制器中未知异常"); } @requestmapping("/servicedb") public void servicedb() throws exception { testexceptionservice.servicedb(); } @requestmapping("/servicemy") public void servicemy() throws exception { testexceptionservice.servicemy(); } @requestmapping("/serviceno") public void serviceno() throws exception { testexceptionservice.serviceno(); } @requestmapping("/daodb") public void daodb() throws exception { testexceptionservice.daodb(); } @requestmapping("/daomy") public void daomy() throws exception { testexceptionservice.daomy(); } @requestmapping("/daono") public void daono() throws exception { testexceptionservice.daono(); } }
6)创建 view 层
view 层中共有 5 个 jsp 页面,下面分别介绍。 测试应用mile米乐体育首页面 index.jsp 的代码如下:<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>404 错误对应页面 404.jsp 的代码如下:insert title here
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>未知异常对应页面 error.jsp 的代码如下:insert title here 资源已不在。
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8" iserrorpage="true"%> <%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>自定义异常对应页面 my-error.jsp 的代码如下:insert title here <%=exception %>错误内容:
<% exception.printstacktrace(response.getwriter()); %>
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8" iserrorpage="true"%> <%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>sql 异常对应页面 sql-error.jsp 的代码如下:insert title here <%=exception %>错误内容:
<% exception.printstacktrace(response.getwriter()); %>
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8" iserrorpage="true"%> <%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>insert title here <%=exception %>错误内容:
<% exception.printstacktrace(response.getwriter()); %>
7)web.xml
对于 unchecked exception 而言,由于代码不强制捕获,往往被忽略,如果运行期产生了 unchecked exception,而代码中又没有进行相应的捕获和处理,则可能不得不面对 404、500 等服务器内部错误提示页面,所以在 web.xml 文件中添加了全局异常 404 处理。具体代码如下:从上述 dao 层、service 层以及 controller 层的代码中可以看出,它们只管通过 throw 和 throws 语句抛出异常,并不处理。下面分别从 3 种方式统一处理这些异常。 由于篇幅有限,分成 3 节对这 3 种方式进行详细讲解,点击下面链接进行阅读:404 /web-inf/jsp/404.jsp
- spring mvc使用simplemappingexceptionresolver类异常处理
- spring mvc使用handlerexceptionresolver接口异常处理
- spring mvc使用@exceptionhandler注解异常处理
展开全文