Spring学习(五)—— 实用小工具

1. Spring拦截器

Spring拦截器可以对DispatcherServlet的请求进行拦截,并对Controller的处理结果进行修改。可以用于拦截未登陆用户访问页面,或者在处理器抛出异常后可以用于处理异常。
(1) 实现一个拦截器类

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @ program: SpringMVC02
 * @ description: 拦截器
 * @ author: NiuChen
 * @ create: 2020-08-19 17:46
 **/
public class SomeInterceptors implements HandlerInterceptor {
    @Override
    /**
     * 在postHandle之后执行,只有当preHandle返回true时才执行。
     * @param request:
     * @param response:
     * @param handler:
     * @param ex: 处理器抛出的异常,可以使用拦截器处理所抛出的异常
     * @return: void
     **/
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }

    @Override
    /**
     * Controller执行完毕准备将处理结果返回给DispatcherServlet之前,
     * 执行postHandler可以修改处理结果。
     * @param request:
     * @param response:
     * @param handler:
     * @param modelAndView:
     * @return: void
     **/
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    @Override
    /**
     * DispatcherServlet收到请求后调用该方法,如果返回值为true,则
     * 继续向后调用处理器;否则,则不再向后调用。
     * @param request:
     * @param response:
     * @param handler:
     * @return: boolean
     **/
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
        return true;
    }
}

(2) 配置拦截器


    <mvc:interceptors>
        <mvc:interceptor>
            
            <mvc:mapping path="/**"/>
            <bean class="com.niuchen.springmvc.interceptors.SomeInterceptors"/>
        mvc:interceptor>
    mvc:interceptors>

2. Spring简单异常处理

(1)简单异常处理器
a. 配置简单异常处理器

    
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                
                <prop key="java.lang.Exception">error1prop>
            props>
        property>
    bean>

b. 添加异常处理页面

(2)实用@ExceptionHandler注解
在处理器类中,添加异常处理方法,并使用@ExceptionHandler注解。可以根据不同异常类型,分别进行处理。最后针对异常,自行添加异常处理页面即可。

@ExceptionHandler
    //注解异常处理
    public String exHandler(Exception e, HttpServletRequest request){
        System.out.println("exHandler");
        //根据不同异常进行相应处理
        if (e instanceof NumberFormatException){
            request.setAttribute("errorMsg", "请输入正确数字");
            return "error";
        }else if(e instanceof StringIndexOutOfBoundsException){
            request.setAttribute("errorMsg", "下标越界");
            return "error";
        }else {
            return "system_error";
        }

    }

你可能感兴趣的:(Java)