Accès manager-gui via Tomcat 8.5 dans Docker

Suite à l’installation de Tomcat 8.5 dans docker, je n’ai pas trouvé simplement comment accéder à l’interface de déploiement web dans Tomcat.

Il faut donc modifier les fichiers suivants:

/usr/local/tomcat/conf/tomcat-users.xml:

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="password" roles="manager-gui,manager-script" />

Puis aller dans les réglages de l’application manager dans /usr/local/tomcat/webapps/manager/META-INF/context.xml et modifier le tag suivant :

 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

Par ceci:

 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="\d+\.\d+\.\d+.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

Merci à cet article :

https://stackoverflow.com/questions/42692206/docker-tomcat-users-configuration-not-working

Pour Tomcat 9

le déploiement en Tomcat 9 peut se faire simplement en ligne de commande

docker run -d -p 8888:8080 --name tomcat9 tomcat:9.0.56-jdk17-temurin
docker cp DevWeb2021.war  tomcat9:/usr/local/tomcat/webapps/
Publié dans Développement | Laisser un commentaire

gvim et vimrc

Habituellement je n’utilise que la ligne suivante dans mon fichier vimrc qui gère la configuration par défaut de mon gvim/vim :

colorscheme slate

Juste le changement du thème et donc des couleurs par défaut de Gvim en choisissant un thème prédéfini.

J’avais besoin de disposer d’un Gvim ouvert au centre de mon écran de taille plutôt réduite déjà en mode édition avec un fichier vide par défaut. Du coup, j’ai installé le plugin wimproved.vim. Ce plugin a installer simplement, le fichier wimproved32.dll dans le dossier principal de vim, dans le dossier autoload le fichier autoload/wimproved.vim et dans le dossier plugin le fichier plugin/wimproved.vim.

Ensuite il faut configurer le fichier vimrc :

" Simplifier l'interface de gvim en retirant le menu et les icones
autocmd GUIEnter * silent! WToggleClean
" Centrer gvim avec une taille de 30% de l'écran
autocmd GUIEnter * silent! WCenter 30
" Degré de transparence de l'interface sur 255 niveau
autocmd GUIEnter * silent! WSetAlpha 220
" Couleur du thème
colorscheme slate

" test si c'est l'édition d'un nouveau fichier ou d'un fichier existant
" ces réglages ne sont appliqués qu'au nouveau fichier pas aux fichiers en éditon 
if argc()==0

  " cache les symboles ~ qui indiquent des lignes non existente
  hi NonText guifg=bg
  " fait une insertion vide par défaut pour retirer le message d'introduction 
  normal i 
  " mode insertion au lieu d'être mode commande comme habituellement
  start
endif


 

Vi / VIM / Gvim sont des outils très pratiques car disponiblent sur toutes les plateformes et les systèmes d’exploitations. Ils gèrent un nombre important type de format et ouvrent même des fichiers de tailles énormes sans sourciller. Je sais que l’apprentissage sur cet outil est compliqué (mode commande <-> mode édition) mais les manipulations de types expressions régulières et les plugins additionnels en font un outil extraordinaire.

Efface les lignes avec le mot profile quelque part:

:g/profile/d

Efface les lignes ne contenant par le mot profile quelque part:

:g!/profile/d

 

Scripts avec gVIM

Maintenant supposons que l’on souhaite appeler une commande classique qui efface les lignes vides d’un fichier.

On peut créer le fichier pje.vim par exemple dans le dossier de l’utilisateur (dans mon cas c:/Users/pierre.jean/pje.vim). Dans ce fichier, on indique cette ligne :

g/^$/d

Il suffit ensuite de l’appeler avec la commande source

:source ~/pje.vim

Ou avec le chemin complet

:source c:/Users/pierre.jean/pje.vim

Mais comment faire de cette ligne une fonction et l’appeler plusieurs fois surtout dans la nouvelle version Gvim 9. En premier lieu nous créons une nouvelle fonction avec le mot clef def dans le script pje.vim

vim9script 
# RemoveEnmptyLine
def RemoveEmptyLine()
   g/^$/d
enddef

La fonction RemoveEmptyLine est créée mais non appelée. Alors on pourrait ajouté un appel avec call RemoveEmptyLine au dessous mais nous voulons une commande et un raccourci pour l’appel de notre fonction ajoutons donc:

vim9script 
# RemoveEnmptyLine
def RemoveEmptyLine()
   g/^$/d
