javaEE Springmvc,异常处理器,HandlerExceptionResolver,全局异常处理

Springmvc的jar包下载:https://pan.baidu.com/s/1Uu5R96z4LwwtydGq4B60Xg  密码:8c3n

CustomExceptionResolver.java(自定义的异常处理器,实现HandlerExceptionResolver接口):

package com.xxx.springmvc.exception;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import com.xxx.springmvc.exception.MyException;  //自定义的异常类型

//自定义的异常处理器
//实现HandlerExceptionResolver接口 
public class CustomExceptionResolver implements HandlerExceptionResolver {
	
	//实现接口中的方法
	public ModelAndView resolveException(HttpServletRequest request, 
			HttpServletResponse response, Object obj,Exception e) {
		
		//obj表示发生异常的地方 (包名+类名+方法名(形参) 的字符串)
		
		ModelAndView mav = new ModelAndView();
		//判断异常的类型
		if(e instanceof MyException){  //如果是预期异常
			MyException me = (MyException)e;
			mav.addObject("error", me.getMsg());  //jsp页面中可以通过el表达式${error}获取。
		}else{  //否则是未知异常
			mav.addObject("error", "未知异常"); 
		}
		mav.setViewName("error");  //指定视图路径。
		return mav;
	}

}

src/springmvc.xml(Springmvc的核心配置文件,注册自定义的异常处理器):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">


        <!-- 开启注解扫描。 扫描 @Controler  @Service等注解   -->
        <context:component-scan base-package="com.xxx"/>
        
        <!-- 注解驱动; 指定处理器映射器、处理器适配器 -->
        <mvc:annotation-driven />
        
        <!-- 注册Springmvc的异常处理器。全局异常处理 -->
        <bean class="com.xxx.springmvc.exception.CustomExceptionResolver"/>
        
        
        <!-- 视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        	<property name="prefix" value="/WEB-INF/jsp/"/>  <!-- 视图(jsp页面)请求路径的前缀 -->
        	<property name="suffix" value=".jsp"/>      <!-- 后缀 -->
        </bean>
        
   </beans>

ItemController.java(Controller控制器,抛出异常):

package com.xxx.springmvc.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.xxx.springmvc.exception.MyException;
import com.xxx.springmvc.pojo.Items;
import com.xxx.springmvc.service.ItemService;

//商品管理
@Controller
@RequestMapping(value = "/item")
public class ItemController {
	
	@Autowired
	private ItemService itemService;
	
	@RequestMapping(value = "/itemlist.action")
	public String itemList(Model model) throws MyException{
		
		List<Items> list = itemService.selectItemsList();
		if(list == null){
			throw new MyException("商品信息不能为空");  //抛出自定义异常(预期异常)。
		}
		
		model.addAttribute("itemList", list);
		return "itemList";
	}
}

MyException.java(自定义的异常类型):

package com.xxx.springmvc.exception;

//自定义异常。 继承Exception
public class MyException extends Exception {
	
	private String msg;

	public MyException(String msg) {
		super();
		this.msg = msg;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}
	
}

猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/82814683
今日推荐