NetBeans, Tomcat, Struts et Hibernate : Une application Web

Premier article d'une série sur NetBeans, ou comment utiliser cet IDE pour faire des applications web. Ces billets constituerons une série autant destinée à servir de manuel pour démarrer un projet qu'a moi pour prendre des notes sur la configuration de base. J'ai décidé de me servir au maximum des fonctions intégrées de base avec NetBeans 4.1, même si cela n'est pas le toujours le choix le plus judicieux afin le tester à fond !

Nous allons donc utiliser le serveur Tomcat 5.5 intégré, Struts comme framework pour nous faciliter la vie et Hibernate comme service et persistance et de requêtes en Java pour la base de données. L'utilisation de Hibernate permettra d'utiliser n'importe quelle BDD, tout en gardant le code Java identique. Pour l'exemple ici, cela dit, nous allons nous servir de MySQL.

Prêt ?

Bon, nous allons partir du principe que vous avez une installation qui fonctionne pour NetBeans et MySQL. Ces programmes sont disponibles pour beaucoup trop de plate-formes (Linux, Windows, MacOSX ...) pour détailler chaque setup, reportez vous à la documentation correspondante, mais des installeurs et des packages étant disponibles pour chaque logiciel c'est assez trivial.

Dans votre serveur de base de données (MySQL ici) créez une base « mabase » et une table « users » avec trois colonnes (id, prenom, nom) avec « id » en clef primaire et saisissez donc quelques amis dedans.

Une fois que cela est fait, démarrez NetBeans !

La première chose que nous allons faire est de récupérer/créer l'utilisateur Admin/Manager dans Tomcat 5.5 car nous allons avoir besoin d'accéder à l'interface d'administration du serveur. Dans Netbeans allez à l'onglet Runtime, puis dépliez « Servers », cliquez droit sur « Bundled Tomcat » et « Properties ». Regarder le chemin indiqué dans la variable « base directory », et ouvrez ce dossier (...netbeans\4.1\jakarta-tomcat-5.5.7_base\conf) généralement situé dans votre Home directory. Éditez le fichier Tomcat-users.xml avez votre éditeur préféré et vérifiez que vous avez bien quelque chose comme cela :

<role rolename="manager"/>
<role rolename="admin"/>
<user username="ide" password="toto" roles="manager,admin"/>

Il faut avoir les rôles « manager » et « admin », plus un utilisateur qui possède ces rôles. Cela est normalement fait par NetBeans qui crée cet utilisateur pour vous (username="ide") il suffit juste de récupérer son password.

Maintenant nous devons installer le driver Java pour votre base de données dans Tomcat, car nous allons créer un Pool de connections. Pourquoi un Pool ? Pour éviter d'ouvrir et de fermer sans arrêts les connections vers la base, pour pouvoir gérer les ressources (nombre de connections ...), parce que c'est plus pro et performant et qu'un application de production devrait toujours avoir un pool, enfin parce que Hibernate en aura besoin ! ;-)

Récupérez donc le driver de votre base et placez ce .jar dans le dossier common\lib de votre Tomcat (sous le dossier d'installation de Netbeans). Attention, j'attire votre attention sur le fait que normalement vous ne devez pas mettre vos librairies Java dans ce dossier, elles devrons se trouver dans votre projet et dans votre Webapp. Nous le faisons ici pour la base de données car Tomcat va créer le pool au moment du démarrage et il aura donc besoin de trouver le driver avant de déployer vos applications.

Pour MySQL, mettre la librairie (mysql-connector-java-3.1.8-bin.jar) dans netbeans\enterprise1\jakarta-tomcat-5.5.7\common\lib

Maintenant, cliquez droit sur « Bundled Tomcat » dans « Servers » et lancez « Start-Stop Server », dans la fenêtre qui vient de s'ouvrir cliquez « Start ». Ensuite dépliez « WebApplications » sous votre serveur Tomcat, clic droit sur « /admin » et « Open in Browser ». Là vous vous trouvez sur le login de l'interface d'administration de Tomcat, entrez le login/password vu plus tôt dans le fichier Tomcat-users.xml. Une fois connecté, cliquez sur « Datasources » puis dans le menu déroulant à droite choisissez « add new... ». Ici vous devez entrer les informations relatives à votre BDD (sauf le JNDI name qui sera le même pour tous), reportez vous aux instructions de votre driver, pour MySQL cela donne :

JNDI name : jdbc/mabase
DataSourceURL : jdbc:mysql://localhost:3306/mabase?autoReconnect=true
JDBC Driver Class : com.mysql.jdbc.Driver
User name : root
Password :
Max Active Connections : 4
Max idle connections : 2
Max wait for connection : 5000
Validation query :

Cliquez sur « save », puis en haut « commit changes », c'est bon vous pouvez quitter l'admin de Tomcat.

Nous allons maintenant créer un dossier dans lequel nous placerons tous nos projets, dans le dossier d'installation de NetBeans, créez un dossier « projects ». Retournez dans NetBeans, cliquez sur l'onglet « projects », nous allons maintenant créer notre premier projet ! Faites « file->new Project » et nommez le « test » (dans « project name »), pour « project location » choisissez le répertoire « projects » que l'on vient de créer dans le dossier d'installation de NetBeans. Cliquez sur « Finish ».

Dans votre projet « test », faites un clic droit sur le dossier « Librairies » et ajoutez la librairie « JSLT 1.1 » nous en aurons besoin pour tester notre pool et la connection à la base de données.

Maintenant dépliez votre dossier « Configuration files », faites un clic droit sur le « web.xml », puis « edit » et ajoutez juste avant la fin :

 <resource-ref>
   <description>Mon Pool de connectionl</description>
   <res-ref-name>jdbc/mabase</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
   <res-sharing-scope>Shareable</res-sharing-scope>
 </resource-ref>

Faites la même chose pour le fichier « context.xml » (edit) et faites en sorte qu'il ressemble à cela :

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/test">
  <ResourceLink name="jdbc/mabase" 
                     type="javax.sql.DataSource" 
                     global="jdbc/mabase"/>
</Context>

Ces deux modifications permettent à votre application d'utiliser le pool de connection du serveur, et d'enregistrer son nom (« jdbc/mabase ») de façon à ce qu'il soit disponible dans vos classes et Jsp.

Ouf, on arrive à la fin !! Retournez dans l'onglet « runtime » et arrêtez votre serveur Tomcat, puis redémarrez le. Si vous n'avez pas d'erreurs au redémarrage cela commence à sentir bon. Repassez dans votre projet sous l'onglet « projects » et sous le dossier « Web Pages » et ouvrez « index.jsp ». Nous allons modifier cette page pour vérifier que le pool et la connection à la base, mais c'est juste un test rapide, en temps normal vous ne voudriez pas faire cela directement dans la jsp. Modifiez « index.jsp » pour qu'elle ressemble à cela :

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" 
                 content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

        <h1>JSP Page</h1>

  
        <sql:query var="queryresults" dataSource="jdbc/mabase">
        SELECT * FROM USERS
        </sql:query>
    
        <table border=1>
            <tr>
                <th>ID</th><th>PRENOM</th><th>NOM</th>
            </tr>

            <c:forEach var="row" items="${queryresults.rows}">
   <tr>
       <td><c:out value="${row.ID}" /></td>
       <td><c:out value="${row.PRENOM}" /></td>
       <td><c:out value="${row.NOM}" /></td>
   </tr>
            
            </c:forEach>
        </table>
    
    </body>
</html>

Sauvegardez, faites « F11 » pour recompiler votre projet, puis clic droit sur votre projet « test » et faites « deploy », ensuite appelez cette url dans votre navigateur :

http://localhost:8084/test/

Et vous devriez voir apparaître un tableau avec les données de votre table « users ».

Félicitations ! Nous avons créé un pool dans Tomcat, nous l'avons rendu disponible dans notre application et nous l'avons utilisé dans notre projet. La prochaine fois nous allons intégrer Hibernate à notre projet afin de bénéficier de ses fonctionnalités sur les BDD, dont celle (et pas des moindres) qui permet de changer de base de données sans changer une ligne de code !

N'hésitez pas à commenter, corriger et poser des questions dans les commentaires de ce billet.

A suivre ...

Haut de page