Préface
Je vous ai présenté le tutoriel d'introduction sur Struts2. Je continuerai à partager les connaissances que j'ai apprises, les problèmes que j'ai rencontrés au cours du processus d'apprentissage et des solutions. Bien sûr, si les lecteurs trouvent des problèmes, ils peuvent m'informer dans les commentaires ci-dessous. Merci d'avance
Accéder aux ressources Web en action
ressources Web
La soi-disant ressource Web fait référence aux API natives telles que HttpServLetRequest, HttpServletResponse et ServletContext. En tant que contrôleur de développement d'applications B / S, il doit être en mesure d'accéder aux ressources Web, telles que les propriétés de lecture et d'écriture aux objets de domaine.
Comment accéder aux ressources Web
Méthode de découplage de Servletapi: Afin d'éviter le couplage avec ServletAPI et de faciliter les tests unitaires en action, Struts2 résume HttpServletRequest, HttpSession et ServletContext, construit 3 objets MAP pour remplacer ces 3 objets. En action, vous pouvez utiliser les objets MAP correspondants de HttpServletRequest, HttpServletSession et HttpservletContext pour enregistrer et lire les données.
public Object get(Object key) pour transmettre le paramètre de demande pour réaliser l'implémentation.setRequest() , afin que le requestmap puisse être appelé dans toutes les méthodes d'action. Utilisez ActionContext pour obtenir une démonstration de code d'un objet de domaine
Envoyez la demande de la page index.jsp à showpage.jsp et remettez la demande à la classe d'action de Struts ObjectAction.java pour gérer la demande
Dans ObjectAction.java, l'objet de domaine est récupéré par ActionContext et la valeur de la propriété y est ajoutée, et la demande est transmise à showpage.jsp
Sur la page showpage.jsp, nous pouvons obtenir les valeurs de chaque objet de domaine
index.jsp
<% @ page ContentType = "Text / Html; charSet = UTF-8" Language = "Java"%> <html> <adread> <ititle> Handle </Title> </ Head> <Body> - Passez le paramètre de nom, qui peut être obtenu à partir de l'objet de domaine params dans la classe d'action pour tester l'objet de domaine params <a href = "showpage.action? nofollow "> application </a> </ body> </html>
ObjectAction.java
package com.request.test; import com.opensymphony.xwork2.actionContext; import java.util.map; public class ObjectAction {public String print () {// obtenir l'actionContext ActionContext ActionContext = ActionContext.getContex applicationmap.put ("applicationmap", "applicationmapValue"); // Obtenez la carte correspondant à la carte de session <string, objet> sessionmap = actionContext.getSession (); // Attribuez ses sessionmap à sessionmap.put ("sessionmap", "sessionmapValue"); // Obtenez la méthode correspondant à la carte, il n'y a pas de méthode correspondable Objet> requestmap = (map <string, objet>) actionContext.get ("request"); // obtenez la carte correspondant à la demande. Il n'y a pas de méthode getRequest () correspondante, alors utilisez la méthode get ("request") map <string, object> requestmap = (map <string, object>) actionContext.get ("request"); // être requestmap Assignez requestmap.put ("requestmap", "requestmapValue"); // obtenir la carte correspondante à paramètres <string, objet> paramsmap = ActionNext Valeur du paramètre de Params String [] params = (String []) paramsmap.get ("name"); // imprime la valeur du paramètre à la console System.out.println (params [0]); retourner le "succès"; }}strut.xml (afficher uniquement le nœud de package)
<package name = "showValue" étend = "struts-default"> <action name = "showPage" metheth = "print"> <result name = "Success"> / showpage.jsp </sult> </ action> </ package>
showpage.jsp (affiche uniquement le contenu de la balise corporelle)
<% - Obtenez la valeur de l'objet de domaine d'application -%> $ {applicationsCope.ApplicationMap} <br> <% - Obtenez la valeur de l'objet de domaine de session -%> $ {Sessionscope.SessionMap} <br> <% objet -%> $ {requestscope.requestmap}Détails et attention sur (faites glisser l'image vers la nouvelle page d'onglet du navigateur pour afficher l'image plus grande)
Accéder aux ressources Web à l'aide de l'interface xxxaware
Comme l'utilisation d'actionContext, l'envoi d'une demande à ObjectAction.java sur la page index.jsp est traité par la méthode print2() .
Attribuez une valeur à l'objet de domaine dans print2() dans ObjectAction.java et obtenez la valeur du paramètre passé
Enfin, nous obtenons la valeur de l'objet de domaine dans showpage.jsp. Afin de distinguer le précédent, nous ajoutons des symboles à chaque valeur de sortie pour distinguer.
index.jsp (affiche la partie de la balise corporelle)
<a href = "showpage2.action? name = smzyy" rel = "externe nofollow"> topage2 </a>
ObjectAction.java
package com.request.test; import com.opensymphony.xwork2.actionContext; import org.apache.struts2.Interceptor.applicationAware; import org.apache.struts2.interceptor.parameteraware; import org.apache.struts2.Interceptor.requestaware; import org.apache.strutts2. java.util.map; public class ObjectAction implémente requeandAware, sessionAware, applicationAware, ParameterAware {private map <string, object> requestmap; Carte privée <chaîne, objet> sessionmap; Carte privée <chaîne, objet> applicationmap; Map privé <chaîne, chaîne []> Paramettermap; // showPage.action Exécuter la méthode requise Public String print2 () {applicationMap.put ("applicationMap", "ApplicationMapVal ==="); requestmap.put ("requestmap", "requestmapval ==="); sessionmap.put ("SessionMap", "SessionMapval ==="); String [] name = ParameTermap.get ("name"); System.out.println (nom [0] + "===="); retourner le "succès"; } @Override public void setApplication (map <string, object> map) {this.applicationmap = map; } @Override public void setParameters (map <string, string []> map) {this.parametermap = map; } @Override public void setRequest (map <string, objet> map) {this.requestmap = map; } @Override public void setSession (map <string, object> map) {this.sessionmap = map; }}strut.xml (affiche la pièce de nœud de package)
<package name = "showValue" étend = "struts-default"> <action name = "showpage2" méthode = "print2"> <result name = "Success"> / showpage.jsp </sult> </ action> </ package>
showpage.jsp (comme ci-dessus, il n'a pas changé du tout)
Suggestions de sélection
Grâce aux deux méthodes ci-dessus pour obtenir des ressources Web, nous pouvons savoir que si la première méthode a de nombreuses méthodes d'action qui nécessitent des objets de domaine d'appel, chaque méthode doit être implémentée, tandis que la deuxième méthode ne doit être mise en œuvre qu'une seule fois, donc dans le développement réel, la méthode correspondante est sélectionnée pour la mettre en œuvre en fonction de la situation.
Couplé à servletapi: plus de servletapis sont accessibles et les méthodes natives peuvent être appelées
La méthode d'implémentation ici est similaire à la méthode d'implémentation ci-dessus, donc je n'en parlerai pas.
Résumer
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.