前言
大家好,我是千锋文哥。今天文哥给大家讲解在SpringMVC中如何进行异常处理。在WEB应用中,如果程序内部出现了异常,我们不加处理的话,异常信息会直接抛到浏览器页面上,导致用户的体验感非常差。对用户来说,这样是非常不友好的,所以我们必须对应用抛出的异常信息进行处理,今天文哥就给大家讲解SpringMVC处理异常的方式有哪些。对于异常的处理方式,文哥给大家分两种,一种是SpringMVC默认的异常处理方式,还有一种是SpringMVC支持的其他异常处理方式。
SpringMVC默认的异常处理方式
SpringMVC默认的异常处理方式和Servlet处理异常的方式是一样的。我们只需要在web.xml里面定义处理异常的配置就可以了。现在文哥给大家演示在SpringMVC中默认的异常处理如何实现。
1. 创建web工程,搭建SpringMVC环境
现在我们使用maven创建一个web项目,然后引入依赖并配置SpringMVC的环境。这部分操作相信小伙伴们都非常熟练了,所以文哥不再赘述。当我们搭建好SpringMVC的基本环境以后,我们开始进行如下操作。
第一步:编写一个跳转成功的目标页面,我们定义为success.jsp。
在理想的情况下,如果我们的程序没有出现异常,那么跳转的目标页面就是success.jsp。
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h4>这是一个成功页面.....</h4>
</body>
</html>
第二步:编写控制器代码
接下来我们编写Controller代码,在控制器方法内部我们定义模拟程序出现异常的代码,具体代码定义如下:
@Controller
@RequestMapping("hello")
public class HelloController {
@RequestMapping("demo1")
public String demo1(String username){
int i = 10 / 0; //模拟异常出现的代码
System.out.println("demo1方法执行了......");
return "success";
}
当我们启动项目,发送请求,我们发现异常信息抛到了浏览器页面上,这样非常不友好。
所以我们需要对出现的这种异常信息进行处理,如何处理呢?我们在web.xml里面定义处理错误的配置信息。
2. 配置异常处理规则
在web.xml里面,我们对异常的处理规则定义如下:
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
我们在error-page标签里面定义处理异常的异常状态码和页面。如果我们的服务器内部出现了500错误,我们就会跳转到500.jsp页面进行异常处理;如果我们请求资源找不到,那么我们就会跳转到404.jsp进行异常处理。这样异常信息就不再直接抛出到浏览器页面上。现在我们分别定义这两种错误处理的jsp页面。
3. 定义错误处理页面
首先我们在webapps目录下面定义404.jsp页面,页面定义如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h4>服务器资源不存在.....</h4>
</body>
</html>
接下来我们在webapps目录下面定义500.jsp页面,页面定义如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h4>这是一个500错误,请稍后再试.....</h4>
</body>
</html>
现在我们重启项目,重新发送请求,查看异常信息是否被处理成功:
接下来我们再模拟一个400的异常处理请求,我们看看400类型异常能否被处理成功:
以上就是Servlet默认处理异常的规则。在SpringMVC中,这种处理异常的方式同样适用。小伙伴们有没有觉得非常简单!
SpringMVC其他的异常处理方式
除了默认的异常处理方式以外,SpringMVC还支持其他的异常处理方式。接下来文哥给大家演示SpringMVC支持的其他的异常处理方式有哪些。
1. @ControllerAdvice + @ExceptionHandler注解进行异常处理
现在文哥给大家演示使用@ControllerAdvice + @ExceptionHandler注解进行异常处理的具体步骤。
第一步:编写控制器方法
我们编写几个控制器方法,在控制器方法内部模拟不同类型的异常,具体定义方法如下所示:
@Controller
@RequestMapping("exception")
public class ExceptionController {
//模拟出现空指针异常
@RequestMapping("testException")
public String testException(){
int[] arr = null;
arr[100] = 101;
return "success";
}
//模拟数组下标越界异常
@RequestMapping("testException1")
public String testException1(){
int[] arr = new int[3];
arr[5] = 100;
return "success";
}
//模拟除0异常
@RequestMapping("testException2")
public String testException2(){
int i = 10 / 0;
System.out.println(i);
return "success";
}
}
第二步:编写异常处理类
现在我们编写一个类,这个类使用@ControllerAdvice注解修饰。在这个类里面,我们定义不同异常类型的错误处理方法,这些方法使用@ExceptionHandler注解修饰。
/**
* 标识当前类是一个异常处理类
*/
@ControllerAdvice
public class MVCExceptionHandler {
/**
* 处理空指针异常
* @param e
* @return
*/
@ExceptionHandler(value = {NullPointerException.class})
public ModelAndView nullPointerExceptionHandler(Exception e){
ModelAndView modelAndView = new ModelAndView();
//描述异常信息
modelAndView.addObject("msg",e.toString());
//设置异常处理视图
modelAndView.setViewName("error");
return modelAndView;
}
/**
* 处理算术异常
* @param e
* @return
*/
@ExceptionHandler(value = ArithmeticException.class)
public ModelAndView arithmeticExceptionHandler(Exception e){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg",e.toString());
modelAndView.setViewName("error");
return modelAndView;
}
/**
* 处理下标越界异常
* @param ex
* @return
*/
@ExceptionHandler(value = ArrayIndexOutOfBoundsException.class)
public ModelAndView arrayIndexOutOfBoundsExceptionHandler(Exception ex){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg",ex.toString());
modelAndView.setViewName("error");
return modelAndView;
}
}
我们发现,在当前的异常处理类里面,我们定义处理异常的逻辑是返回ModelAndView对象。通过ModelAndView对象,我们设置了处理异常的页面是error.jsp页面。接下来我们定义错误处理页面。
第三步:编写异常处理页面
在webapps目录下面,我们定义一个错误处理页面,页面名称是error.jsp,定义如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h4>这是一个错误处理页面......</h4>
<span>${msg}</span>
</body>
</html>
第四步:启动项目,测试效果
接下来我们启动项目,发送请求,查看测试效果。
2. 使用SimpleMappingExceptionResolver处理全局异常
我们也可以使用SimpleMappingExceptionResolver组件来帮助我们进行异常的全局处理,前提是我们需要将SimpleMappingExceptionResolver组件注入到Spring容器里面来。接下来文哥给大家演示SimpleMappingExceptionResolver是如何处理异常的。
第一步:定义一个配置类,将SimpleMappingExceptionResolver交给Spring容器管理
现在我们定义一个Java配置类,然后定义一个方法。我们使用@Bean注解修饰这个方法,方法的返回值类型就是SimpleMappingExceptionResolver类型。通过配置类的方式将该组件交给Spring容器进行管理。
/**
* 全局异常处理器
*/
@Configuration
public class GlobalExceptionHandler {
@Bean
public SimpleMappingExceptionResolver getExceptionResolver(){
SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
Properties properties = new Properties();
/**
* 参数1:处理的具体的异常的类型
* 参数2:处理异常需要跳转到的视图
*/
properties.put("java.lang.NullPointerException","error");
properties.put("java.lang.ArithmeticException","error");
properties.put("java.lang.ArrayIndexOutOfBoundsException","error");
resolver.setExceptionMappings(properties);
return resolver;
}
}
第二步:定义处理异常的jsp页面
在webapps目录下面,我们定义一个错误处理页面,页面名称是error.jsp,定义如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h4>这是一个错误处理页面......</h4>
</body>
</html>
第三步:启动项目,测试效果
接下来我们启动项目,发送请求,查看测试效果。
3. 自定义异常处理器
在SpringMVC中,还支持我们自定义组件。在SpringMVC底层,Spring官方为我们定制了很多异常处理器。如果这些异常处理器都不满足我们的需求,我们还可以自定义异常处理器,来帮助我们进行异常处理。接下来文哥就给大家演示自定义异常处理器如何实现:
第一步: 定义一个类,实现HandlerExceptionResolver接口
现在我们定义一个全局异常处理类,这个类我们需要实现HandlerExceptionResolver接口,这个接口里面有一个方法resolveException。这个方法就是提供给我们定义异常处理信息的方法。
/**
* 异常处理器 必须实现HandlerExceptionResolver接口
*/
@Component
public class ExceptionResolver implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg",e.toString());
modelAndView.setViewName("error");
return modelAndView;
}
}
第二步:定义处理异常的jsp页面
在webapps目录下面,我们定义一个错误处理页面,页面名称是error.jsp,定义如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h4>这是一个错误处理页面......</h4>
</body>
</html>
第三步:启动项目,测试效果
接下来我们启动项目,发送请求,查看测试效果。
总结文章来源:https://www.toymoban.com/news/detail-718731.html
通过本篇文章,文哥给大家演示了在SpringMVC中如何进行异常处理。通过本篇文章的学习,小伙伴们应该发现了在SpringMVC中,SpringMVC给我们提供了很多种异常处理的方式,每一种异常处理方式在SpringMVC底层都有对应的异常处理器做支撑的,对于0基础的小伙伴来说,我们首先做到学会运用即可。在下一期文章中,文哥会给大家讲解在SpringMVC中如何使用拦截器,敬请大家期待!文章来源地址https://www.toymoban.com/news/detail-718731.html
到了这里,关于关于SpringMVC的异常处理,这些细节你知道吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!