SpringMVC: interceptores y problema de la basura el poste chino
1, interceptores
Spring MVC El interceptor (Interceptor) similar al filtro (Filter) Servlet es, es principalmente para interceptar una petición de usuario y procesadas en consecuencia.
La diferencia entre el filtro y el interceptor: Blocker es una aplicación de pensamiento AOP.
filtro
- Parte de la especificación servlet, cualquier proyecto Java Web se puede utilizar
- Después de configurar / url-pattern en el *, puede interceptar todos los recursos que desea acceder
interceptador
- Interceptores son SpringMVC marco de su propia, sólo para utilizar el proyecto para utilizar el marco de SpringMVC
- Interceptor interceptará método de control de acceso, si la visita es jsp / html / css / imagen / js no serán interceptados
Costumbre interceptor de aplicación:
Mediante la implementación de HandlerInterceptorAdapter
la interfaz, y Spring MVC registrados pueden utilizar un interceptor personalizado.
HandlerInterceptorAdapter
Interfaz proporciona tres métodos:
preHandle()
procesador de servicio se llama antes de procesar la solicitud- Este método será ejecutado antes de que el método Controller
- El valor de retorno indica si continuar con las operaciones posteriores:
- Return true, lo que indica que se va;
- Devuelve FALSE, interrupciones todas las operaciones posteriores (incluyendo método de interceptación de llamadas y la siguiente ejecución controlador).
postHandle()
Después de la petición realiza procesador servicio de procesamiento se ha completado, antes de realizar generar vistas- Después de Controlador llamadas a métodos de análisis y ejecutan antes vista.
- Este método puede hacer más cambios en el modelo y la vista.
afterCompletion()
En DispatcherServlet completamente terminado de procesar la solicitud después de las llamadas, se puede utilizar para limpiar los recursos.- Este método se lleva a cabo después de la finalización (es decir, extremo vista rendering) de toda la solicitud.
- Se puede lograr algo de limpieza de recursos, registros y otra información para el trabajo a través de este método.
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return false;
}
@Override
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 {
}
}
configuración del resorte-web.xml:
<mvc:interceptors>
<bean class="com.xu.web.interceptor.MyInterceptor1"/> <!-- 1 -->
<mvc:interceptor> <!-- 2 -->
<mvc:mapping path="/**"/> <!-- 3 -->
<mvc:exclude-mapping path=""/> <!-- 4 -->
<bean class="com.xu.web.interceptor.MyInterceptor2"/> <!-- 5 -->
</mvc:interceptor>
<mvc:interceptor> <!-- 6 -->
<mvc:mapping path="/hello"/> <!-- 7 -->
<bean class="com.xu.web.interceptor.MyInterceptor3"/> <!-- 8 -->
</mvc:interceptor>
</mvc:interceptors>
- Como
1
se muestra, registrada en los interceptores son intercepta interceptor interceptor globales todas las solicitudes - Como
2 | 6
se muestra, registrado con el interceptor interceptor es un bloqueador parcial, necesidad de configurar de forma explícita el interceptor solicitud que interceptan. - Como
3
se muestra, bloquear todos los caminos representa - Como
4
se muestra, bajo la premisa representa intercepción determinadas solicitudes, excepto / no intercepta algunas peticiones - Como
7
se muestra, expresado bloquea todas las/hello
rutas que comienzan con
Cuando una pluralidad de interceptores, llamando secuencia prensa preHandle
método y luego llama inversa cada interceptor postHandle
y afterCompletion
métodos, a saber:
- Una de
- B para
- para C
- C-post
- C-después de
- B-post
- B-después de
- Una publicación
- A-después de
2, POST solicita ilegible china
Spring MVC proporciona una petición POST filtro dedicado a resolver el problema de la basura, usted debe estar configurado para utilizar el archivo web.xml:
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
solicitud get, en general, se pueden resolver mediante la modificación de la configuración de los ajustes Tomcat archivo.