1,异常的处理
先创建自己的异常 如果有问题的抛出自己定义的异常
小插曲 自定义异常:1,继承运行时异常 重写构造方法 和带参数的构造方法
public class MyException extends RuntimeException {
public MyException() {
super();
}
public MyException(String message) {
super(message);
}
}
小插曲 自定义异常:1,继承异常 重写带参数的构造方法
class MyException extends Exception {
private String message;
MyException(String message) {
this.message = message;
下面是异常页面的处理
@Component
public class MyExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
//统一异常处理
//这里需要统一把获取到的所有的Exception通过MV对象给转发error页面
ModelAndView mv = new ModelAndView();
mv.setViewName("error");
//这里判断是不是我们自定义的异常也里面
//比如我们是遇到了用户注册的时候 电话有问题
//throw我们的异常 这里可以直接自动获得所有的异常
if (ex instanceof MyException) {
mv.addObject("data", ex.getMessage());
} else {
mv.addObject("data", "其他信息");
}
return mv;
}
}
2,拦截器:
1,创建一个类 事项HandlerInterceptor接口 重写方法:
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
//拦截器之前做的事情
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
return true;
}
@Override
//拦截器之后做的事情
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}
@Override
//拦截器最终做的事情
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion");
}
}
2,重写方法之后 我们需要告诉框架 我们创建了一个拦截器 需要你去找他:
在spring.xml文件中 加入以下配置:
<!-- 拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- http://localhost:8080/demo1/
/* 拦截第一层的请求(只有第一层也就是http://localhost:8080/demo1)
/** 拦截第二层请求(有第一和第二层也就是http://localhost:8080/demo1/user)
** 拦截所有的请求(所有的请求)
-->
<mvc:mapping path="拦截的路径写在这里"/>
<bean class="自己创建的拦截器(实现的类)的路径"></bean>
</mvc:interceptor>
<!--拦截器按照顺序执行下去 可以配置多个-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.controller.MyInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>