Cet article a partagé avec vous la méthode de personnalisation du cadre MVC Struts2 pour votre référence. Le contenu spécifique est le suivant
MVC personnalisé: (Comprenez d'abord les concepts de Model1 et Model2)
Model1 et Model2:
Model1: Il s'agit d'une technologie de développement JSSP pure qui combine le code de la logique métier et affiche le code de rendu.
Model2: Model2 est basé sur Model1, sépare le code logique métier et forme un servlet seul. Le modèle2 est également développé sur la base de MVC.
Les caractéristiques de MVC sont résumées comme suit:
(1) Acquisition de données et séparation d'affichage
(2) Le contrôleur combine différents modèles et vues ensemble
(3) l'application est divisée en trois parties, couplée de manière lâche et fonctionne ensemble, améliorant ainsi l'évolutivité et la maintenabilité de l'application
(4) Chaque couche est responsable de différentes fonctions et remplit ses propres tâches. Les composants de chaque couche ont les mêmes caractéristiques, ce qui facilite la génération de code de programme par l'ingénierie et l'outillage.
MVC pensée et ses avantages (très fort)
MVC est un modèle architectural, l'objectif est de séparer le modèle (logique métier) et la vue (couche de présentation), afin que le modèle et la vue puissent être modifiés indépendamment sans s'infiltrer. La plupart des logiciels adoptent ce modèle lors de la conception d'architectures. Il existe de nombreuses façons d'utiliser le mode MVC. Lorsqu'un système parcourant un navigateur veut développer une version mobile, il vous suffit de réaménager la vue et la logique métier de la partie modèle peut être réutilisée. De nombreux logiciels doivent lancer des versions B / S et C / S en même temps, en adoptant le mode MVC, la partie du modèle peut être réutilisée et seules les différentes vues doivent être développées. L'idée MVC divise une application en trois parties de base: M (modèle, modèle) V (vue, vue) C (contrôleur, contrôleur). Lorsque M représente la pièce qui traite la logique métier, V représente la partie qui affiche les données et obtient l'entrée de l'utilisateur, C est similaire à un intermédiaire, garantissant que M et V n'interagissent pas directement.
Les étapes de base sont les suivantes:
1. Créer un document XML Framework.xml
2. Définir l'interface d'action
3. Définissez une classe d'action demappage et traitez-la comme un nœud d'action
4. Définir la classe ActionMapping Manage pour gérer les classes d'action (nœuds d'actions)
5. Définissez la classe ActionManager en utilisant le mécanisme de réflexion pour obtenir des classes spécifiques en fonction du nom de classe du type de chaîne (écriture de balises web.xml)
6. Écrivez des servlets pour le contrôle du temps d'exécution
7. Définir la classe de connexion pour les tests
1. Créer un document XML Framework.xml
<! -? xml version = "1.0" Encoding = "UTF-8"? -> <! - Fichier de contrainte de définition -> (Remarque) <! - Élément indique l'élément -> <! - AttList indique l'attribut -> <! - CDATA indique le type de chaîne -> <! - Obligée indique cet attribut incontour Transfert -> <! - Actions d'élément (Action) -> <! - Élément Action (résultat *) -> (* signifie multiple) <! - AttList Nom de l'action CDATA #RADIRED CLASS CDATA #REQUIRED -> <! - AttList Nom du résultat CDATA #IMPLIED redirect (true | false) "FALSE" ->]> <framework> <! name = "Success"> Succès
Remarque: les spécifications d'écriture des espaces et <>.
La hiérarchie du nœud.
2. Définir l'interface d'action
Remarque: les paramètres d'excuit sont écrits, demandés et répondus.
3. Définissez une classe d'actionmapping, traitez-la comme un nœud d'action (écrivez l'étiquette du nœud d'action)
Résume les données des champs et des collections de résultats.
Remarque: ajoutez des données à l'écriture. (Collection de cartes)
4. Définir la classe ActionMapping Manage pour gérer les classes d'action (nœuds d'actions)
/ * * Il y a plus d'un nœud d'action * utilisé pour gérer la classe ActionMapping * / classe publique ActionMappingManager {// Collection de classes ActionMapping Map Private <String, ActionMapping> Maps = new HashMap <String, ActionMapping> (); public ActionMapping getActionMapping (String Name) {return maps.get (name); } // analyse tous les fichiers de configuration sous le projet SRC // Parse après instanciation publique ActionMappingManager (String [] file) {for (String filename: file) {init (nom de fichier); }} // Méthode d'initialisation d'initialisation // analyse le document XML public void init (String path) {try {inputStream is = this.getClass (). getResourCeasStream ("/" + path); // Parse XML Document Doc = new saxReader (). Read (IS); // Obtenez l'élément de nœud racine root = doc.getRootelement (); // Obtenez les actions des actions des éléments de nœud = (élément) root.elementIterator ("Actions"). Next (); // Utilisez la boucle FOR pour traverser tous les nœuds d'action sous le nœud d'action pour (iterator <element> action = action.elementIterator ("Action"); action.hasnext ();) {// Obtenez l'élément de nœud <action> ActionNext = action.next (); // Obtenez respectivement l'attribut de nom et l'attribut de classe dans le nœud d'action NOD NAME = ActionNext.AttributeValue ("Name"); String className = ActionNext.AttributeValue ("class"); // Enregistrez les deux attributs ci-dessus à la classe d'action Class REGACTMAPPing map = new ActionMapping (); mapapp.setClassName (className); mapapp.setName (nom); // Parce qu'il y a plusieurs nœuds de résultats sous un nœud d'action traversant tous les nœuds de résultat sous l'action pour (iterator <element> result = actionNext.ElementIterator ("result"); result.hasnext ();) {// obtenir l'élément de nœud de résultat resultNext = result.next (); // Extraire la valeur d'attribut de nom du nœud de résultat et la valeur dans la chaîne de nœud de résultat resultName = resultNext.attributeValue ("name"); String resultValue = resultNext.getText (); // Enregistrez-les dans l'ensemble de deux colonnes dans ActionMapping pour faciliter l'appel de la classe d'actionmapping (il y a des données dans la classe d'actionmapping!) MAPP.ADDRESULT (resultName, resultValue); System.out.println (mapp.getName ()); } // Obtenez la collection de tous les nœuds d'action maps.put (mapp.getName (), map); }} catch (exception e) {// todo: gère l'exception}}}Résumé:
Analyser le fichier de configuration framework.xml via DOM4J. Cela obtiendra le nœud racine et le nœud Actions, puis traversera les nœuds d'action sous le nœud Actions via la boucle FOR pour obtenir les valeurs d'attribut du nom et de la classe. Puisqu'il y a plusieurs nœuds de résultat sous un nœud d'action et tous les nœuds de résultat sous l'action, ils sont stockés dans l'ensemble de double colonne dans ActionMapping et obtiennent enfin l'ensemble de tous les nœuds d'action.
Remarque: L'écriture de la méthode INIT et l'écriture de l'actionmappingmanager avec des groupes de paramètres.
5. Définissez la classe ActionManager en utilisant le mécanisme de réflexion pour obtenir des classes spécifiques en fonction du nom de classe du type de chaîne.
Classe publique ActionManager {public static Action getActionClass (String className) {class Clazz = null; Action Action = null; // Obtenez le chargeur de classe du thread actuel, essayez {// s'il y a une classe dans le thread, obtenez directement le type de classe en fonction du nom de classe Clazz = Thread.currentThread (). GetContextClassLoader (). LoadClass (classname); } catch (classNotFoundException e) {// TODO Generated Catch Block E.PrintStackTrace (); } if (Clazz == null) {try {// s'il n'y a pas dans le thread, utilisez la méthode class.forname pour obtenir Clazz = class.forname (className); } catch (classNotFoundException e) {// TODO Generated Catch Block E.PrintStackTrace (); }} if (action == null) {try {// convertir le type obtenu en action et appeler le constructeur sans paramètre, ce qui est équivalent à nouveau dans une certaine mesure, mais de nouveaux besoins pour spécifier le type Action = (Action) Clazz.NewInstance (); } Catch (InstantiationException E) {// TODO Block de capture généré par Auto E.PrintStackTrace (); } Catch (illégalaccessException e) {// Bloc de capture généré par Auto-généré e.PrintStackTrace (); }} retour d'action; }}Configuration du nœud pour web.xml:
6. Écrivez des servlets pour contrôler l'exécution (servlets, initialiser toutes les classes)
La classe publique MyServlet étend httpServlet {/ ** * Vous êtes si coquine * / public void doGet (httpservletRequest request, httpservletResponse réponse) lève ServletException, ioException {doPost (request, réponse); } <br> / ** * Continuez à travailler dur * / ActionMappingManager Man = NULL; public void doPost (requête HttpServLetRequest, réponse httpservletResponse) lève ServletException, ioException {// Obtenir l'action d'action ActionMapage d'action ActionMapping = man.getActionMapping (getPath (request)); // Obtenez le mécanisme de réflexion de l'interface d'action Action Action = ActionManager.getActionManager (actionmapping.getClassName ()); try {String Message = Action.Execute (request, réponse); String Results = ActionMapping.getResults (Message); réponse.SendRedirect (résultats); } catch (exception e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); }} / * * Obtenez le nom de chemin de la demande * / public String getPath (httpServLetRequest request) {// Project + Request Address String requestUri = request.getRequesturi (); // Nom du projet String contextPath = request.getContextPath (); // Demande spécifique Path String = requestUri.substring (contextPath.length ()); String filename = path.substring (1, path.lastIndexof (".")); Nom de fichier de retour; } / * * Réécriture de l'initiation, le programme exécute et charge toutes les classes * * / @Override public void init (ServletConfig config) lève ServletException {// Config Object est un objet de javax.servlet.servletConfig. La fonction consiste à obtenir les informations de configuration d'initialisation //config.getInitParameter est le contenu du paramètre d'initialisation de la chaîne de nom spécifiée filename = config.getInitParameter ("config"); String [] fileNames = null; if (filename == null) {// Si il est vide, fileNames = new String [] {"framework.xml"}; } else {// S'il existe d'autres informations de paramètre de configuration, alors il est stocké dans le tableau en séparant les nom de fichiers = filename.split (","); } // Utilisez la méthode init pour l'initialisation man = new ActionMappingManager (fichiers de fichiers); }}Remarque: le niveau et les commentaires du code.
7. Définir la classe de connexion pour les tests
classe publique LoginAction implémente Action {@Override public String EXECUTE (HttpServLetRequest Request, HttpServletResponse Response) lève l'exception {String name = request.getParameter ("name"); String pwd = request.getParameter ("pwd"); if (name.equals ("1") && pwd.equals ("1")) {return succès; } else {return ligin; }}}Code jsp:
Réalisez l'effet:
Peu importe la durée de la route, vous pouvez marcher étape par étape, et quelle que soit la courte durée de la route, vous ne pouvez pas l'atteindre sans faire un pas.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.