SpringMVC interceptor and exception handling mechanism

concept

SpringMVC interceptors are similar to filters and are used for pre- and post-processing

Connecting interceptors into a chain in a certain order is the interceptor chain.

The difference between interceptors and filters

A quick start with interceptors

  1. Create an interceptor class to implement the HandlerInterceptor interface

  2. Configure interceptor

    <!--    配置拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
    <!--            对那些资源执行拦截操作,这是对所有资源执行-->
                <mvc:mapping path="/**/"/>
                <bean class="com.myspring.interceptor.MyHandlerInterceptor"></bean>
            </mvc:interceptor>
        </mvc:interceptors>
    
  3. Test the interception effect of the interceptor

    package com.myspring.interceptor;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class MyHandlerInterceptor implements HandlerInterceptor {
    //    覆盖三个方法
    //在目标方法(控制类中对应方法)执行前执行
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            String param = request.getParameter("param");
            if("yes".equals(param)){
                //        返回值为false不放行,true放行
                return true;
            }
            else {
                request.getRequestDispatcher("/error.js").forward(request,response);
                return  false;
            }
        }
    //在目标方法执行之后,视图返回之前执行
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            modelAndView.addObject("name","xiaoming");
        }
    //在整个流程都执行完毕后执行
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            
        }
    }
    

Execution of the three methods: Configure the two interceptors in the configuration file as 1 and 2. The execution order is: preHandle of 1 > preHandle of 2 > postHandle of 2 > postHandle of 1 > afterCompletion of 2 > afterCompletion of 1

SpringMVC exception handling mechanism

As shown in the picture:

Two ways to handle exceptions:

  • Simple exception handler SimpleMappingExceptionResolver using springmvc
  • Use Spring's exception handling interface HandlerExceptionResolver to customize your own exception handler

SimpleMappingExceptionResolver

It mainly requires mapping configuration of corresponding exceptions and views.

In the springmvc configuration file:

    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!--        默认错误页面-->
        <property name="defaultErrorView" value="error"/>
        <property name="exceptionMappings">
            <map>
                <entry key="java.lang.ClassCastException" value="error1"/>
                <entry key="java.lang.ClassNotFoundException" value="error2"/>
            </map>
        </property>
    </bean>

HandlerExceptionResolver custom exception handler

  1. Create an exception handler class to implement HandlerExceptionResolver

    public class MyExceptionResolver implements HandlerExceptionResolver {
        @Override
        //参数Exception是异常对象,返回值是你要跳转的错误页面
        public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
            ModelAndView modelAndView = new ModelAndView();
            if(e instanceof  Exception){
    
            }
            modelAndView.setViewName("error.jsp");
            return modelAndView;
        }
    }
    
  2. Configure exception handler

    <bean class="com.myspring.domain.MyExceptionResolver"/>
    

    XML copy full screen

  3. Write exception page

Guess you like

Origin blog.csdn.net/2301_78834737/article/details/131990539