Préface
Le système intercepteur est une partie importante du cadre Struts2. Il n'est pas exagéré de dire que sans le système intercepteur, il n'y aura pas de framework Struts2 aussi facile à utiliser. Dans le cadre Struts2, un grand nombre d'intercepteurs ont rempli de nombreuses fonctions de base. Par exemple, l'intercepteur params est responsable de l'analyse des paramètres des demandes HTTP et de la définition des propriétés d'action; L'intercepteur Servlet-Config transmet directement l'instance HTTPServletRequest et l'instance httpservletResponse dans la demande HTTP à l'action; L'interceptor FileUpload est responsable de l'analyse du domaine de fichier dans les paramètres de demande et de la définition d'un domaine de fichier sur les trois propriétés de l'action ... Tout cela est fait par l'intercepteur intégré. Par conséquent, maîtrisant les principes et les méthodes d'utilisation des intercepteurs dans Struts2, nous pouvons saisir la "ligne de vie" du cadre Struts2.
Cependant, jusqu'à présent, en plus de configurer un filtre StruTSprepareAndexEcuteFilter dans web.xml, nous n'avons pas encore contacté d'autres intercepteurs. Alors pourquoi notre application peut-elle bien fonctionner? En fait, Struts2 a permis par défaut un grand nombre d'intercepteurs communs. Ces intercepteurs fonctionneront tant que le package configuré pour Action héritera du package Struts-Default. Jetons un coup d'œil à l'intercepteur intégré de Struts2.
Struts2 Intercepteur intégré
Il existe de nombreux intercepteurs intégrés dans le cadre Struts2. Ces intercepteurs terminent presque 70% des travaux du cadre Struts2, y compris les paramètres de demande d'analyse, l'attribution des paramètres de demande aux attributs d'action, etc. La conception intelligente de Struts2 est largement due à la conception de l'intercepteur; Lorsqu'il est nécessaire d'étendre la fonction Struts2, il vous suffit de fournir l'intercepteur correspondant et de le configurer dans le conteneur Struts2.
Ces intercepteurs intégrés sont configurés dans le fichier Struts-Default.xml sous la forme de paires de classe de noms, où le nom est le nom de l'intercepteur, qui est l'identifiant unique de l'intercepteur à utiliser plus tard; La classe spécifie la classe d'implémentation de l'intercepteur. Pour une description détaillée de ces intercepteurs intégrés, veuillez vous référer à la documentation officielle.
Configurer l'intercepteur
La définition d'un intercepteur dans le fichier Strut.xml nécessite uniquement de spécifier un nom d'intercepteur pour la classe d'intercepteur, et la définition d'intercepteur est terminée. Définissez un intercepteur à l'aide de <intercepteur ... />, par exemple:
<! - Définissez l'intercepteur en spécifiant le nom d'intercepteur et la classe d'implémentation d'interceptor -> <intercepteur name = "Nom d'interceptor"> <param name = "Param name"> Param Value </ Param> </ interceptor>
De plus, plusieurs intercepteurs peuvent être connectés ensemble pour former une pile d'interceptor, et <intercepteur-ref ... /> est utilisé dans l'intercepteur pour définir la référence intercepteur. Par exemple:
<interceptor-stack name = "Interceptor Stack One"> <interceptor-ref name = "Interceptor One" /> <interceptor-ref name = "Interceptor deux" /> ... </ interceptor-stack>
Du point de vue de la structure du programme, la pile d'intercepteur se compose de multiples intercepteurs; Mais du point de vue de la fonction du programme, la pile d'interceptor et l'intercepteur sont les mêmes, et les méthodes qu'ils contiennent seront automatiquement exécutées avant l'exécution de la méthode d'exécution d'action. Par conséquent, nous pouvons complètement traiter la pile d'interceptrice comme un intercepteur plus grand.
Étant donné que la pile d'interceptor et l'intercepteur sont cohérentes, la pile d'intercepteur peut également contenir une pile d'interceptor, par exemple:
<interceptor-stack name = "Interceptor Stack 2"> <interceptor-ref name = "ModelDriven" /> <interceptor-ref name = "Interceptor Stack 1" /> </ interceptor-stack>
Utilisation d'interceptor
Une fois la pile d'interceptrice et l'intercepteur défini, cette pile d'intercepteur ou cette intercepteur peut être utilisée pour intercepter l'action. Le comportement d'interception de l'intercepteur sera exécuté avant l'exécution de l'action.
En utilisant l'élément <intercepteur-ref ... />, la syntaxe de configuration de l'utilisation d'un intercepteur dans une action est exactement la même que la syntaxe de référence à un intercepteur lors de la configuration de la pile d'intercepteur. Par exemple:
<action name = "Login"> <result name = "error"> / error.jsp </sult> <result name = "Success"> / bienvenue.jsp </ résultat> <! - Interceptor stack -> <interceptor-ref name = "DefaultStack" /> <! - Interceptor-ref name = "test1" /> <! name = "key"> Paramètres dynamiques </param> </ interceptor-ref> </ action>
Une fois cette configuration terminée, ces trois intercepteurs fonctionneront avant l'exécution de la téléchargement.
Configurer l'intercepteur par défaut
Lors de la configuration d'un package, il peut être spécifié avec un intercepteur par défaut. Une fois qu'un intercepteur par défaut est spécifié pour un package, l'intercepteur par défaut fonctionnera si l'action de ce package ne spécifie pas explicitement l'intercepteur. Cependant, une fois que nous applirons explicitement un intercepteur à l'action dans le package, l'intercepteur par défaut ne fonctionnera pas; Si l'action nécessite que l'intercepteur par défaut soit utilisé, vous devez configurer manuellement la référence à l'intercepteur.
L'intercepteur par défaut pour le package où l'action est située ne prendra effet que s'il n'y a pas explicitement appliqué dans l'action.
Configurez l'intercepteur par défaut pour utiliser l'élément <default-interceptor-ref ... />, qui est utilisé comme enfant de l'élément <package ... />, et configurez l'intercepteur par défaut pour toutes les actions sous ce package. Par exemple:
<default-interceptor-ref name = "default interceptor" />
Vous pouvez également spécifier des paramètres pour l'intercepteur par défaut, par exemple:
<default-interceptor-ref name = "Default Interceptor"> <param name = "Paramètre Nom"> Valeur du paramètre </param> </ default-interceptor-ref>
Dans le fichier Struts-Default.xml, un package abstrait nommé Struts-default est configuré, dans lequel une référence d'intercepteur par défaut nommée DefaultStack est définie. Lorsque le package que nous définissons hérite du package Struts-Default, il hérite également de sa pile d'interception par défaut: DefaultStack, ce qui signifie également que si nous n'appliquons pas explicitement l'intercepteur pour l'action, la pile d'intercepteur de DefaultStack prendra effet automatiquement.
Intercepteur personnalisé
1>. Ajoutez une classe pour hériter de la classe AbstractInterceptor, ou implémentez l'interface intercepteur
Classe publique TimeInterceptor étend AbstractInterceptor {/ *** La valeur de retour de la méthode de base de l'interception est une chaîne * / @ OverRidepublic String Intercept (ActionInvocation Invocation) lève une exception {// TODO Méthode générée automatiquement Stubreturn "Login";}}2>. Ajouter le nœud enfant interceptors dans le package de struts.xml et ajouter le nœud intercepteur
<package name = "woods" namespace = "/ bien" étend = "Common-pkg"> <intercepteurs> <intercepteur name = "TimeInterceptor"> </ interceptor> </ interceptors> </ package>
3> .add nœud enfant interceptor-ref sous le nœud d'action que vous souhaitez intercepter
<action name = "list_category" metheth = "list"> <interceptor-ref name = "timeInterceptor"> </ interceptor-ref> <result name = "list" type = "Dispatcher"> / pages / catégorie / list.jsp </ résultat> </ action>
Résumer
Cet article fournit un résumé préliminaire du cœur de Stuts2 - l'intercepteur. Dans l'article ultérieur, nous mettrons en œuvre notre propre intercepteur et appliquerons les points de connaissances résumés dans cet article.
D'accord, ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.