Staf 2x, fr, 18.01.01, staf-f\radeff\staf22\notesStaff.22.html
See also: notes on ex4
doc Java
Javaserver Page
Java fromthe Beginning (nuls)
JDBC Java
-> JavaExamples in a nutshell (O'Reilly)
Java Tutorial Sun
!Webmasterin a nutshell erreurs sur XML XSL (out of date)
exercice:
http://tecfa.unige.ch/tecfa/teaching/staf2x/travaux.html#section3
JDBC - Server-side
Cours
page(+programme) installé sur le server (SSI), le servlet est unpg
sur le serveur attendant les connexions
CORE - Core Enterprise / Sun < extensions standard, package javax.*(eXtensions)
= "chemin sous dos"
Apache (.jsp, .sxml, .servlet) ; -> Tomcat (slave d'Apache àTecfa)
= server web java, renvoie à Apache
LE PROBLEME VIENT TOUJOURS DU CLASSPATH, gros écueil du débutant
il faut compiler avec javax, on peut soit le faire en local, soit posersur
le serveur puis par telnet, et taper la ligne
source /local/env/java12-sql-xml-ser.csh
si on veut des détails
more /local/env/java12-sql-xml-ser.csh
un servlet = programme java, pas de différence pour l'appel avecun
CGI (par un URL), mais c'est pas 1 page, c'est un programme; autre différence,
une x lancé le servlet, il est 'vivant', il tourne tout le temps,pas
besoin de le 'réveiller' comme un CGI donc connection initialese fait
+ rapidement
2.2 voir le
lien
le servlet permet de faire une interface autre qu'http (wap etc), ms on bosse
surtout avec
HttpServletRequestpublic class HelloServlet extends HttpServlet =
on étend à la classe http
3. attention, ligne 2 (javax.servlet.*;) ne contient rien, on indique
juste
aller à
guides/java/staf2x/ex/WEB-INF/classes/ou http://tecfa.unige.ch/guides/java/staf2x/ex/WEB-INF/classes/
normalement, depuis le web, on devrait pas pouvoir aller voir pour des raisons
de sécurité
methode doGet abstraite, interface qui traite la requête type 'GET'
(qd le navigateur demande un fichier par http, il fait un 'get', l'autre
protocole = 'post' pour envoyer le formulaire en la cachant) pour la renvoyer
au servlet
protected: interdit implémentation doGet ds une sous-classe (?), on
aurait pu utiliser 'public' à la place
content type: à la différence de PHP, il faut spécifier
de quoi il s'agit (GIF, TXT ou autre)
out
l'écriture sur un flux de données = l'impression = à
différencier (vers écran? server? imprimante?)
response = notre nom de variable sur lequel on peut écrire (on pourrait
changer, mais il faut impérativement lui dire out = nomVariable.getWriter();
le reste, comme d'hab (ressemble à PHP)
on peut aussi définir une méthode qui fait de la doc
après cet exemple simple, on examine des ex. + musclés
4 (SimpleCalculServlet.java)
on implémente 1 meth doPost (pas doGet comme avant);
extraction comme JSP: variable req (on peut choisir autre chose), donne contenu
'choice' mais pas magique, il faut lui dire que c'est un String ou un nombre;
pour extraire le nombre du string, on prend la classe Integer et la méthode
parseInt (méth. statique donc pas besoin de faire une instanciation),
ici il transforme "2" en 2; si erreur le server saute (try qui permet de
capter les erreurs et de les afficher automatiquement); ici,
try {
String title = "Simple Calcul Java Servlet";
out.println ( "<html><head><title>" + title
+ "</title></head>" );
out.println ( "<body><H1>" + title + "</H1>" );
String choice = req.getParameter ( "choice" );
String choice2 = req.getParameter ( "choice2" );
out.println ("<h2>Vous avez fait les choix suivants: </h2>");
out.println ( "Choix 1: " + choice + "<BR>" );
out.println ( "Choix 2: " + choice2 + "<BR>" );
// Integer.parseInt() translates a string to an Integer
int score = Integer.parseInt(choice) + Integer.parseInt(choice2);
out.print("<h3>Votre score est de " + score + "</h3>");
if (score < 3) {
out.print ("<p>Vous êtes un débutant</p>");
} else if (score < 5) {
out.print ("<p>Vous avez un niveau moyen</p>");
} else {
out.print ("<p>Vous êtes un expert !</p>");
}
/ ///ici c'est la fin - juste après le } qui suit du 'try'
} catch // le catch est le résultat du 'try', on pourrait le développer,
il renvoie aussi les messages d'erreurs pour MySQL( Throwable t ) {
out.println ( "<P><PRE>" );
out.println (t.getMessage());
out.println ( "</PRE><P>" );
}
attention aussi, en PHP il faut faire " . ", ici on utilise le "+" qui est
plus standard d'ailleurs
ex. 4-2
on déf des var globales au niveau de la classe avant le doPost
ex. 4-3
...
ex. 4-4
comme en PHP, on fait tout en 1 fichier (all-in-one servlet)
attention. ici string html (html est une variable comme
une autre ds laquelle on écrit)
5. Server Deployment: TODO
(à - d'installer le Tomcat et Cocoon at home, dur mais apprend les
classpath)
chque étudiant a un contexte - son répertoire de boulot, dans
lequel on définit le web-inf, dks se charge de faire comprendre à
Apache de lire pour Tomcat le bon contexte, on y crée des sous-répertoires
qui sont STANDARDS javas
c'est une config minimaliste, si on bosse avec Oracle, on a besoin
d'une archive, il faut mettre le .jar dans le répértoire web-inf/lib
aller voir aussi les examples tomcat:
http://tecfa.unige.ch/guides/tomcat/examples/jsp/
Pour l'exercice:
- tecfasun5
- mkdir WEB-INF/classes dans travaux
- source /local/env/java12-ser-xml-sql.csh
- javac HelloServlet.java
- ls *.class
Tester http://tecfa.unige.ch/staf-f/radeff/servlet/HelloServlet