Nous utilisons Tomcat comme serveur HTTP, Netbeans comme IDE, PostgreSQL comme SGBD. Ici quelques points sur l’installation de netbeans et tomcat sous debian et sous macOS. Nous verrons aussi la configuration du projet netbeans pour accéder à la base de données. Enfin, un Dockerfile pour lancer la base de données dans un conteneur.
Sous Debian GNU/Linux
Installation de netbeans
sudo apt install openjdk-17-jdk libpostgresql-jdbc-java
Téléchargement de apache-netbeans_17-1_all.deb
sur https://netbeans.apache.org/download/nb17/
sudo dpkg -i apache-netbeans_17-1_all.deb
Installation de Tomcat
Notre serveur HTTP de développement sera dans le chemin ~/Tomcat
sudo apt install tomcat9-user tomcat9-admin
tomcat9-instance-create ~/Tomcat
cp -r /usr/share/tomcat9-admin/manager ~/Tomcat/webapps
Dans netbeans, dans l’onglet Services, ligne Servers,
Add Server...
- Choisir
Apache Tomcat or TomEE
- Server Location :
/usr/share/tomcat9
, ☑ Use Private Base :~/Tomcat
. - Mettre un User Name et un Password et cocher ☑ Create user if it does not exist
Créer un nouveau projet Java with Ant/Java Web > Web Application
Sous macOS
Installation de netbeans
Télécharger un fichier pkg
depuis le site officiel de Netbeans. Puis l’exécuter et lancer netbeans.
Installation de tomcat
Télécharger un fichier zip
depuis le site officiel de Tomcat.
Décompresser ce fichier (par exemple dans ~
).
Rendre les scripts exécutables (chmod a+x bin/*.sh
dans le dossier décompressé).
Dans netbeans, dans l’onglet Services, ligne Servers,
Add Server...
- Choisir
Apache Tomcat or TomEE
- Server Location : Browse et sélectionner le dossier
apache-tomcat-9.0.90
. - Mettre un User Name et un Password (par exemple
tomcat9
tomcat9
) et cocher ☑ Create user if it does not exist
Créer un nouveau projet Java with Ant/Java Web > Web Application
Projet Netbeans
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. 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>
Dans web.xml
, dans le nœud <web-apps>
, ajouter un resource-ref
.
<web-apps>
...
<resource-ref>
<description>postgreSQL Datasource example</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)
Pour le CORS
Ainsi qu’indiqué dans https://tomcat.apache.org/tomcat-9.0-doc/config/filter.html#CORS_Filter,
dans web.xml
, sous le nœud <web-apps>
, ajouter un filter
et un filter-mapping
.
<web-apps>
...
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-apps>
Conteneurs
PostgreSQL
Dans un dossier pg
, je place le script de création de la base de données vg.sql
et le
Dockerfile
suivant :
FROM docker.io/library/postgres
ENV POSTGRES_PASSWORD blop
COPY vg.sql /docker-entrypoint-initdb.d/
CMD ["postgres", "-c", "log_statement=all", "-c", "logging_collector=on"]
Puis build et run :
sudo docker build -t pgimoca pg
sudo docker run -dt -p 5432:5432 pgimoca
Utilisateur : postgres, mot de passe : blop