1. 拦截器
概念:Springmvc中的拦截器,类似于Servlet中的过滤器Filter,用于对处理器进行预处理和后处理;
拦截器里面可以写很多的操作,比如重定向,请求转发等;
1.先要实现自定义的拦截器并进行配置
在SpringMVC.xml中的配置:
<!--对拦截器进行配置-->
<mvc:interceptors>
<!--配置拦截器-->
<mvc:interceptor>
<!--要配置的具体方法路径,/*代表路径下所有方法都不拦截;这个方法是指controller下的映射地址,
也就是@RequestMapping的值;-->
<mvc:mapping path="/acontroller/*"/>
<!--这个方法和上面的相反,是配置不拦截的具体方法;
<mvc:exclude-mapping path=""/>
-->
<!--配置自定义的拦截器标签-->
<bean id="newInterceptor" class="cn.dxs.interceptor.NewInterceptor"/>
</mvc:interceptor>
<!--如果需要配置多个拦截器,只需要在这后面再次添加一个mvc:interceptor标签就可以了,-->
</mvc:interceptors>
然后是自定义的拦截器;
public class NewInterceptor implements HandlerInterceptor {
//一个预处理方法,在Controller执行前,运行;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截器执行");
return false;//如果返回是true就是执行下一个拦截器,如果是false就执行controller中的方法;
}
@Override//这个方法运行是在controller里面的方法运行之后;在跳转页面之前;
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override//所有的方法和页面都执行了后,才开始的方法;
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
自定义的拦截器,首先需要实现接口HandlerInterceptor ,其次是需要在Spring的配置文件中对其进行配置;然后就是写一个controller方法,这个方法的@RequestMapping地址必须是拦截器mvc:mapping 所对应的;
2. SpringMVC的异常
在SpringMVC中和普通的Java程序一样,也有可能会出现异常,并且要抛出异常,但是如果不进行进一步处理,就有可能像下图一样;
也就是说在没有进行异常的进一步处理,异常就会被直接显示在页面上,这是极其不美观的,这时候就可以用到SpringMVC的异常处理器;
1. 先要创建一个自定义的异常类
自定义一个异常类之后,才能方便接收所有异常的信息,并返回到页面;
public class NewException extends Exception{
private String message;//创建一个信息属性;
//创建一个构造方法,保证每次创建异常的时候,能有相应的描述信息;
public NewException(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
2. 异常处理器的编写和配置
异常处理器必须要继承接口:HandlerExceptionResolver;
public class NewExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
//这个方法用来处理异常逻辑;
//先创建一个自定义异常的对象引用
NewException exception = null;
//然后看异常是否是这个自定义异常的当前类或子类;
if(e instanceof NewException) {
//由于e是NewException子类,就可以强转类型;
exception = (NewException) e;
}else{
//否则创建NewException对象,对错误进行详细的描述;
exception = new NewException("系统出现错误!请稍后......");
}
//创建一个ModelAndView对象,对值进行传输;
ModelAndView mv = new ModelAndView();
//将需要返回的对象放入;
mv.addObject("exception", exception.getMessage());
//将需要返回的页面输入;视图解析器会将其解析;
mv.setViewName("error");
return mv;
}
}
写好基本的异常处理器之后还需要在Spring的配置文件里面进行配置,(文件名SpringMVC.xml)
<bean id="newExceptionResolver" class="cn.dxs.exception.NewExceptionResolver"/>
3. 最后编写一个错误的页面,进行返回值的接收;
异常后页面返回的结果: