La construction d'une application web Java basée sur le framework SSM (Spring, Spring MVC, MyBatis) nécessite la configuration coordonnée de plusieurs composants. Ce guide détaillera les étapes de configuration initiale, en se concentrant sur les fichiers de configuration essentiels et les dépendances requises.
1. Dépandances nécesaires (Maven)
Pour éviter la gestion manuelle des JARs, l'utilisation de Maven est recommandée. Ajoutez les dépendances suivantes dans votre fichier pom.xml :
<!-- Spring Framework Core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.23</version>
</dependency>
<!-- MyBatis et intégration Spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
<!-- Source de données et connecteur -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<!-- API Servlet (provided par le conteneur) -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
2. Configuration du déploiement web (web.xml)
Ce fichier initialise le conetneur web et connecte les frameworks Spring et Spring MVC.
<!-- Chargeur de contexte Spring racine -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Contrôleur frontal de Spring MVC -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- Filtre pour l'encodage des caractères -->
<filter>
<filter-name>charsetFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. Configuration de Spring MVC (spring-mvc.xml)
Ce fichier gère le balayage des contrôleurs, la résolution des vues et les fonctionnalités web avancées.
<!-- Active l'annotation-driven MVC -->
<mvc:annotation-driven />
<!-- Gestion des ressources statiques -->
<mvc:default-servlet-handler />
<!-- Balayage des composants pour les contrôleurs uniquement -->
<context:component-scan base-package="com.example.app.web">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<!-- Résolveur de vues JSP -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
4. Configuration de l'application Spring (applicationContext.xml)
C'est le cœur de la configuration, gérant la source de données, l'intégration MyBatis et les transactions.
<!-- Balayage des composants (exclut les contrôleurs) -->
<context:component-scan base-package="com.example.app">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<!-- Chargement des propriétés de la base de données -->
<context:property-placeholder location="classpath:database.properties" />
<!-- Définition de la source de données C3P0 -->
<bean id="dataSourcePool" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${db.driver}" />
<property name="jdbcUrl" value="${db.url}" />
<property name="user" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
<!-- Intégration de MyBatis -->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSourcePool" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
<property name="mapperLocations" value="classpath:mappers/**/*.xml" />
</bean>
<!-- Scanner les interfaces DAO pour les mapper automatiquement -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.app.persistence" />
</bean>
<!-- Configuration du gestionnaire de transactions -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSourcePool" />
</bean>
<!-- Activation des transactions par annotation -->
<tx:annotation-driven transaction-manager="txManager" />
<!-- Configuration AOP pour les transactions (alternative) -->
<aop:config>
<aop:pointcut id="serviceOperations"
expression="execution(* com.example.app.service.*.*(..))" />
<aop:advisor advice-ref="transactionAdvice" pointcut-ref="serviceOperations" />
</aop:config>
<tx:advice id="transactionAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" />
<tx:method name="find*" read-only="true" />
<tx:method name="get*" read-only="true" />
</tx:attributes>
</tx:advice>
5. Fichiers de configuration supplémentaires
database.properties (à la racine du classpath) :
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/votre_base?useSSL=false&serverTimezone=UTC
db.username=votre_user
db.password=votre_mot_de_passe
mybatis-config.xml (configuration MyBatis de base) :
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<package name="com.example.app.model"/>
</typeAliases>
</configuration>
Après avoir créé ces fichiers de configuration, le projet de base avec le stack SSM est prêt à être déployé sur un conteneur Servlet comme Tomcat. La prochaine étape consisterait à implémenter les classes DAO, les services métier et les contrôleurs.