1.简单异常处理器
controller:
@Controller
public class DemoController
{
@Autowired
private DemoService demoService;
@RequestMapping("show")
public String show(String name) throws FileNotFoundException, MyException {
System.out.println("show running");
//demoService.show()
demoService.show4();
return "success";
}
}
service:
public class DemoServiceImpl implements DemoService
{
@Override
public void show()
{
System.out.println("抛出类型转化异常");
Object str = "cxz";
Integer i = (Integer)str;
}
public void show4() throws MyException
{
System.out.println("抛出自定义异常");
throw new MyException();
}
}
spring-mvc:
<!--配置异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error"></property>
<property name="exceptionMappings">
<map>
<entry key="java.lang.ClassCastException" value="error1"></entry><!--类型转换异常-->
<entry key="exception.MyException" value="error2"></entry><!--自定义异常-->
</map>
</property>
</bean>
需要生成demoService对象
<bean id="demoService" class="Service.impl.DemoServiceImpl"></bean>
error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>通用的错误提示页面error!</h1>
</body>
</html>
error1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>类型转换异常</h1>
</body>
</html>
error2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>自定义异常</h1>
</body>
</html>
2.自定义异常处理器
public class MyExceptionResolver implements HandlerExceptionResolver
{
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e)
{
ModelAndView modelAndView = new ModelAndView();
if(e instanceof MyException)
{
modelAndView.addObject("info","自定义异常");
}else if(e instanceof ClassCastException)
{
modelAndView.addObject("info","类转换异常");
}
modelAndView.setViewName("error");
return modelAndView;
}
}
spring-mvc.xml注册
<!--自定义异常处理器-->
<bean class="resolver.MyExceptionResolver"></bean>
error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>${info}!!!</h1>
</body>
</html>
controller:
@Controller
public class DemoController
{
@Autowired
private DemoService demoService;
@RequestMapping("show")
public String show(String name) throws MyException {
System.out.println("show running");
demoService.show();
//demoService.show4();
return "success";
}
}
service:
public class DemoServiceImpl implements DemoService
{
@Override
public void show()
{
System.out.println("抛出类型转化异常");
Object str = "cxz";
Integer i = (Integer)str;
}
public void show4() throws MyException
{
System.out.println("抛出自定义异常");
throw new MyException();
}
}
浏览器访问controller的show方法,然后在service层的方法抛出异常,通过MyExceptionResolver接收异常,如果异常与抛出的异常对应的话,视图对象就会添加异常信息给error.jsp,再跳转到error.jsp