Spring 异常处理 和 原生servlet异常处理

本文探讨了Spring框架中的异常处理,包括在spring-mvc.xml和web.xml的配置,以及局部和全局异常处理器的实现。局部异常处理仅处理特定类的异常,全局异常处理则能捕获所有异常。在原生Servlet中,通过web.xml配置错误页面来实现异常跳转,例如404错误会被重定向到定制的错误页面。同时,文章指出Spring的异常处理不处理如404这样的HTTP状态码错误,并讨论了在dispatcherServlet与原生Servlet异常处理共存时的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring 异常处理

配置spring-mvc.xml

同普通的SpringVC配置

配置web.xml

同普通的SpringVC配置

演示

局部异常处理

UserHandler

@Controller  //纳入容器
@RequestMapping("/user") //访问路径
public class UserHandler {
	@RequestMapping("login")
	public String login() {
		int i=1/0;	//强行制造一个异常
		return "hello";
	}	
	
	@ExceptionHandler	//异常时触发本方法  
	public ModelAndView exceptionHandler(Exception e) {		//形参是Exception 
		ModelAndView model=new ModelAndView();
		model.setViewName("error");	//设置视图文件
		model.addObject("error", "服务器内部错误,请尝试刷新页面!"); 	//设置回传数据
		return model;	//形参是ModelAndView 
	}
}

当出现异常时,会调用本类种的异常处理器。

error.jsp

<body>
		错误页面
		<hr>
		${error}
</body>

运行结果
在这里插入图片描述

全局异常处理

局部异常处理代码在handler内,只处理本类中的异常,而全局异常处理,可以处理所有的异常。

@Component //纳入容器
public class ExceptionHandler implements HandlerExceptionResolver{
	@Override
	public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse resp, Object handlerBean,Exception exception) {
		//和局部使用方法差不多
		ModelAndView model=new ModelAndView();
		model.setViewName("error");
		model.addObject("error", "这是一个全局异常处理!");
		return model;
	}
}

Request和Response这些参数按需使用。如果Response跳转,返回值填null即可。
运行结果
在这里插入图片描述
注意点
1、同时存在局部异常处理和全局异常处理时,会优先匹配局部异常处理。
2、Spring的异常处理只处理抛出的异常,对于404之类的不会处理。

原生Servlet异常跳转

配置web.xml

web.xml中添加 error-page标签

 <error-page>
  			<error-code>404</error-code>  <!--错误代码-->
  			<location>/404.html</location> <!--跳转到页面-->
  </error-page>  

当发生404错误时,跳转到根目录下的404.html页面。

创建一个静态错误页面

404.html

<body>
 访问的资源不存在!404!!404!!
</body>

运行结果
在这里插入图片描述
dispatcherServlet会拦截对静态资源的访问,如何同时使用原生servlet和Spring异常处理?SpringMVC访问静态资源

一般开发的时候测试完会把异常处理的代码注释掉,因为开发其他功能的时候还要看错误信息呢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值