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;
}
}