enddef


command! Rel :call RemoveEmptyLine()
nmap <silent>  <C-D>  :Rel<CR>

La commande Rel peut appeler la méthode RemoveEmptyLine et la dernière ligne lie la combinaison de CTRL+D avec la commande Rel.

Alors, je ne suis pas un expert dans les nouveaux scripts de gvim 9, je n’ai pas compris pourquoi ma nouvelle fonction de type def n’est pas appelable en mode commande, mais cette solution me va bien, soit une commande et un raccourci.

Publié dans Développement | Laisser un commentaire

Résultat du sondage de Stackoverflow 2017 et Infographie de Chooseyourboss 2018

Le sondage 2017 du site web de support informatique stackoverflow vient de sortir. Le sondage est très/trop complet notamment sur des questions hors du domaine du développement (le développeur a t’il des enfants par exemple). Vous pouvez le trouver à cette URL.

Je sors quelques points que je trouve intéressant et donc ce n’est que mon regard personnel sur ce sondage, chacun est libre d’en sortir ses propres impressions.

Et blog de Choose Your Boss a ajouté une infographie pour 2018

 

 

Comment se définit le développeur:

Finalement on peut dire que les sondés sont globalement des développeurs qui font un peu de tout en Front/Back/Full, finalement c’est le « Desktop or entreprise applications » qui montre bien que ce type de développement est assez faible sur ce site. Peut être que les développeurs de ce genre d’applications sont expérimentés et n’ont plus besoin de poser des questions.

 

La bataille des IDEs:

Le Visual Studio payant et gratuit semble enfoncé les autres, le trio des éditeurs Sublime Text/Vim/Notepad++ semble être très utilisé au final, le reste est très classique au final.

Les langages des développeurs:

Beaucoup de développement web en Front, donc JS+HTML+CSS sontles premier. On trouve les inaltérables SQL/Shell en plus. La tendance reste Java/Python/C#/PHP/C++/C.  J’ai indiqué les langages ayant plus de 10%, vous trouverez surement votre langage dans le sondage.

 

Les Framework des développeurs:

Node.js / Angular /react indique bien que le développement des solutions javascript a le vent en poupe. Ce qui est surprenant encore c’est le .Net Core qui est très important, une information que je n’avais pas personnellement.

Base de données utilisées

 

La seconde place de SQL Server est pour moi une surprise, le reste me parait assez classique comme représentation.

Les plateformes cible des développeurs:

Attention, ce n’est pas avec quel OS ils développent, il y a une réponse spécifique sur ce point. On voit bien que le classique c’est Linux/Windows, un peu d’android, de cluster AWS, Mac OS. Rasberry Pi et WordPress sont présentés comme des cibles cela indique bien la force de leur spécificité.

 

Les regroupement  des technologies pour les développeurs:

Très utile cela indique bien les liaisons outils/technologies/plateformes pour comprendre qu’elles sont les compétences liées.

 

 

Publié dans Développement | Laisser un commentaire

Arduino M0 pro et UART additionnel

Dans le cadre d’un développement sur un Arduino M0 Pro, je me retrouve a devoir brancher en protocole UART un module bluetooth et un lecteur RFID tout les deux en UART.

Comme je débute en Arduino, je branche le module bluetooth sur RT( broche 0) /TX (broche 1) de la carte :

 

Donc se pose la question d’avoir une entrée UART sur d’autres broches. J’avoue que je traine sur google et que je trouve enfin la bonne explication pour transformer les broches  10 en TX et 11 en RX.

Vous trouverez sur ce lien toutes les explications chez Adafruit mais pour ceux qui cherchent comme moi, voici le résumé avec le code:

#include "wiring_private.h"

Uart Serial2(&sercom1, 11, 10, SERCOM_RX_PAD_0, UART_TX_PAD_2);

void SERCOM1_Handler()
{
 Serial2.IrqHandler();
}

void setup()
{
  Serial2.begin(9600);
  pinPeripheral(10, PIO_SERCOM);
  pinPeripheral(11, PIO_SERCOM);
}


void loop()
{
 if (Serial2.available()){
   byte byteRead = Serial2.read();
   Serial2.write(byteRead);
   Serial.write( byteRead ); 
 }
}

Et voila, j’avoue que cela m’a permis d’entrer dans des détails du « M0 pro » et de son contrôleur ATSAMD21  mais enfin j’ai compris comment on peut refaire un UART de plus en cas de besoin.

Voila le montage final avec UART sur PIN 0 et 1, SDA & SCL branché et enfin le nouveau UART PIN 10 et PIN 11

Publié dans Développement | Laisser un commentaire

Process Explorer de Sysinternals

Pour le développement et même pour avoir une meilleure connaissance du fonctionnement de son PC sous Windows, un outil qui doit être installé à mon avis par défaut est Process Explorer.

Continuer la lecture

Publié dans Développement | Laisser un commentaire

Premier développement Seafile

Suite à l’utilisation de Seafile alternative open-source à Dropbox, je me suis posé la question du rajout de fonctionnalité dans cette solution.

Continuer la lecture

Publié dans Développement | Laisser un commentaire

Typescript avec Vim sur Windows Seven

Le développement avec Typescript propose une solution d’intégration avec un grand nombre d’IDE (Eclipse, Atom, Visual Studio, etc.).

Pour l’administration système et pour le traitement de très gros fichiers texte, j’utilise VI ou VIM depuis très longtemps. Du coup, j’ai testé l’installation d’outil de coloration syntaxique et d’auto-complétion pour Typescript dans VIM.

Coloration syntaxique

En premier, il faut télécharger la coloration syntaxique depuis ce blog, dézipper le contenu pour copier le fichier typescript.vim dans le dossier des syntaxes de VIM soit dans mon cas : C:\Program Files (x86)\Vim\vimfiles\syntax\

Pour activer la reconnaissance de la syntaxe, il faut créer un fichier typescript.vim dans le dossier suivant: C:\Program Files (x86)\Vim\vimfiles\ftdetect\ contenant l’instruction d’association de l’extension .ts avec le type typescript:

au BufRead,BufNewFile *.ts set filetype=typescript

 Installation d’un gestion de plugins dans VIM

Je ne me doutais pas que VIM avait des installateurs de plugins; habituellement je me contentais de copier des fichiers pour activer une fonctionnalité. Au final, on trouve des évolutions dans VIM de manière tout à fait similaire à tous les autres IDEs.

Donc j’ai installé le plugin gérant les plugins vim-plug.

Il faut copier le fichier plug.vim en provenance du site GitHub  dans le dossier C:\Program Files (x86)\Vim\vim80\autoload\.

Pour activer l’installation d’un plugin il faut éditer le fichier C:\Program Files (x86)\Vim\_vimrc en ajoutant les lignes suivantes

call plug#begin('C:/Developpement/vim/plugged')

call plug#end()

Le dossier C:\Developpement\vim\plugged\ contiendra les plugins installés dans la suite.

Installation de Tsuquyomi en attente

Ce plugin permet de réaliser l’auto-complétion mais son installation suppose des pré-requis: les installations de Node.js, Typescript et Shougo/vimproc.vim.

Node.js

L’installation de node.js se fait assez simplement sous windows via le téléchargement de l’installeur windows via https://nodejs.org/en/download/.

Typescript

L’installation se fait tout aussi simplement pour Typescript via la commande suivante à exécuter dans le dossier où on veut avoir Typescript (dans mon cas dans c:\Developpement\typescript\)

npm install --prefix . -g typescript

Vimproc

L’installation de vimproc va s’appuyer sur le gestionnaire de plugin. Dans le fichier C:\Program Files (x86)\Vim\_vimrc il faut demander l’installation et la compilation de vimproc pour fabriquer la DLL vimproc.dll. L’ajout du Plugin se fait avec la ligne Plug à ajouter entre le plug#begin et le plug#end

call plug#begin('C:/Developpement/vim/plugged')

Plug 'Shougo/vimproc.vim', {'do' : 'mingw32-make'}

call plug#end()

Il faut disposer d’un compilateur gcc par exemple MinGw et indiquer dans la variable d’environnement PATH le chemin vers le dossier bin (dans mon cas C:\Developpement\MinGW\bin)

Ouvrir vim et taper la commande pour installer les plugins et la compilation via mingw32-make (qui est dans la variable d’environnement %PATH%) car c’est VIM qui va exécuter la commande de compilation.

:PlugInstall

Voici la fin de la compilation du nouveau plugin:

Installation de Tsuquyomi enfin

Il faut réouvrir le fichier C:\Program Files (x86)\Vim\_vimrc pour ajouter à la ligne d’installation de vimproc.vim une installation en plus de tsuquyomi:

call plug#begin('C:/Developpement/vim/plugged')

Plug 'Shougo/vimproc.vim', {'do' : 'mingw32-make'} | Plug 'Quramy/tsuquyomi'

call plug#end()

Un rappel de nouveau à la commande :PlugInstall pour installer le dernier plugin.

L’ajout du nouveau plugin se passe correctement mais à l’ouverture d’un fichier typescript test.ts…

Problème rencontré

La compilation a réalisé la création d’une dll vimproc_win64.dll, cette dernière est pour windows 7 x64 hors mon VIM est en version x32 d’où incompatibilité:

La compilation à la main via la commande suivante dans le dossier C:\Developpement\vim\plugged\vimproc.vim\ devrait fabriquer la dll correcte:

mingw32-make -f make_mingw32.mak

Cette commande fabrique correctement la dll dans le même dossier que la version x64:

C:\Developpement\vim\plugged\vimproc.vim\lib\winproc_win32.dll

Enfin

L’ouverture d’un fichier test.ts associé avec gvim avec la commande Control+x Control+o permet d’obtenir l’auto-complétion dans VIM selon typescript:

Il ne me reste qu’à rajouter dans le fichier C:\Program Files (x86)\Vim\_vimrc les derniers réglages pour avoir une complétion plus détaillé en ajoutant ces lignes:

let g:tsuquyomi_completion_detail = 1
autocmd FileType typescript setlocal completeopt+=menu,preview

Maintenant, je vais pouvoir commencer à utiliser angular.j version 2 qui se base sur typescript en utilisant ce bon vieux VIM qui rend encore énormément de service.

 

SourceMap

Comme on a le fichier typescript.ts qui est compilé en typescript.js, il peut être difficile dans les debuggers intégrés des navigateurs de trouver la correspondance entre le code .ts et l’exécution en javascript .js.

Bien entendu, les développeurs de typescript (et d’autres surcouche/framework javascript) on trouvé une solution qui est de réaliser une correspondance entre les 2 qui s’appelle SourceMap.

Pour utiliser la sourceMap, il faut en premier lieu l’activer dans le navigateur, par exemple. Dans Chrome, il faut ouvrir les outils de développement (CTRL+SHIFT+I) puis F1 pour avoir les préférences et on peut alors activer les sourcesMap:

Pour Firebug, l’intégration est en cours dans la version 3.0.

Pour Firefox, il semblerait que l’option est activé par défaut:

Au boulot…

 

Publié dans Blog, Développement | Laisser un commentaire

DaoManager

Download Drivers JDBC sqlite

package fr.ema.lgi2p.emacs.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import fr.ema.lgi2p.emacs.metier.Application;
import fr.ema.lgi2p.emacs.metier.Todo;

public class DaoManager {

private static DaoManager instance = null;
private Connection connection = null;

private static final Logger log = Logger.getLogger("BoostrapSample");

private DaoManager() {

try {
  Class.forName("org.sqlite.JDBC");
  connection = DriverManager.getConnection("jdbc:sqlite:c:/Developpement/todo.db");
} catch (Exception e) {
   System.err.println(e.getClass().getName() + ": " + e.getMessage());
   System.exit(0);
}
   System.out.println("Opened database successfully");
  log.info("Opened database successfully");

   createDatabase();
}

public static DaoManager getInstance() {
  if (instance == null) {
    instance = new DaoManager();
  }
  return instance;
}

private void createDatabase() {
  try {
    Statement stmt = connection.createStatement();
    String sql = "CREATE TABLE IF NOT EXISTS TODO ( ID INTEGER PRIMARY KEY AUTOINCREMENT, TEXTE TEXT NOT NULL, ACTIF BOOLEAN NOT NULL)";

    stmt.executeUpdate(sql);
    stmt.close();

   } catch (Exception e) {
       log.severe( e.getClass().getName() + ": " + e.getMessage() );
   }

    addTodo( new Todo("lait" , false ) );
    addTodo( new Todo("pain" , false ) );
}

public void addTodo(Todo todo){

  try {
    PreparedStatement preparedStatment = connection.prepareStatement("insert into TODO(TEXTE,ACTIF) values( ? , ? )" );

    preparedStatment.setString(1, todo.getTexte() );
    preparedStatment.setBoolean(2, todo.isActif() );

    preparedStatment.execute();
    preparedStatment.close();

  } catch (Exception e) {
     log.severe( e.getClass().getName() + ": " + e.getMessage() );
   }
}



public List<Todo> getAllTodo(){
   List<Todo> returnListTodo = new ArrayList<Todo>();
   try {
      Statement statement = connection.createStatement();

      if ( statement.execute( "Select TEXTE,ACTIF FROM TODO " ) ){
        ResultSet resultSet = statement.getResultSet();
        while ( resultSet.next() ) {
          String texte = resultSet.getString("TEXTE");
          boolean actif = resultSet.getBoolean("ACTIF");

          returnListTodo.add( new Todo( texte , actif ));
        }
       }
       statement.close();

    } catch (Exception e) {
        log.severe( e.getClass().getName() + ": " + e.getMessage() );
    }
     return returnListTodo 
  }

}

Publié dans IMT Mines Alès | Laisser un commentaire

Authentification One-Time Password

Le principe de l’authentification One-Time Password est d’avoir des mots de passes qui changent régulièrement pour éviter les attaques par force brute sur les sites Web.

En me basant sur le module apache mod_authn_otp, je reprend dans cet article les étapes importantes de l’installation de cet module en version simplifié (pas de code PIN).

En premier téléchargement et compilation sur Ubuntu 14.4 du module apache mod_authn_opt en version 1.1.7:

wget https://s3.amazonaws.com/archie-public/mod-authn-otp/mod_authn_otp-1.1.7.tar.gz

Note de mise à jours: test sur Ubuntu 16.04 du module apache mod_authn_opt en version 1.1.8:

wget https://s3.amazonaws.com/archie-public/mod-authn-otp/mod_authn_otp-1.1.8.tar.gz

N’oublier de dézipper ce fichier:

tar xvfz  mod_authn_otp-1.1.8.tar.gz
cd mod_authn_otp-1.1.8

 

Avec les outils de compilation installés:

sudo aptitude install apache2-devel
sudo aptitude install openssl-devel
sudo aptitude install apache2-dev
sudo aptitude install build-essential

Note de mise à jours: le package openssl-devel ne semble plus disponible mais il ne parait plus nécessaire.

 

Réaliser la compilation du module avec les commandes suivantes:

./configure
make
make install

nous obtenons un module pour apache installé mais aucunement activé:

/usr/lib/apache2/modules/mod_authn_otp.so

Réalisation l’ajout en tant que module dans apache avec la création du fichier suivant:

/etc/apache2/mods-available/authn_otp.load

Contenant la ligne suivante:

LoadModule authn_otp_module /usr/lib/apache2/modules/mod_authn_otp.so

Le module est configuré dans apache mais pas activé car pour cela nous devons faire un lien symbolique vers ce fichier depuis le dossier des modules activés

cd /etc/apache2/mods-enabled/
ln -s ../mods-available/authn_otp.load .

 

Le lien est réalisé pour symbolisé que le module est à activer au prochain redémarrage d’apache que nous réalisons avec cette commande:

service apache2 restart

Nota j’ai eu une erreur à cause du nom du module. L’erreur était:

undefined symbol: mod_authn_otp

Car le fichier ( /etc/apache2/mods-available/authn_otp.load) avait comme nom de module mod_authn_otp alors qu’il faut indiquer authn_otp_module.

Je modifie la configuration d’apache pour protéger le dossier test d’un accès avec un mot de passe à utilisation unique :

<Directory /var/www/html/test/ >
 AuthType Basic
 AuthName intranet
 AuthBasicProvider OTP
 Require valid-user
 OTPAuthUsersFile "/etc/otp/otp-users.txt"
</Directory>

 

Tout ce passe ensuite sur le nouveau fichier /etc/otp/otp-users.txt.

Nota: il faut que le dossier et le fichier soit propriété de l’utilisateur www-data qui est sous Ubuntu l’utilisateur qui exécute le logiciel apache2. Création du dossier, du fichier et changement de droit avec les commandes suivantes:

mkdir /etc/otp/
touch /etc/otp/otp-users.txt
chown -R www-data.www-data /etc/otp/

Et maintenant le contenu du fichier otp-users.txt sachant que je souhaite une authentification basé sur le temps et non sur un jeton.

HOTP/T30         jean          -       01234567890101112130

J’indique je veux une authentification sur T avec une fenêtre de 30 secondes basé sur un décalage de 01234567890101112130. (Par défaut cette authentification attendra un One-Time Password de 6 chiffres).

Le tiret indique que je n’utilise pas de code PIN au moins dans un premier temps.

Je peux utiliser un exécutable pour calculer le mot de passe pour la fenêtre de 30 secondes avec la commande suivante:

 otptool -t '01234567890101112130' -i 30

J’obtient en sortie 3 chiffres: token:  password  counter

480455332: 458789 cf8081

Le mot de passe valide est 458789.

Que je peux vérifier par la commande de vérification suivante:

 otptool -t '01234567890101112130' -i 30 458789

 

Maintenant je souhaite utiliser une application Android pour générer le mot de passe depuis mon téléphone.

Avec la commande suivante je vais convertir le décalage en temps dans le bon format:

python -c "import base64,binascii; 
print base64.b32encode(binascii.unhexlify('01234567890101112130'))"

J’obtient l’encodage suivant: AERUKZ4JAEARCIJQ

J’installe l’application de Google Authenticator qui semble un peu décrier mais qui fonctionne très bien pour mon premier exemple dans cette technologie.

Je lance l’application en indiquant « Ajouter un compte » et « Saisir la clé fournie ».

Dans l’interface, le premier champ est un texte libre pour identifier le serveur.
Ensuite j’indique la clé AERUKZ4JAEARCIJQ et je laisse le dernier champ sur « Basée sur l’heure » vu qu’il s’agit de mon type d’authentification et non sur un jeton/token.

L’authentification fonctionne en générant des mots de passes toutes les minutes.

De nombreuses options sont disponibles pour améliorer ce processus d’authentification avec un nombre limite de tentative, un code PIN qui s’ajoute avant le code à utilisation unique.

Google-One-time-password

Pour éviter d’avoir à entrer le code, on peut utiliser un qrcode qui peut être par exemple généré avec inkscape (http://goinkscape.com/how-to-make-qr-codes-in-inkscape/) via le menu Extensions > Rendu > Codes-barres > QR code…

Ensuite, il suffit d’entrer dans la zone Texte le code pour généré un QR Code que l’application Google Authenticator comprend pour entrer la longue suite de code sans erreur.

Sources :

 

Publié dans Développement | Laisser un commentaire

Documents Développement Web

Document Developpement Web Developpment-Web-2019.pdf

See Step by Step from JSP to JSP bellow

See Video about debug and install bellow

French Articles Ressources :

Eclipse débogage et points d’arrêts

Java log dans Eclipse

Process Explorer de Sysinternals

Exemple d’un codage en Stream Java

Ajout de Javadoc dans un programme Java

Step by Step from JSP to JSP


Chain of operations:

URL->JSP->Formulaire->Servlet->doGet->model part ->JSP->browser

Etape 1: Ask from browser to the JSP

The browser asks an URL to Tomcat which execute a JSP

Step 2: Building a Html Form from the JSP

JSP shows the form into the browsser to send 2 parameters: action and todo_texte

Step 3: Browser shows Html Form

The user fills the Html form  into the browser.

Step 4: The user fill the form

after fill the form, the user press the « submit » button

Step 5: The Html form transform data to GET URL request

the browser sends 2 fields action and todo_texte with values to Tomcat

Step 6: Control Servlet trigger from the URL /Contoleur

@WebServlet annotation mark the servlet which receive GET request to the doGet method

Step 7: doGet method extracts action and todo_texte parameters

2 variables action et texte are created by GET parameters from form

Control layout calls to model part to add new TODO instance from parameter todo_texte. This will realy create an instance of Todo after, backup it into the database.

Step 8: Servlet ask a JSP to display the final answer

request.getRequestDispatcher( "index.jsp" ).forward(request, response );

In this example, index.jsp is the page display to the user as response to the initial request.

URL http://localhost:8080/Controleur?action=addTodo&todo_texte=pain

This page index.jsp generates HTML do display informations about Todo items list and provide a Html form to add new TODO as step 2.

The index.jsp is a view to manage two functions: offers a form to add an other Todo item and displays the list of Todo items.

Voici la vidéo explicative de l’enchainement des actions pour le débugage avec Eclipse qui reprend les étapes vues ci-dessus:


TP 0 Vidéo configuration et installation de Tomcat avec Eclipse J2EE à adapter selon votre OS et votre configuration personnelle

Publié dans IMT Mines Alès | Laisser un commentaire