Emmachen / SapUi5Test

1 stars 1 forks source link

Java之Interceptor和Filter #34

Open ghost opened 8 years ago

ghost commented 8 years ago

原文 HandlerInterceptor 是Spring里面的拦截器 Filter是Java里面的过滤器

共同点 还是贴下Java里面的注释吧,解释还是很到位的:

//做实际的请求之前调用
//返回true会接着链式调用
//返回false终止链式调用
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception;

//请求之后,解析视图界面之前调用
void postHandle(
            HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
            throws Exception;

//解析完界面之后调用
void afterCompletion(
            HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception;

// 在mvc-dispatcher-servlet.xml或者applicationContext.xml中配置
    <!--interceptors begin-->
    <mvc:interceptors>
        <bean class="com.xxx.AllInterceptor"/>
    </mvc:interceptors>
    <!--interceptors end-->

Filter配置

@Component
public class RequestLogFilter implements Filter{

    @Override
    public void destroy() {
        System.out.println("destory");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        System.out.println("doFilter");
        chain.doFilter(request , response);

    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("init");

    }

}

// web.xml配置
<filter>
    <filter-name>testFilter</filter-name>
    <filter-class>com.abcd.system.RequestLogFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>testFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

测试结果顺序:发现filter会在前面处理 init doFilter preHandle postHandle afterCompletion