La mise en place du projet est résumée en vidéo : https://video.hainry.fr/w/abN3KtCrcaX1G92kemyBg6
Projet Netbeans
Créer un nouveau projet Java with Ant/Java Web > Web Application
Dans le projet Netbeans, créer un nouveau Servlet en cochant la case ☑ Add information to deployment descriptor (web.xml)
Ajouter la bibliothèque Postgresql-jdbc : Clic droit sur Libraries puis Add Library…. Sélectionner PostgreSQL JDBC Driver.
Depuis Tomcat 9, il faut utiliser les “JNDI DataSources” pour accéder à la base de données au lieu du DriverManager utilisé précédemment.
Suivons les instructions de https://tomcat.apache.org/tomcat-9.0-doc/jndi-datasource-examples-howto.html#PostgreSQL à savoir :
Dans context.xml, ajouter sous le nœud <Context> une Resource (avec les bonnes informations dans les attributs url, username et password).
Il pourra être nécessaire de transformer le nœud <Context>pour qu’il ne soit plus autofermant.
<Context path="/WebApplication">
<Resource name="jdbc/postgres" auth="Container"
type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://127.0.0.1:5432/vglobe"
username="admin" password="m2104" maxTotal="20" maxIdle="10" maxWaitMillis="-1"/>
</Context>
L’url, le username et le password sont à renseigner correctement ainsi que vu précédemment.
Dans web.xml, dans le nœud <web-apps>, ajouter un resource-ref.
<web-apps>
...
<resource-ref>
<description>postgreSQL Datasource</description>
<res-ref-name>jdbc/postgres</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-apps>
Dans les servlets, pour lire le contexte, on utilisera les bibliothèques suivantes :
import javax.naming.InitialContext;
import javax.sql.DataSource;Puis pour se connecter à la base de données,
InitialContext cxt = new InitialContext();
DataSource ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/postgres" );
Connection maConnexion = ds.getConnection();(en pensant à rattraper les exceptions)
On prépare, exécute et traite ensuite la requête comme vu précédemment mais au lieu d’afficher le json obtenu, nous allons le renvoyer via le serveur http :
String res = gson.toJson(cl);
response.setContentType("application/json;charset=UTF-8");
/* ce Content-Type permettra par exemple à firefox de représenter le json joliment */
try (PrintWriter out = response.getWriter()) {
out.println(res));
}Note : nous avons utilisé ici un “try with resources”, syntaxe qui permet de s’assurer que les ressources déclarées dans les parenthèses du try seront correctement fermées une fois utilisées1. Cela remplace ici PrintWriter out = response.getWriter(); out.println(res)); out.close(); qui ne garantit pas complètement que le out.close(); sera exécuté.
dans le cas du
con.close()dans la partie JDBC, si un problème se pose entre la création et la fermeture (ou que le close est oublié), cette fermeture peut ne pas se faire et causer des multiplications de connexions inutiles s’accumulant dans la mémoire et occupant le SGBD.↩︎