Préface
SSH n'est pas un cadre, mais une intégration de plusieurs cadres (Struts + Spring + Hibernate). Il s'agit actuellement d'un cadre d'intégration open source populaire pour les applications Web, utilisé pour créer des applications Web multi-couches flexibles et faciles à évaluer.
Le système intégrant le cadre SSH est divisé en quatre couches en termes de responsabilité: couche de présentation, couche logique métier, couche de persistance de données et couche de module de domaine (couche d'entité).
En tant qu'infrastructure globale du système, Struts est responsable de la séparation de MVC. Dans la partie modèle du cadre Struts, il contrôle les sauts commerciaux et utilise le cadre Hibernate pour soutenir la couche de persistance. D'une part, le printemps est un conteneur IOC léger, responsable de la recherche, du positionnement, de la création et de la gestion des dépendances entre les objets et les objets, et d'autre part, il peut mieux fonctionner les entretoises et l'hibernate.
Utilisez MyEclipse pour intégrer les trois principaux cadres SSH et implémenter une démo qui simule l'enregistrement des utilisateurs, correspondant à la version:
Struts Version: 2.1;
Version de printemps: 3.1;
Version Hibernate: 3.3;
1. Préparation avant l'intégration
1. Créez un projet Web comme suit:
Remarque: Le nom du package qui prend en charge l'action doit être "l'action", et la classe d'action doit se terminer par l'action, c'est-à-dire que le formulaire est comme xxxaction, comme le montre la figure ci-dessus
2. Créez une base de données et une table:
Créer une base de données sshdemo; Créer un tableau T_User (id int clé primaire, nom d'utilisateur Varchar (10), mot de passe varchar (20))
3. Importez le package C3P0JAR du pool de connexion de la base de données, cliquez pour télécharger:
C3P0-0.9.2-pré1.jar, Mysql-Connector-Java-5.1.13-Bin.jar
2. Configuration de Struts Framework:
1. Sélectionnez le projet et cliquez avec le bouton droit pour sélectionner: MyEclipse -> Facets de projet [Capacités] -> Installer Apache Struts (2.x) Faceet, comme suit:
2. Sélectionnez la version, ici j'ai choisi 2.1, cliquez sur "Finisir", comme suit:
3. Après avoir terminé les étapes ci-dessus, vous constaterez qu'il y a un fichier supplémentaire Struts.xml dans le répertoire SRC, avec le contenu suivant:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Struts public "- // APache Software Foundation // Dtd Struts Configuration 2.1 // en" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> </druts>
4. Dans le fichier web.xml dans le répertoire Web-inf, il existe une section supplémentaire de code de configuration pour les filtres à jambes de force, comme suit:
5. Reportez-vous à la figure ci-dessus, modifiez * .Action à "/ *", et le cadre de Struts est configuré à ce stade;
3. Configuration du cadre de printemps:
1. Reportez-vous à la configuration des entretoises, sélectionnez le projet, cliquez avec le bouton droit et sélectionnez: MyEclipse -> Facets du projet [Capacités] -> Installez Facet Spring, sélectionnez la version et sélectionnez 3.1 comme suit:
2. Cliquez sur "Terminer" et vous constaterez qu'il existe un fichier ApplicationContext.xml dans le répertoire SRC, un Spring-Form.tld et Spring.tld dans le répertoire Web-inff, et un morceau de code lié à la configuration de Spring est ajouté dans le fichier web.xml. La construction du cadre de ressort a été essentiellement terminée (l'introduction de l'espace de noms sera discutée plus loin), comme indiqué ci-dessous:
4. Configuration du cadre Hibernate:
1. Reportez-vous à la configuration des entretoises, sélectionnez le projet, cliquez avec le bouton droit et sélectionnez: MyEclipse -> Facets du projet [Capacités] -> Installez HiberNateFacet, sélectionnez la version et sélectionnez 3.3 ici comme suit:
2. Cliquez sur "Terminer" et vous constaterez qu'il existe un package par défaut supplémentaire dans le répertoire SRC (peut être supprimé) et un morceau de code dans le fichier web.xml (il sera reconfiguré plus tard), comme indiqué ci-dessous:
3. Importez des packages JAR qui prennent en charge l'annotation "@entity": sélectionnez le projet, cliquez avec le bouton droit pour sélectionner: MyEclipse -> Facets du projet [Capacités] -> Gérer ..., puis suivez les étapes de la figure suivante:
Après avoir terminé les étapes ci-dessus, les trois principaux cadres sont essentiellement construits, puis ils sont intégrés.
5. Intégration
1. Afin d'empêcher ApplicationContext.xml de paraître trop gonflé et facile à gérer, nous enregistrons la configuration liée à l'hibernate dans un autre fichier .xml, puis l'importons dans ApplicationContext.xml. Les étapes spécifiques:
(1) Créez un fichier nommé HiberNateContext.xml dans le répertoire SRC (même niveau qu'ApplicationContext.xml), copiez le contenu dans ApplicationContext.xml, puis apportez des modifications;
(2) Contenu dans le fichier hibernatecontext.xml:
<? xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: p = "http://www.springframework.org/schema/p" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/Beans/www.springframework.org/schemad <! - SessionFactory Configuration -> <bean id = "SessionFactory"> <! - La propriété DataSource sera configurée dans le fichier ApplicationContext.xml. Ref = "DataSource"> </ propriété> <! - Définissez les éléments de configuration liés à HiberNate -> <propriété name = "HiberNateProperties"> <! - Les accessoires sont pour injecter les propriétés du type de propriétés -> <! - La clé doit être hibernate.prefix -> <props> <prop key = "hibernate.dialect"> org.hibernate.dialect.mysqldialect </prop> <! - show_sql est le but de l'impression des instructions sql -> <prop key = "hibernate.show_sql"> true </ prop> <! - Embeltif key = "hibernate.format_sql"> true </ prop> <! - a) Create-drop: créez un tableau de données lors de l'exécution du programme et supprimez la table après l'exécution. Dans le développement réel, il est souvent utilisé pour les tests b) Créer: Recréez le tableau de données chaque fois que le programme est exécuté C) Mise à jour: Lors de l'exécution du programme, il sera jugé que s'il y en a, le tableau ne sera pas créé, sinon le tableau de données sera créé, et les champs du tableau de données seront automatiquement ajoutés en fonction de l'augmentation des attributs dans la classe Entity (Environnement de développement) D) Valate Inccomporte avec les champs du tableau, une erreur sera signalée (environnement de production) -> <prop key = "hibernate.hbm2ddl.auto"> valider </prop> </pops> </ propriété> <! - Configurer la classe d'entité d'Hibernate -> <propriété name = "packAgEstoscan"> <! - Liste le balise est utilisé dans le projet de la propriété de la chaîne [] Type. Sa valeur est généralement le nom complet du package de bean correspondant, et les classes du package Bean correspondent généralement à la table dans la base de données -> <s list> <value> com.beauxie.bean </value> </sist> </ propriété> </ank> <! </bEAN> </EANS>
(3) Supprimer la configuration de "SessionFactory" dans ApplicationContext.xm (car il a été configuré dans HiberNateContext.xml), puis importez le contenu HiberNateContext.xml modifié. Après l'importation, le contenu d'applicationcontext.xml est le suivant:
<? xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: p = "http://www.springframework.org/schema/p" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/Beans/www.springframework.org/schemad <bean id = "DataSource"> </bant> <! - Importez d'autres fichiers de configuration de ressort. S'ils sont placés dans un seul fichier, ils auront l'air gonflés -> <importation ressource = "HiberNateContext.xml" /> </ Beans>
2. En fonction de la source de données d'origine dans le fichier applicationContext.xm, modifiez sa configuration (nom de base de données, nom d'utilisateur, mot de passe, etc.) ( Remarque: La balise de valeur ne doit pas contenir d'espaces ou entrez !! ), comme indiqué ci-dessous:
<bean id = "dataSource"> <propriété name = "jdbcurl"> <! - Si vous utilisez directement l'attribut de valeur au lieu de la balise de valeur, vous devez échapper "&" et utiliser la balise de valeur. Le <span style = "Color: # ff0000;"> La balise ne doit pas contenir d'espaces ou de retour de chariot, car il convertira les espaces en "" </span>, ce qui entraînera la connexion de la base de données à moins que la source de données ne soit réécrite ->> <value> <! [cdata [jdbc: mysql: // localhost: 3306 / sshdemo? useunicode = true & caractotcoding = utf8 & useerverprepstmts = t Rue & prepstmtcachesqllimit = 256 & cacheprepstmts = true & prepstmtcachesize = 256 & rewriteBatchEdStatements = true]]> </value> </ propriété> <propriété name = "driverclass" value = "com.mysql.jdbc.driver"> </ propriété> <propriété name = "user" value = "root"> </ propriété> <propriété name = "mot de passe" value = "root"> </ propriété name = "imitpoolsize" valued = "10"> </ propriété> <propriété name = "InimalPoolSize" Value = "10"> </ propriété> </ propriété name = "initialpoolsize" name = "minpoolSize" value = "2"> </ propriété> <propriété name = "maxpoolSize" value = "10"> </ propriété> </ bean>
3. Dans ApplicationContext.xm, configurez le scanner Spring, afin d'ajouter des annotations de composants Spring à notre classe, et le bean peut être automatiquement chargé. Les étapes spécifiques sont les suivantes: (1) Introduire l'espace de noms de contexte, prendre en charge la balise de contexte, cliquez sur "Espaces de noms" en bas, puis vérifiez l'élément de contexte:
(2) Configurer le scanner à ressort:
<! - Configurez le scanner Spring et ajoutez des annotations de composants Spring à notre classe pour charger automatiquement les beans ->
<Context: Component-Scan Base-Package = "com.beauxie.action, com.beauxie.service, com.beauxie.dao">
</ Context: Component-Scan>
À ce stade, les trois principaux environnements de cadre SSH ont été construits et l'étape suivante consiste à implémenter l'enregistrement des utilisateurs en fonction du cadre SSH.
6. Cas: Imitation simple de l'enregistrement des utilisateurs
1. Code de page d'enregistrement de la réception, index.jsp:
<% @ page langage = "java" import = "java.util. *" pageencoding = "utf-8"%> <% String path = request.getContextPath (); String basepath = request.getscheme () + ": //" + request.getServerName () + ":" + request.getServerport () + path + "/"; %> <! Doctype html public "- // w3c // dtd html 4.01 transitional // en"> <html> <adread> <base href = "<% = basepath%>"> <itle> bienvenue pour registre </ title> <méta http-equiv = "pragma" contenu = "no-cache"> <méta http-equiv = "cache-control" contenu = "no-cache"> <meta http-equiv = "expires" contenu = "0"> <meta http-equiv = "keywords" contenu = "keyword1, keyword2, keyword3"> <meta http-equiv = "description" contenu = "c'est ma page"> <! type = "text / css" href = "Styles.css"> -> </ head> <body> <form action = "$ {pagecontex type = "text" name = "username"> <br> mot de passe: <input type = "mot de passe" name = "mot de passe"> <br> <input type = "soumi" value = "Enregistrement"> </ form> </ body> </html>2. Code de classe utilisateur:
package com.beauxie.bean; import javax.persistence.entity; import javax.persistence.id; import javax.persistence.Table; /** * @author Beauxie * Here the properties of the User should be the same as the fields in the t_user table, * Otherwise, you need to manually specify the fields in the corresponding table for different properties*/ @Entity//Map database table @Table(name="t_user")//Not adding this annotation, the default corresponding to the user table public class User { @Id//The primary key in the T_User Table Private int id; // user ID Private String Nom d'utilisateur; // Nom d'utilisateur Private String Mot de passe; // Mot de passe public int getID () {return id; } public void setid (int id) {this.id = id; } public String getUserName () {return username; } public void setUsername (String username) {this.userName = username; } public String getPassword () {return mot de passe; } public void setPassword (String Motword) {this.password = mot de passe; }} 3. Code de classe Userdao:
package com.beauxie.dao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.Hibernate3.HibernateTemplate; import org.springframework.sterreotype.repository; import com.beauxie.bean.user; / ** * @Author Beauxie * Dao Layer, opérez sur la base de données * / @ référentiel // Cette propriété correspond à la couche de persistance (généralement la couche Dao), ce qui signifie qu'il est remis à Spring Management, et le nom de classe correspondant sous le pack le fichier de configuration de ressort; / ** * L'enregistrement de l'utilisateur, c'est-à-dire, ajoutez un nouvel enregistrement à la table * @param utilisateur * / public void addUser (utilisateur utilisateur) {// ajoutez des données dans la base de données, et vous pouvez obtenir Template.save (utilisateur); }} 4. Code de classe UserService:
package com.beauxie.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.sterreotype.service; import com.beauxie.bean.user; import com.beauxie.dao.userdao; / ** * @Author Beauxie * Lyer de service * / @ Service // Cette propriété correspond à la couche de service généralement la couche de service), ce qui signifie qu'il est remis à Spring Management, et le nom de classe correspondant aura également un userdao de classe publique "S"; public void addUser (utilisateur utilisateur) {// appelant la méthode AddUser de dao couche userdao.adduser (utilisateur); }} 5. Code de classe Useraction:
package com.beauxie.action; Importer javax.servlet.http.httpservletRequest; import org.apache.struts2.ServletActionContext; import org.apache.struts2.convention.annotation.action; import org.apache.struts2.convention.annotation.namespace; import org.apache.struts2.convention.annotation.results; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.scope; import org.springframework.sterreotype.Controller; import com.beauxie.bean.user; import com.beauxie.service.userservice; / ** * @Author Beauxie * * / @ Controller // Utilisé pour annoter le composant de la couche de contrôle @Namespace ("/ user") // préfixe d'URL @Scope ("ProTotype") // L'action est un singleton par défaut, mais dans le développement réel, il s'agit généralement de plusieurs cas, car généralement une action "peut correspondre à plusieurs requêtes // @ parentpackage (" Struts-Dec ") La valeur par défaut est "Struts-default", donc @Results ({@Result (name = "RegistSuccess", location = "/ msg.jsp")}) public class userAction {@ Autowired // Inject Inject UserService Service; // Struts est par défaut pour intercepter ".action et sans aucun suffixe" @action (value = "regist") // access: /user/regist.action ou / user / regist public String Regist () {// get request httpservletRequest request = servletActionContext.getRequest (); // Obtenez le formulaire Soumis Data String username = request.getParameter ("username"); String mot de passe = request.getParameter ("mot de passe"); // encapsule userbean user user = new user (); user.setid (1000); user.setUsername (nom d'utilisateur); user.setpassword (mot de passe); // Appelez la méthode de la couche Service pour ajouter un enregistrement à la base de données Service.AdDuser (utilisateur); // Enregistrez les informations rapides dans le domaine de la demande et affichez la demande.SetAttribute ("MSG", "Félicitations, l'enregistrement est réussi! <br> Nom du registre:" + nom d'utilisateur); retourner "régistage"; }} 6. Interface d'invite de message: code msg.jsp, comme suit:
<% @ page langage = "java" import = "java.util. *" pageencoding = "utf-8"%> <% String path = request.getContextPath (); String basepath = request.getscheme () + ": //" + request.getServerName () + ":" + request.getServerport () + path + "/"; %> <! Doctype html public "- // w3c // dtd html 4.01 transitional // en"> <html> <a-head> <base href = "<% = basepath%>"> <itle> invite de message </ title> <meta http-equiv = "pragma" contenu = "no-cache"> <méta http-eaquiv = "cache-cache" not-cache "> <méta http-eaquiv =" Cache-cache "not-cache"> <méta http-eashiv = "Cache-Contol" no-cache "> <méta http-eashiv =" Cache-Contol "NO-CACHE"> <Meta Http-Eaquiv = "Cache-Contol" NO-CACH content = "no-cache"> <meta http-equiv = "expires" content = "0"> <meta http-equiv = "keywords" contenu = "keyword1, keyword2, keyword3"> <meta http-equiv = "description" contenu = "c'est ma page"> <! href = "Styles.css"> -> </ head> <body> $ {msg} </ body> </html>7. Ajoutez le projet au serveur, démarrez le service, ouvrez le navigateur et visitez: http: // localhost / sshdemo / user / regist
8. Entrez le nom d'utilisateur et le mot de passe, cliquez sur "Inscrivez-vous pour afficher les résultats:
9. La console sortira l'instruction SQL (la sortie a été configurée et l'instruction SQL a été embelli dans le fichier hibernatecontext.xml):
10. Afficher les résultats de la base de données:
Ce cas simple est terminé. Il n'y a aucun problème à la vérification des données soumises par le formulaire et le code brouillé. Il doit être mis à jour à l'avenir.
7. Résumé:
1. L'intégration des trois principaux cadres doit être introduite d'abord puis intégrée;
2. Assurez-vous de vous rappeler d'importer le package JAR de la base de données;
3. La classe d'action doit être placée sous le nom du package "Action", et le nom de la classe doit se terminer par l'action, comme "xxxaction";
4. Lors de la configuration de HiberNate, assurez-vous d'importer des packages JAR qui prennent en charge l'annotation "@entity";
5. Vous pouvez définir le type de demande de Struts intercepté dans le fichier Strut.xml, qui par défaut est par défaut et sans suffixes.
6. Vous pouvez définir le type de filtre du filtre des jambes de force dans le fichier web.xml. La valeur par défaut est * .Action, et elle doit être changée en / *;
7. Dans le fichier applicationContext.xm, vous devez configurer: SessionFactory, Hibernate Entity Class, HiberNateTemplate Template, Data Source DataSource et Spring Scanner (y compris HiberNateContext.xml);
8. Chaque classe doit ajouter des annotations correspondantes et les méthodes en action doivent également être ajoutées.
Téléchargez le code source de l'instance: http://xiazai.vevb.com/201610/yuanma/sshzhuce(vevb.com).rar
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.