Je crois que personne ne connaît pas SSH. Struts2 + printemps + hibernate, l'architecture "de base" du développement de l'entreprise, pourquoi les bases sont-elles marquées en citations? Parce que cette fondation est exactement ce que beaucoup de gens en pensent. Le plus basique est le servlet. De nombreuses institutions de formation n'enseignent pas beaucoup de bases, et elles auront directement trois cadres majeurs. SSH ou SSI, ce qui fait penser à de nombreuses personnes que le développement de Javaweb doit avoir des cadres. Sans cadre, c'est la même chose que perdre les mains. Il n'y a pas de mal dans les trois principaux cadres et ils sont pratiques. De nombreuses entreprises les utilisent et peuvent commencer directement à les développer. Mais après l'obtention du diplôme, je pensais que je n'avais pas utilisé les trois cadres majeurs pendant longtemps. Le printemps est utile, en particulier SpringMVC. Cela semble beaucoup plus excitant à utiliser que Struts2. En fait, si vous y pensez, le printemps absorbe certains des avantages des entretoises, et avec des choses reposantes, cela semble beaucoup plus agréable. Mais aujourd'hui, nous ne regarderons pas SpringMVC, et nous prendrons le temps de voir les parties élégantes de SpringMVC à l'avenir.
Arriver au point. SSH a mis à jour la version, donc je veux toujours parler de la version ici, sinon beaucoup d'amis me grondent. J'utilise 2.3.4 pour Struts2, Spring est le dernier 3.2.2 et Hibernate est 4.1.9, ce qui est assez nouveau.
Avant d'entrer dans le code, comprenons d'abord les rôles joués par les trois principaux cadres.
1) Struts: Pourquoi utilisons-nous des entretoises? Quelle est la différence entre eux et les servlets? En fait, nous pouvons toujours faire MVC sans entretoises, mais cela peut être un peu plus déprimé dans le fichier de configuration. Struts nous aide principalement à réaliser une fonction de distribution, à diviser nos demandes spécifiques en une classe spécifique et à nous aider à définir des propriétés (qui sont effectuées via ActionForm dans Struts1.x). Struts2 a fait beaucoup de progrès par rapport à Struts1. Il définit automatiquement les valeurs, ne nécessite pas de classes d'implémentation ou de succession et dispose d'une série de concepts tels que des chaînes de demande. Comme ceux-ci ne sont pas beaucoup utilisés, je ne me tromperai pas les frères, donc je ne dirai pas grand-chose.
2) Spring: Je crois que le Daimyo du printemps n'est pas Java, je ne sais pas. Beaucoup de gens auraient dû apprendre le printemps à travers son CIO au début, ou ils ne savaient rien, juste les trois principaux cadres que SSH est venu. Peu importe, de toute façon, lorsque nous utilisons les trois cadres majeurs, le printemps est en grande partie un outil pour une classe de liens. Combiné avec les deux autres principaux cadres, SSI et SSH, ils sont les mêmes. Spring ne fournit que des outils pour nous rendre plus pratique pour utiliser les trois principaux cadres. Bien sûr, un grand nombre de programmes dans la combinaison de cadre reposent également sur le CIO de Spring, et nous utiliserons bien sûr les transactions. AOP et d'autres choses plus avancées dépendent des besoins. S'il y a des exigences du journal et des exigences d'interception, il est préférable d'utiliser AOP pour y parvenir.
3) Hibernate: Hibernate est également célèbre dans le monde Java, essentiellement la norme d'Orm. Il fournit du cache, du niveau un et du niveau deux, et il y a aussi HQL. Qu'utiliser lors de la combinaison des trois principaux cadres? Bien sûr, c'est la fonction principale de la cartographie ORM, nous ne considérerons donc pas le cache pour le moment. Beaucoup de gens n'ont jamais examiné pourquoi ils avaient besoin d'ORM. En fait, cela est principalement dû au conflit entre les champs de données et la classe. Si vous utilisez JDBC pour fonctionner et définir les champs un par un, vous deviendrez probablement fou après l'avoir fait pendant longtemps, donc l'ORM apparaît pour le moment.
Les trois principaux cadres sont responsables des éléments suivants: Struts2 - responsable du transfert de demande et du traitement correspondant des formulaires, de l'organisation du printemps-classe (c'est-à-dire IOC), gère l'action à l'origine gérée par Struts2 en tant que Beans et Hibernate - Orm Mapping, mappe les classes aux tableaux.
Après avoir compris la division générale du travail, nous avons bien sûr commencé à coder. La chose la plus gênante à propos des trois principaux cadres est le package. Beaucoup de gens aiment utiliser MyEclipse principalement parce que cela peut nous aider à importer des packages des trois principaux cadres. Mais il est recommandé que les novices ne l'utilisent pas. Tout d'abord, MyEclipse a sa propre structure de projet. Lorsque vous obtenez le Guide Eclipse, vous devez configurer certaines facettes du projet, ce qui provoquera des inconvénients à d'autres; Deuxièmement, MyEclipse l'utilise rarement dans l'entreprise, il vaut donc mieux être familier avec Eclipse. Ou c'est bien si vous aimez les idées.
Les packages nécessaires pour Struts2 sont les suivants: antlr, asm, xwork, struts2-core, ognl, communage, fileupload commun, struts-spring-plagin. Il n'y en a probablement que quelques-uns, et il peut ne pas être écrit en entier. Vous pouvez ajouter les erreurs au démarrage. Il n'est pas recommandé de jeter tous les packages dès que vous commencez. Certains packages dans les trois cadres sont en conflit.
Les forfaits requis par Spring3 sont les suivants: Spring-Beans, Spring-Core, Spring-Context, Spring-Context-Support, Spring-Expression, Spring-Orm (nous utilisons trois cadres majeurs et nécessitons une prise en charge ORM), Spring-Web, Spring-TX (nous utilisons des transactions, mais non impliqués dans l'exemple).
Les packages requis par HiberNate4 sont les suivants: Hibernate télécharge tous les packages JAR dans le dossier requis dans le package.
Tout comme ces forfaits, c'est toujours la même chose. Il n'est pas recommandé de mettre tous les packages dès que vous commencez, car certains packages dans les trois cadres ont des conflits, alors ajoutez-les simplement en cas de besoin. Lorsque ClassNotFound apparaît, placez le package JAR correspondant dans le répertoire Lib.
Les préparatifs se terminent ici et nous commençons officiellement.
1) Tout d'abord, nous devons utiliser Struts2, et nous devons le faire intercepter la demande
<filter> <filter-name> struts2 </filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.strutsprepareandexeccutefilter </ filter-class> </filter> <filter-mapping> <filter-name> struts2 </filter-name> </mapping filtre>
Ce code permet à Struts d'intercepter toutes les demandes. Bien sûr, cela ne signifie pas que toutes les demandes sont interceptées par le printemps. Nous pouvons également configurer STUTS.XML pour intercepter les noms de suffixes spécifiques. D'une manière générale, c'est une action. comme suit:
<constante name = "struts.objectfactory" value = "printemps" /> <constante name = "strut.action.extension" value = "action" />
Struts.action.extension configure le nom de suffixe par défaut pour intercepter, de sorte que le nom du suffixe sera vérifié lors de l'interception, et ceux qui seront transmis par des jambes de force. Le Struts.ObjectFactory signifie que la classe de traitement de transfert de Struts est remise au ressort pour la gestion, c'est-à-dire qu'elle est gérée comme un haricot.
2) Habituellement, lorsque nous utilisons Spring directement, nous appellerons * ApplicationContext, mais nous sommes maintenant sur le Web, nous ne pouvons donc pas l'appeler manuellement. En fait, Spring fournit une méthode d'appel dans la situation Web, avec un servlet (je n'ai pas utilisé cela, je ne sais pas comment l'utiliser), un écouteur, un servlet est destiné aux serveurs d'application qui ne prennent pas en charge les filtres, mais maintenant nous utilisons essentiellement l'auditeur.
<Douger> <écouteur-classe> org.springframework.web.context.contextLoadherListener </ écouteur-classe> </diner>
Dans ce cas, la plupart des cas où le printemps doit être combiné avec d'autres cadres. Lorsque nous n'utilisons que SpringMVC, nous pouvons configurer directement le Dispatcherservlet pour remplacer le servlet de jambes de force ci-dessus. Jetons un coup d'œil aux détails lorsque vous utilisez SpringMVC plus tard.
Dans ce cas, le fichier applicationContext.xml dans le répertoire Web-Inf sera généralement chargé. Lorsque votre nom de fichier n'est pas ceci ou le chemin n'est pas là, vous pouvez configurer la propriété ConfigContextPath.
<Touxet-Param> <Am param-name> ConfigContextPath </ Param-name> <Am param-Value> web-inf / applicationContext.xml </ param-Value> </ Context-Param>
Il prend en charge l'utilisation de ClassPath: Prefix, etc., je n'en parlerai pas ici, vous pouvez lire le fichier de configuration de Spring en détail. De cette façon, nous avons en fait combiné des entretoises et du printemps, mais nous n'avons pas fait de configuration de bean et de transfert de entretoises.
3) En tant qu'ORM, Hibernate est également géré par le printemps à ce moment. Le printemps fournit une commande locale. Notez que cette classe, HiberNate3 et 4 sont différentes, le printemps en fournit deux. La configuration suivante est dans ApplicationContext.xml
<bean id = "sessionfactory"> <propriété name = "dataSource" ref = "dataSource" /> <propriété name = "mappingResources"> <s list> </ list> </ propriété> <propriété name = "HiberNateProperties"> <props> </props> </ / propriété> </ban>
En fait, la configuration est similaire à celle de Hibernate, donc je ne parlerai pas du code spécifique ici.
4) Dans le passé, lorsque le printemps 2.5.x, nous avons le plus utilisé HiberNatedaosupport, mais Spring 3.x n'a pas fourni ce support au début. Nous devons utiliser la session native pour fonctionner (simplement injecter le SessionFactory), mais il y a en fait un problème ici. Si nous ouvrons et fermons la connexion pour chaque demande, elle consommera plus de ressources, mais si nous ne fermons pas la connexion, ce ne sera pas très bon. Il existe donc une solution de compromis et un gestionnaire pour gérer la connexion. Ici, le printemps fournit une opeensessioninview. Chaque fois qu'une vue est ouverte (essentiellement chaque demande), la session sera ouverte. Nous ignorerons comment il est géré en interne pour l'instant.
<filter> <filter-name> OpenSessionInViewFilter </ Filter-Name> <Filter-Class> org.SpringFramework.Oorm.HiberNate4.Support.OpenSessionInViewFilter </ Filter-Class> </ Filter> </ Filter-Mapping> <Filter-Name> OpenSeInViewFilter </filter-name> <url-sattern> / * </ url-stern> </ filter-mapping>
Ici, nous lui demandons toujours d'intercepter toutes les demandes. Bien sûr, il peut être configuré pour intercepter uniquement les suffixes d'action, il n'est donc pas nécessaire de gaspiller des ressources.
5) Fondamentalement, notre cadre SSH est configuré, et la prochaine chose n'est qu'un problème avec le code. Vous n'avez qu'à configurer le bean dans le fichier de configuration de ressort, ou si vous aimez l'annotation, vous pouvez simplement @Component (valeur = 'Bean Name'), mais n'oubliez pas d'activer le composant-scan dans le fichier de configuration.
Le code ne sera pas écrit en détail, à peu près comme suit:
@Component (value = "userAction") public class userAction {} <package name = "user" extends = "struts-default" namespace = "/ user"> <! - User ligin -> <action name = "ligin" method = "ligin"> <result name = "error"> / pages / ligin.jsp </sult> </ action> </macks> En fait, il doit simplement modifier le pointeur dans la classe pour pointer le bean.
Je ne publierai pas le code détaillé, après tout, c'est un résumé. En général, SSH est plus bénéfique pour le code de spécification d'une équipe, car le code écrit sous les spécifications du cadre a essentiellement une forme spécifique, ce qui est mieux pour la maintenance future. Mais pour les débutants, il est recommandé de ne pas trop compter sur le cadre. Si vous devez vraiment l'utiliser, vous devez comprendre en général ce que fait ce cadre, quelles circonstances vous devez l'utiliser et quelles circonstances vous devriez ne jamais l'utiliser.