URL: https://linuxfr.org/users/epeios/journaux/du-developpement-full-stack-en-java
Title: Du développement full-stack en Java
Authors: Claude SIMON
Date: 2018年08月02日T20:59:09+02:00
License: CC By-SA
Tags:
Score: 8

# Introduction
Dans la continuité de ce [journal](https://linuxfr.org/users/epeios/journaux/le-developpement-full-stack-facilite), voici la version *Java* d'un prototype de bibliothèque facilitant le développement *full-stack* en permettant de développer l'interface web d'une application en *Java*. La version *PHP* (en attendant d'autres langages) devrait suivre sous peu.
Je ne suis pas très familier avec l'écosystème *Java*, ni avec *Java* tout court. Du coup, cette bibliothèque est disponible sous forme de fichier `.jar` à télécharger. Je suppose qu'il existe d'autres méthodes pour déployer une bibliothèque *Java*, à l'aide d'outils similaires à *npm* de *Node.js* ; toute information à ce sujet est la bienvenue. Pour la même raison, il y a certainement moyen d'améliorer et le code des exemples, et celui de l'*API* ; n'hésitez pas à m'en faire part dans les commentaires.
# *Hello, World!*
Pour faciliter la compréhension des principes de base, j'ai développé un genre de [*Hello, World*](https://fr.wikipedia.org/wiki/Hello_world), qui ressemble à ça :

Pour l'essayer :
- installez, si ce n'est déjà fait, le [*Java Development Kit*](http://www.oracle.com/technetwork/java/javase/downloads/index.html) (*JDK*),
- récupérez le fichier `Atlas.jar` (https://q37.info/download/assets/Atlas.jar),
- dans le même répertoire, créez un fichier appelé `Hello.java` avec le contenu suivant (ou récupérez ce fichier directement [ici](https://q37.info/download/assets/Hello.java)) :
```java
import info.q37.atlas.*;
class Hello extends Atlas {
public void handle( DOM dom, String action, String id )
{
String head =
"
\"Hello, World !\" example" +
"";
String html =
"
" +
"
" +
" " +
"
" +
"
";
if ( "Connect".equals( action ) ) {
dom.headUp( head );
dom.setLayout("", html);
} else if ("Typing".equals( action ) ) {
dom.setContent("name", dom.getContent(id));
} else if ( "Clear".equals( action ) ) {
if ( dom.confirm( "Are you sure ?" ) )
dom.setContents( new String[][] { { "input", ""}, { "name", ""} } );
} else {
throw new RuntimeException( "Unknown action '" + action + "' !!!");
}
}
public static void main(String[] args) throws Exception {
launch("Connect" );
for (;;)
new Hello();
}
}
```
- compilez ce fichier :`javac -cp Atlas.jar Hello.java`,
- lancez :
- sous *Windows* : `java -cp .;Atlas.jar Hello`, avec un point-virgule (`;`) comme séparateur pour le *classpath*),
- sous les autres plate-formes : `java -cp .:Atlas.jar Hello`, avec un deux-points (`:`) comme séparateur pour le *classpath*).
# *TodoMVC*
Comme exemple plus évolué, il y a l'application du projet [*TodoMVC*](https://todomvc.com), qui ressemble à ça :

Pour l'essayer, avec le *JDK* déjà installé :
- récupérez le contenu du *repository* (avec *git* d'installé : `git clone https://github.com/epeios-q37/todomvc-java`),
- placez, à l'intérieur du *repository* récupéré, le fichier `Atlas.jar` (https://q37.info/download/assets/Atlas.jar),
- compilez le fichier source (`javac -cp Atlas.jar main.java`),
- lancez, de l'intérieur du *repository* :
- sous *Windows* : `java -cp .;Atlas.jar TodoMVC` (avec un point-virgule comme séparateur pour le *classpath*),
- sous les autres plate-formes : `java -cp .:Atlas.jar TodoMVC` (avec un deux-points comme séparateur pour le *classpath*).
# Quelques liens
Une documentation de l'*API* de cette bibliothèque est disponible à l'adresse . Le reste du site n'a pas encore été mis à jour ; il le sera lorsque cette nouvelle *API* sera également disponible pour *PHP*. En particulier, contrairement à ce qui indiqué sur le site, l'utilisation de *XSL(T)* n'est plus obligatoire (mais néanmoins toujours possible) ; vous pouvez générer le code *HTML* nécessaire *a la mano*, ou avec le moteur de *template* de votre choix.
Voici les liens vers les sources des différents composants logiciels :
-
-
-
-
Les deux premiers sont installés localement, mais seul le code *Java* destiné à être exécuté par le *JRE* est utilisé (le code source *C++* contenu dans le répertoire `src` n'est, lui, pas utilisé). Les deux derniers contiennent du code natif, mais ne sont pas installés localement.