1. Accédez ou ajoutez des attributs de demande/session/application
public String scope() lève une exception{
ActionContext ctx = ActionContext.getContext();
ctx.getApplication().put("app", "Application scope");//Placer l'application dans ServletContext
ctx.getSession().put("ses", "session range");//Mettre ses dans la session
ctx.put("req", "request range");//Mettre la requête dans la requête
renvoyer « portée » ;
}
JSP :
<corps>
${applicationScope.app} <br>
${sessionScope.ses}<br>
${requestScope.req}<br>
</corps>
2. Obtenez l'objet HttpServletRequest / HttpSession / ServletContext / HttpServletResponse
Première méthode, obtenez directement via la classe ServletActionContext :
public String rsa() lève une exception{
Requête HttpServletRequest = ServletActionContext.getRequest();
ServletContext servletContext = ServletActionContext.getServletContext();
requête.getSession()
Réponse HttpServletResponse = ServletActionContext.getResponse();
renvoyer « portée » ;
}
Deuxième méthode, implémentez l'interface spécifiée et injectez-la lorsque le framework Struts est en cours d'exécution :
la classe publique HelloWorldAction implémente ServletRequestAware, ServletResponseAware, ServletContextAware{
requête privée HttpServletRequest ;
privé ServletContext servletContext ;
réponse privée HttpServletResponse ;
public void setServletRequest (requête HttpServletRequest) {
this.request=req;
}
public void setServletResponse (HttpServletResponse res) {
this.response=res;
}
public void setServletContext (ServletContext ser) {
this.servletContext=ser;
}
}
3. Téléchargement de fichiers
Première étape : ajoutez commons-fileupload-1.2.1.jar et commons-io-1.3.2.jar sous WEB-INF/lib. Les deux fichiers peuvent être téléchargés depuis http://commons.apache.org/.
Étape 2 : définissez le type d'enctype de la table de formulaire sur : "multipart/form-data", comme suit :
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
<input type="file" name="uploadImage">
</form>
Étape 3 : Ajoutez les attributs suivants dans la classe Action. La partie rouge de l'attribut correspond au nom du champ du fichier dans le formulaire :
classe publique HelloWorldAction{
private File uploadImage;//Obtenir le fichier téléchargé
private String uploadImageContentType;//Obtenir le type de fichier
private String uploadImageFileName;//Obtenir le nom du fichier
//Les méthodes getter/setter des propriétés sont omises ici.
public String upload() lève une exception{
Chaîne realpath = ServletActionContext.getServletContext().getRealPath("/images");
Fichier fichier = nouveau fichier (chemin réel);
if(!file.exists()) file.mkdirs();
FileUtils.copyFile (uploadImage, nouveau fichier (fichier, uploadImageFileName));
renvoyer « succès » ;
}
}
4. Téléchargement de plusieurs fichiers
Première étape : ajoutez commons-fileupload-1.2.1.jar et commons-io-1.3.2.jar sous WEB-INF/lib. Les deux fichiers peuvent être téléchargés depuis http://commons.apache.org/.
Étape 2 : définissez le type d'enctype de la table de formulaire sur : "multipart/form-data", comme suit :
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
<input type="file" name="uploadImages">
<input type="file" name="uploadImages">
</form>
Étape 3 : Ajoutez les attributs suivants dans la classe Action. La partie rouge de l'attribut correspond au nom du champ du fichier dans le formulaire :
classe publique HelloWorldAction{
private File[] uploadImages;//Obtenir le fichier téléchargé
private String[] uploadImagesContentType;//Obtenir le type de fichier
private String[] uploadImagesFileName;//Obtenir le nom du fichier
//Les méthodes getter/setter des propriétés sont omises ici.
public String upload() lève une exception{
Chaîne realpath = ServletActionContext.getServletContext().getRealPath("/images");
Fichier fichier = nouveau fichier (chemin réel);
if(!file.exists()) file.mkdirs();
for(int i=0 ;i<uploadImages.length; i++){ File uploadImage = uploadImages[i];
FileUtils.copyFile(uploadImage, new File(file, uploadImagesFileName[i]));
}
renvoyer « succès » ;
}}
5. Intercepteur personnalisé
Pour personnaliser l'intercepteur, vous devez implémenter l'interface com.opensymphony.xwork2.interceptor.Interceptor :
classe publique PermissionInterceptor implémente Interceptor {
privé statique final long serialVersionUID = -5178310397732210602L;
public void destroy() {
}
public void init() {
}
l'interception de chaîne publique (invocation ActionInvocation) lève une exception {
System.out.println("Entrez l'intercepteur");
if(l'utilisateur existe en session){
Résultat de la chaîne = invocation.invoke();
}autre{
renvoie "connexion" ;
}
//System.out.println("Valeur de retour :"+ résultat);
//retourne le résultat ;
}
}
<package name="csdn" namespace="/test" extends="struts-default">
<intercepteurs>
<nom de l'intercepteur="permission" />
<nom de la pile d'intercepteurs="permissionStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name=" autorisation " />
</pile-intercepteur>
</intercepteurs>
<action name="helloworld_*" méthode="{1}">
<result name="success">/WEB-INF/page/hello.jsp</result>
<interceptor-ref name="permissionStack"/>
</action>
</paquet>
Étant donné que les fonctions de struts2 telles que le téléchargement de fichiers, la vérification des données et l'encapsulation des paramètres de requête dans des actions sont toutes implémentées par l'intercepteur dans le defaultStack par défaut du système, l'intercepteur que nous définissons doit faire référence au defaultStack par défaut du système afin que l'application puisse utiliser struts2. fonctionnalités fournies par le framework.
Si vous souhaitez que toutes les actions du package utilisent un intercepteur personnalisé, vous pouvez définir l'intercepteur comme intercepteur par défaut via <default-interceptor-ref name="permissionStack"/>. Remarque : Un seul intercepteur par défaut peut être spécifié par package. De plus, une fois que nous spécifions explicitement un intercepteur pour une action dans le package, l'intercepteur par défaut ne fonctionnera pas.
6. Vérification des entrées
Dans struts2, nous pouvons vérifier toutes les méthodes d'action ou vérifier des méthodes d'action spécifiées.
Struts2 fournit deux méthodes d'implémentation pour la vérification des entrées :
1. Implémenté en écrivant manuellement du code.
2. Implémenté sur la base d'une configuration XML.
7. Écrivez manuellement du code pour vérifier l'entrée de toutes les méthodes dans l'action
En remplaçant la méthode validate(), la méthode validate() vérifiera toutes les méthodes de l'action qui ont la même signature que la méthode d'exécution. Lorsqu'une certaine vérification de données échoue, nous devons appeler la méthode addFieldError() pour ajouter des informations d'échec de vérification aux fieldErrors du système (afin d'utiliser la méthode addFieldError(), l'action peut hériter d'ActionSupport si les fieldErrors du système contiennent des informations d'échec). struts2 will La demande est transmise au résultat nommé input. Les informations sur les échecs peuvent être affichées via <s:fielderror/> dans la vue d'entrée.
Exemple d'utilisation de validate() :
public void valider() {
if(this.mobile==null || "".equals(this.mobile.trim())){ this.addFieldError("username", "Le numéro de téléphone portable ne peut pas être vide");
}else{ if(!Pattern.compile("^1[358]//d{9}").matcher(this.mobile.trim()).matches()){
this.addFieldError("mobile", "Le format du numéro de téléphone mobile est incorrect" }
}
}
Après l'échec de la vérification, la demande est transmise à la vue d'entrée :
<result name="input">/WEB-INF/page/addUser.jsp</result>
Utilisez <s:fielderror/> dans la page addUser.jsp pour afficher les informations sur les échecs.
Implémenté via la méthode validateXxx(), validateXxx() vérifiera uniquement la méthode nommée Xxx dans l'action. La première lettre de Xxx doit être en majuscule. Lorsqu'une certaine vérification de données échoue, nous devons appeler la méthode addFieldError() pour ajouter des informations d'échec de vérification aux fieldErrors du système (afin d'utiliser la méthode addFieldError(), l'action peut hériter d'ActionSupport si les fieldErrors du système contiennent des informations d'échec). struts2 will La demande est transmise au résultat nommé input. Les informations sur les échecs peuvent être affichées via <s:fielderror/> dans la vue d'entrée.
Exemple d'utilisation de la méthode validateXxx() :
public String add() lance une exception{ return "success";}
public void validateAdd(){
if(username==null && "".equals(username.trim())) this.addFieldError("username", "Le nom d'utilisateur ne peut pas être vide");
}
Après l'échec de la vérification, la demande est transmise à la vue d'entrée :
<result name="input">/WEB-INF/page/addUser.jsp</result>
Utilisez <s:fielderror/> dans la page addUser.jsp pour afficher les informations sur les échecs.
8. Processus de vérification des entrées
1. Le convertisseur de type effectue une conversion de type sur les paramètres de la demande et attribue la valeur convertie à l'attribut dans l'action.
2. Si une exception se produit lors de la conversion de type, le système enregistrera les informations d'exception dans ActionContext et l'intercepteur conversionError ajoutera les informations d'exception à fieldErrors. Qu'une exception se produise ou non lors de la conversion de type, l'étape 3 sera franchie.
3. Le système appelle d'abord la méthode validateXxx() dans l'action via la technologie de réflexion, où Xxx est le nom de la méthode.
4. Appelez ensuite la méthode validate() dans l'action.
5. Après les 4 étapes ci-dessus, s'il y a des informations d'erreur dans fieldErrors dans le système (c'est-à-dire que la taille de la collection stockant les informations d'erreur est supérieure à 0), le système transmettra automatiquement la demande à la vue nommée input. S'il n'y a aucune information d'erreur dans le champ Erreurs dans le système, le système exécutera la méthode de traitement dans l'action.
9. Implémenter la vérification des entrées pour toutes les méthodes d'action basées sur la méthode de configuration XML
Lorsque vous utilisez la méthode de configuration basée sur XML pour implémenter la vérification des entrées, l'action doit également hériter d'ActionSupport et fournir un fichier de vérification. Le fichier de vérification et la classe d'action sont placés dans le même package. Le format de nom de fichier est : ActionClassName-validation. xml, où ActionClassName est le nom de classe simple de l'action et -validation est une méthode d'écriture fixe. Si la classe Action est cn.csdn.UserAction, alors le nom du fichier doit être : UserAction-validation.xml. Voici un modèle pour le fichier de vérification :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validateurs PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validateurs>
<nom du champ="nom d'utilisateur">
<field-validator type="requiredstring">
<param name="trim">vrai</param>
<message>Le nom d'utilisateur ne peut pas être vide !</message>
</field-validateur>
</champ>
</validateurs>
<field> spécifie les attributs à vérifier dans l'action et <field-validator> spécifie le validateur. La chaîne requise du validateur spécifiée ci-dessus est fournie par le système. Le système fournit des validateurs qui peuvent répondre à la plupart des exigences de vérification. le validateur se trouve dans default.xml sous com.opensymphony.xwork2.validator.validators dans xwork-2.x.jar.
<message> est le message d'invite après l'échec de la vérification. Si l'internationalisation est requise, vous pouvez spécifier l'attribut de clé pour le message et la valeur de key est la clé dans le fichier de ressources.
Dans ce fichier de vérification, l'attribut de nom d'utilisateur du type chaîne dans l'action est vérifié. Il est d'abord nécessaire d'appeler la méthode trim() pour supprimer les espaces, puis de déterminer si le nom d'utilisateur est vide.
Lors de l'écriture du fichier de vérification, le message d'aide ne peut pas apparaître. Lors de l'écriture du fichier de vérification ActionClassName-validation.xml, si le message d'aide n'apparaît pas, vous pouvez résoudre le problème comme suit :
windowwos->préférences->myeclipse->fichiers et éditeurs->xml->xmlcatalog
Cliquez sur "ajouter", sélectionnez "Système de fichiers" à l'emplacement dans la fenêtre qui apparaît, puis sélectionnez xwork-validator-1.0.3.dtd dans le répertoire src/java du répertoire de décompression xwork-2.1.2, et revenez au fenêtre de configuration Ne vous précipitez pas pour fermer la fenêtre, vous devez changer le type de clé dans la fenêtre en URI. Clé modifiée en http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd