Prefacio
El sistema interceptor es una parte importante del marco Struts2. No es exagerado decir que sin el sistema interceptor, no habrá tan fácil de usar marco Struts2. En el marco Struts2, una gran cantidad de interceptores han completado muchas funciones básicas. Por ejemplo, el Interceptor de Params es responsable de analizar los parámetros de las solicitudes HTTP y establecer las propiedades de la acción; El interceptor Servlet-Config pasa directamente la instancia httpservletRequest y la instancia httpservletResponse en la solicitud http a la acción; El Interceptor FileUpload es responsable de analizar el dominio del archivo en los parámetros de solicitud y configurar un dominio de archivo en las tres propiedades de la acción ... todo esto lo hace el interceptor incorporado. Por lo tanto, dominar los principios y métodos de uso de interceptores en Struts2, podemos comprender la "línea de vida" del marco Struts2.
Sin embargo, hasta ahora, además de configurar un filtro StrutSPrepareAnDexCuteFilter en Web.xml, aún no nos hemos contactado con ningún otro interceptores. Entonces, ¿por qué puede nuestra aplicación funcionar bien? De hecho, STRUTS2 ha habilitado una gran cantidad de interceptores comunes de forma predeterminada. Estos interceptores funcionarán siempre que el paquete configurado para la acción hereda el paquete de defensa de los puntales. Echemos un vistazo al interceptor incorporado de Struts2.
Struts2 Interceptor incorporado
Hay muchos interceptores incorporados en el marco Struts2. Estos interceptores casi completan el 70% del trabajo del marco Struts2, incluidos los parámetros de solicitud de análisis, asignando parámetros de solicitud a los atributos de acción, etc. El diseño inteligente de Struts2 se debe en gran medida al diseño del interceptor; Cuando es necesario extender la función Struts2, solo necesita proporcionar el interceptor correspondiente y configurarlo en el contenedor Struts2.
Estos interceptores incorporados están configurados en el archivo struts-default.xml en forma de pares de clase de nombre, donde el nombre es el nombre del interceptor, que es el identificador único del interceptor que se utilizará más adelante; La clase especifica la clase de implementación del interceptor. Para obtener una descripción detallada de estos interceptores incorporados, consulte la documentación oficial.
Configurar el interceptor
Definir un interceptor en el archivo Struts.xml solo requiere especificar un nombre de interceptor para la clase Interceptor, y la definición del interceptor se completa. Defina un interceptor usando <Interceptor .../>, por ejemplo:
<
Además, se pueden conectar múltiples interceptores juntos para formar una pila de interceptor, y <Interceptor-Ref .../> se usa en el interceptor para definir la referencia del interceptor. Por ejemplo:
<Interceptor-stack name = "Interceptor Stack One"> <Interceptor-Ref name = "Interceptor One"/> <Interceptor-Ref name = "Interceptor Two"/> ... </Interceptor-Stack>
Desde la perspectiva de la estructura del programa, la pila de interceptores consiste en múltiples interceptores; Pero desde la perspectiva de la función del programa, la pila de interceptor y el interceptor son los mismos, y los métodos que contienen se ejecutarán automáticamente antes de la ejecución del método de ejecución de acción. Por lo tanto, podemos tratar completamente la pila de interceptor como un interceptor más grande.
Dado que la pila de interceptor y el interceptor son consistentes, la pila de interceptor también puede contener una pila de interceptores, por ejemplo:
<Interceptor-stack name = "Interceptor Stack 2"> <Interceptor-Ref name = "ModelDriven"/> <Interceptor-Ref name = "Interceptor Stack 1"/> </Interceptor-stack>
Usando Interceptor
Una vez que se definen la pila de interceptor y el interceptor, esta pila o interceptor interceptor se puede usar para interceptar la acción. El comportamiento de intercepción del interceptor se ejecutará antes de que se ejecute la acción.
Al usar el elemento <Interceptor-Ref .../>, la sintaxis de configuración de usar un interceptor en una acción es exactamente la misma que la sintaxis de hacer referencia a un interceptor al configurar la pila de interceptor. Por ejemplo:
<Action name = "Login"> <resultado name = "Error">/error.jsp </resultado> <resultado name = "éxito">/bienvenido name = "Key"> Parámetros dinámicos </amam> </ interceptor-ref> </action>
Después de completar esta configuración, estos tres interceptores funcionarán antes de ejecutar la descarga.
Configurar el interceptor predeterminado
Al configurar un paquete, se puede especificar con un interceptor predeterminado. Una vez que se especifica un interceptor predeterminado para un paquete, el interceptor predeterminado funcionará si la acción en ese paquete no especifica explícitamente al interceptor. Sin embargo, una vez que aplicamos explícitamente un interceptor a la acción en el paquete, el interceptor predeterminado no funcionará; Si la acción requiere que se use el interceptor predeterminado, debe configurar manualmente la referencia al interceptor.
El interceptor predeterminado para el paquete donde se encuentra la acción entrará en vigencia solo si no se aplica explícitamente en la acción.
Configure el interceptor predeterminado para usar el elemento <-Interceptor-REF .../>, que se usa como hijo del elemento <Package .../>, y configure el interceptor predeterminado para todas las acciones en este paquete. Por ejemplo:
<default-interceptor-ref name = "Interceptor predeterminado"/>
También puede especificar parámetros para el interceptor predeterminado, por ejemplo:
<Default-interceptor-ref name = "Interceptor predeterminado"> <param name = "parámetro name"> valor del parámetro </amam> </default-interceptor-ref>
En el archivo Struts-Default.xml, se configura un paquete abstracto llamado Struts-Default, en el que se define una referencia de interceptor predeterminada llamada DefaultStack. Cuando el paquete que definimos hereda el paquete de defensa de Struts, también hereda su pila de interceptor predeterminada: defaultStack, lo que también significa que si no aplicamos explícitamente el interceptor para que la acción, la pila de interceptor predeterminada, entrará en vigencia automáticamente.
Interceptor personalizado
1>. Agregue una clase para heredar la clase de Interceptor Abstract, o implementar la interfaz de Interceptor
public class TimeInterceptor extiende AbstractInterceptor {/*** El valor de retorno del método central de la intersección es una cadena*/@overridePublic String intercept (ActionInVocation Invocation) lanza la excepción {// TODO Método Generado automático "Login";}}}}}}}2>. Agregue los interceptores del nodo infantil en el paquete Struts.xml y agregue el nodo de interceptor debajo de él
<paquete name = "gots" namespace = "/broters" extends = "Common-PKG"> <Sceptors> <Interceptor name = "Timeinterceptor"> </ Interceptor> </ Interceptors> </paccion>
3> .Add Interceptor de nodo infantil en el nodo de acción Desea ser interceptado
<Action name = "list_category" método = "list"> <interceptor-ref name = "Timeinterceptore"> </interceptor-ref> <resultado name = "list" type = "despachador">/páginas/category/list.jsp </resultado> </action>
Resumir
Este artículo proporciona un resumen preliminar del núcleo de Stuts2: el interceptor. En el artículo posterior, implementaremos nuestro propio interceptor y aplicaremos los puntos de conocimiento resumidos en este artículo.
De acuerdo, lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.