La diferencia y conexión entre interceptores y filtros en SpringMVC
(1) Los interceptores se basan en el mecanismo de reflexión de Java y los filtros se basan en devoluciones de llamadas de funciones.
(2) El interceptor no depende del contenedor de servlet, pero el filtro depende del contenedor de servlet.
(3) Los interceptores solo pueden manejar solicitudes de acción, mientras que los filtros pueden manejar casi todas las solicitudes.
(4) Los interceptores pueden acceder a objetos en el contexto de acción y la pila de valores, pero los filtros no.
(5) En el ciclo de vida de la acción, el interceptor se puede llamar varias veces, mientras que el filtro solo se puede llamar una vez cuando se inicializa el contenedor.
(6) El interceptor puede obtener los beans en el contenedor IOC, pero el filtro no. Esto es muy importante. Inyecte el servicio en el interceptor.
Se puede llamar lógica empresarial.
Luego analice:
1. Los filtros son estándares JavaEE y se implementan mediante devoluciones de llamadas de funciones. Se prepara después de que la solicitud ingresa al contenedor y antes de ingresar al Servlet.
y posprocesamiento antes de que finalice la solicitud y regrese al front-end.
@Override
DoFilter de anulación pública (solicitud de ServletRequest, respuesta de ServletResponse, cadena FilterChain) arroja IOException, ServletException {
System.out.println("Before. ..");
chain.doFilter(solicitud, respuesta);
System.out.println("después de...");
}
chain.doFilter(solicitud, respuesta); este método se llama cuenca. De hecho, el método doService() del Servlet lo es.
chain.doFilter(solicitud, respuesta); utilice este método.
2. El interceptor está envuelto en un filtro.
@Override
El preprocesamiento booleano público (solicitud HttpServletRequest, respuesta HttpServletResponse, controlador de objetos) genera una excepción {
system println(" pre handle ". );
Devuelve verdadero
}
@Override
Identificador de publicación nula pública (solicitud de solicitud de servlet http, respuesta HttpServletResponse, controlador de objetos , ModelAndView modelAndView) arroja una excepción {
system . println(" post handle "); >anulación pública después de la finalización (solicitud de servlet http, respuesta HttpServletResponse, controlador de objetos, excepción ex) genera una excepción {
system . }
A.preHandle() Este método se ejecuta antes del método chain.dofilter (solicitud, respuesta) del filtro, es decir, antes.
[Sistema. out.println("antes...")] [chain.dofilter(solicitud, respuesta)].
Después del método b.preHandle() y antes de devolver el método ModelAndView, puede operar el contenido ModelAndView del controlador.
El método C.afterCompletion() se ejecuta un paso antes de que el filtro regrese al front-end, es decir, en [chain.dofilter (solicitud, respuesta)].
[Sistema. out.println("Después...")].
3.3 mecanismo. SpringMVC distribuye solicitudes a diferentes controladores desde el mismo Servlet. De hecho, este paso está en el método service() del Servlet.
Ejecutado el. Por lo tanto, el orden de ejecución de filtros, interceptores, métodos service() y métodos de despacho() debe ser el siguiente: