Principe
Programmation Web coté serveur
(rappel) génération de pages-web dynamiques (i.e. dont
le contenu est calculé en fonction de la requête
HTTP). Plusieurs choix de langage côté serveur.
- PHP (déploiement de site très simple,
langage merdique
particulier)
- Python, Ruby (manque de standardisation, plusieurs
framework concurrents, problèmes de performances)
- ASP .NET (microsoft)
- Java/JSP (langage raisonnable, déploiement complexe)
JSP
JSP (JavaServer Pages) est un framework permettant de
créer des pages Web dynamiques en Java. Il fait partie de la
suite Java EE (Entreprise Edition). Rappel :
- Java Card (Java pour cartes de crédit, très peu de choses,
pas de GC)
- Java ME (Micro Edition, pour les périphériques embarqués,
mobiles, etc.)
- Java SE (Standard Edition, java « normal »)
- Java EE (Entreprise Edition, SE + packages pour JSP, et autres)
Architecture
Nécessite un serveur Web particulier. Le standard est Apache Tomcat.
- Le programmeur écrit des fichiers .jsp, contenant
du HTML + du java dans des balises spéciales
- (Le programmeur déploie les fichiers sur le serveur
Tomcat)
- L'utilisateur navigue vers une page foo.jsp
- Le serveur Tomcat génère fooServlet.class
- La classe est chargée dans la JVM java et (sa métode
principale) est exécutée, produisant une page HTML
- La page HTML est envoyée au navigateur
Exemple
<%@ page contentType="text/html; charset=UTF-8" %>
test JSP
Page generated on
]]><%
java.util.Date d = new java.util.Date();
out.println(d.toString());
%>
]]>
balises spéciales JSP
JSP introduit 4 balises spéciales qui sont interprétée par le
serveur Tomcat.
- Balise de configuration
- <%@ … %> (options HTML,
import de packages, …)
- Balise de déclarations
- <%! … %> (déclarer des
attributs et des méthodes)
- Balises d'instructions
- <% … %> (permet de mettre
une suite d'instructions)
- Balises d'expressions
- <%= … %> (permet de mettre
une expression dont le résultat est converti en String)
Exemple complet
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.Date" %>
test JSP
]]>
<%!
Date maDate;
Date maMethode() {
return new Date();
}
%>]]>
<%
maDate = maMethode();
%>
Page created on <%= maDate %>
]]>
Pages JSP
Le code d'une page JSP est transformé en classe Java et
compilé par le serveur Web (tomcat). La classe générée hérite
de HttpServlet.
- On ne doit pas écrire de constructeur dans une page JSP,
ni déclarer la classe courante avec class Toto {
….
Le compilateur JSP le fait automatiquement.
- Il est inutile de mettre une méthode
public static void main (elle ne sera jamais appellée).
- Il n'est pas recommandé de déclarer des
variables static dans un bloc de déclaration
d'une page JSP. Par définition, une même page peut être
appellée par plusieurs clients (navigateurs) différents de
manière concurrent, l'accès aux ressources partagées doit
être bien contrôlé.
Le protocole HTTP
Caractéristiques du protocole HTTP
- Sans connexion permanente:
- Le client se connecte au serveur, envoie sa requête,
se déconnecte
- Le serveur se connecte au client, envoie sa réponse,
se déconnecte
- Indépendant du contenu : permet d'envoyer des documents
(hyper) texte, du son, des images, …
- Sans état: chaque paire requête/réponse est
indépendante (le serveur ne maintient pas d'information sur le
client entre les requêtes)
- Protocole en mode texte
Format des messages HTTP
Les messages ont la forme suivante
- Ligne initiale CR LF
- zéro ou plusieurs lignes d'option CR LF
- CR LF
- Corp du message (document envoyé, paramètres de la
requête, …)
- Requête la première ligne contient un nom
de méthode (GET, POST, HEAD, …), le paramètre de la
méthode et la version du protocole
- Réponse la version du protocole, le code de la
réponse (200, 404, 403, …) et un message informatif
Formulaire HTML (version simple)
L'élément <form> permet de créer des formulaires HTML. Un
formulaire est constitué d'un ensemble de widgets (zones de saisies
de textes, boutons, listes déroulantes, cases à cocher, ... ) et d'un
bouton submit. Lorsque l'utilisateur appuie sur le bouton, les
données du formulaires sont envoyées au serveur. Exemple, fichier
age.html :
]]>
Paramètres
Les paramètres envoyés au serveur Web par la méthode get, sont
accessibles en Java l'objet implicite request.
Exemple : display.jsp
Vous avez <%= request.getParameter("val_age") %> ans!