SlideShare ist ein Scribd-Unternehmen logo
1 von 58
Downloaden Sie, um offline zu lesen
The Server
strikes
back
Servlet, jsp, web server and so on
La Servlet
The Web War
Je dois obéir à mon maître Perl
Tu souséstime le pouvoir de CGI
Ton simple language est bien
faible comparé au coté obscur de
Perl
Robuste je suis grâce à Java
Toujours en mouvement le Web
est
Du conteneur émane l'énergie de
la Servlet
La Servlet
Généralitée
La Servlet est une classe Java permettant de créer dynamiquement des
données au sein d'un serveur HTTP.
Une instance unique de la Servlet s'execute à chaque requête HTTP reçu par
le conténeur (Serveur Web).
Elle produit du code (HTML, XML, JS...) compréhensible par un navigateur
Web.
● Crée en 1997 (v1.0) par Sun Microsystems
● la servlet est un singleton
● interface définie dans le package javax.servlet
● normée par une JSR (Java Specification Requests)
● support natif dans un conténeur web java (Tomcat, Jetty, etc...)
La Servlet
Historique
Servlet 3.0 12/2009 JavaEE/SE 6 Async Servlet, File
Uploading
Tomcat 7.x, Jetty 8.x
Servlet 2.5 09/2005 JavaEE/SE 5 Ajout des annotations Tomcat 6.x, Jetty 6.x-7.x
Servlet 2.4 11/2003 J2EE 1.4, J2SE 1.3 XML Schema pour le web.
xml
Tomcat 5.x, Jetty 5.x
Servlet 2.3 08/2001 J2EE 1.3, J2SE 1.2 Gestion des filtres Tomcat 4.x, Jetty 4.x
Servlet 2.2 08/1999 J2EE 1.2, J2SE 1.2 Intégration dans J2EE Tomcat 3.x, Jetty 3.x
Servlet 2.1 11/1998 Spécification officielle Jetty 2.x
Servlet 2.0 JDK 1.1
Servlet 1.0 06/1997
Web Browser
Java Web Containeur
La Servlet
Designed to eat HTTP requests
GET http://localhost:8080/myservlet HTTP/1.0
Decode et affiche la résponse
HTML
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html
Content-Length: 122
Date: Fri, 02 Nov 2012 14:40:51 GMT
<html>
<head>
<title>Hello Enib!</title>
</head>
<body>
<h1>Welcome in the Java server side!</h1>
</body>
</html>
CAI Webappp (war)
MyServlet.class
Produit du code HTML
La Servlet
Controlled by the container
Copyright : http://marakana.com/s/post/106/tomcat_architecture_diagram
La Servlet
Life cycle
Web Container Servlet Class Servlet Object
BeerServlet.class
Class Loading
Instantiation (Default contructor)
Servlet ready
to work
init()
service()
Servlet clean
up
Servlet
working
destoy()
Handle client HttpRequest
doGet() doPost()
each request in a separate Thread
Call once by the container
Call once by the container
The servlet should only have the
default contsructor
Copyright : http://www.lifecyclesfilm.com/
La Servlet
Simple ? ... or not ?
public class HtmlServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public HtmlServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html") ;
PrintWriter out = response.getWriter() ;
out.println("<html>") ;
out.println("<head>") ;
out.println("<title>Hello Enib!</title>") ;
out.println("</head>") ;
out.println("<body>") ;
out.println("<h1>Welcome in the Java server side!</h1>") ;
out.println("</body>") ;
out.println("</html>") ;
}
}
Really so simple ?
Copyright : http://www.lifecyclesfilm.com/
POST : Permet de réaliser une
transaction afin de mettre à jour
le modèle.
Les données sont transmises via
l'entête de la page Web.
Attention que se passe-t-il si
la page est rejouée ?
La Servlet
Get or Post Madness
GET
...
POST
...
Servlet
Servlet
Model
<html>
...
<html>
...
GET permet de récupérer un
document, ne doit RIEN changer
sur le serveur.
Peut être rejoué (F5) sans effets
de bords
Copyright : http://www.lifecyclesfilm.com/
La Servlet
La guerre des clones
Je vais cloner mes Servlets !
Une pour chaque page !
La Servlet
Au modèle MVC vous fier, il faut !
Le contrôleur n'effectue aucun traitement, ne modifie aucune donnée.
Il analyse la requête du client et se contente d'appeler le modèle adéquat et de renvoyer la vue
correspondant à la demande.
Controller
(Servlet)
Modèle
(Java)
Vue
(JSP)
Ce avec quoi l'utilisateur interagit.
- présente les résultats renvoyés
par le modèle.
- reçoit toute action de l'utilisateur
(clic de souris, etc...)
- envoie les évènements au
contrôleur (HTTP Request)
La vue n'effectue pas de
traitement, elle se contente
d'afficher les résultats des
traitements effectués par le
modèle et d'interagir avec
l'utilisateur.
Le modèle représente le cœur
(algorithmique) de l'application :
traitements des données.
- décrit les données manipulées par
l'application.
- responsable de l'intégrité des données
métier.
Les résultats renvoyés par le modèle ne
s'occupent pas de présentation.
Le modèle ne contient aucun lien direct
vers le contrôleur ou la vue.
BDD
La Servlet
Requête HTTP et modèle MVC
1. Requête du navigateur
2. Mapping url / servlet
3. Appel du modèle métier
4. La servlet ajoute la réponse
du modèle à la requête
5. Forward vers la JSP
6. La JSP récupére la réponse
7. Génération de la page HTML
8. Le conteneur envoie la page
au navigateur
Container
logic
Servlet
Modèle
(Java)
Vue
(JSP)
2
1
3
8
7
5
4
6
request
La Servlet
My best work
1. Requête du navigateur
2. Mapping url / servlet
3. Appel du modèle métier
4. La servlet ajoute la réponse
du modèle à la requête
5. Forward vers la JSP
6. La JSP récupére la réponse
7. Génération de la page HTML
8. Le conteneur envoie la page
au navigateur
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Call the business
List<Beer> beers = beerBusiness.getBeers();
// Adds the model response to the request
request.setAttribute("beers", beers);
// Forward to the JSP
RequestDispatcher dispatch = request.getRequestDispatcher
("/WEB-INF/views/beer.jsp");
dispatch.forward(request, response);
}
beers.jsp
Head / Body....
<table class="table table-condensed">
<thead>
<tr>
<th>Name</th>
<th>Brewery</th>
<th>Country</th>
<th>Alcohol</th>
</tr>
</thead>
<tbody>
<c:forEach items="${beers}" var="beer">
<tr>
<td>${beer.name}</td>
<td>${beer.brewery}</td>
<td>${beer.country}</td>
<td>${beer.alcohol}</td>
</tr>
</c:forEach>
</tbody>
</table>
...
La Servlet
Liens Servlet / JSP
1. Requête du navigateur
2. Mapping url / servlet
3. Appel du modèle métier
4. La servlet ajoute la réponse
du modèle à la requête
5. Forward vers la JSP
6. La JSP récupére la réponse
7. Génération de la page HTML
8. Le conteneur envoie la page
au navigateur
La Servlet
Gestion de la session
Une session web est une période délimitée pendant laquelle un serveur est en
communication et réalise des opérations au service d'un client HTTP.
Session implicite : Lié à un browser
Session explicite : Liée a des credentials (login / password)
Création d'une session :
HttpSession session = request.getSession(true);
La Servlet
HttpSession
Principales methodes
Configuration de la durée de session
void setAttribute(String name, Object Value)
Object getAttribute(String name) Ajoute ou récupère la valeur d'un attribut en session
Enumeration getAttributeNames() Retourne la liste de tous les attriuts
String getId() Retourne l'identificant de sessions
void invalidate() Invalide la session courante
Dans le web.xml -global à toutes les sessions- :
<session-config>
<session-timeout>30</session-timeout>
</session-config>
A la création de la session -local pour chaque session- :
session.setMaxInactiveInterval(30);
La Servlet
Listener de Session
Interfacesà implémenter
HttpSessionListerner HttpSessionAttributeListerner
Déclaration dans le web.xml
Notification new session created
void sessionCreated( HttpSessionEvent hse )
Notification session invalidated
void sessionDestroyed( HttpSessionEvent hse )
Notification new attribute added :
void attributeAdded( HttpSessionBindingEvent hsbe )
Notification attribute removed :
void attributeRemoves( HttpSessionBindingEvent hsbe )
Notification attribute replaced:
void attributeRemoves( HttpSessionBindingEvent hsbe )
<listener>
<description>HttpSessionListener, HttpSessionAttributesListener</description>
<listener-class>fr.enib.cai.servlet.SessionListener</listener-class>
</listener>
JSP
Introduction
JSP = JavaServer Pages
Technologie Java crée par Sun
Permettent la génération de pages web dynamiques.
Mélange de Java côté serveur et d'HTML côté client.
Adore se transformer !
Adepte du ménage à 3 (la JSP n'existe pas sans container ni Servlet)
JSP
Transformation
<html>
<body>
<%= new
String
("Hello!") %
>
</body>
</html>
package ...
import
javax.
servlet...
byte code
0010 0010
1001 0001
0001 1100
0101 1010
Servlet
Hello.jsp Hello_jsp.java Hello_jsp.class Hello_jsp servlet
translated compiled loaded
JSP
Scriptlet
UglyScriptlet.jsp
<html>
<body>
Pourquoi suis-je si moche ?<br>
<%
out.println(plain.old.java.Reason.getText() );
%>
</body>
</html>
Reason.java
package plain.old.java;
pubic class Reason {
public static synchronized String getText() {
return new String("Parce que tu as un problème de circulation sanguine.");
}
}
JSP
Les directives
UglyScriptlet.jsp
<%@ page import="plain.old.java.*" %>
<html>
<body>
Pourquoi suis-je toujours aussi moche ?<br>
<% out.println(Reason.getText() ); %>
</body>
</html>
<%@ page
[language="java"] [extends="package.class"]
[import="{package.class|package.*}, ..."] [session="true|false"]
[buffer="none|8kb|sizekb"] [autoflush="true|false"]
[isThreadSafe="true|false"] [info="text"]
[errorPage="relativeURL"]
[contentType="mimeType [charset=characterSet]" | "text/html;charset=ISO-8859-17"]
[iserrorPage="true|false"]
%>
<%@ include file="relativeURL" %>
<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
JSP
Les expressions
UglyScriptlet.jsp
<%@ page import="plain.old.java.*" %>
<html>
<body>
Pourquoi suis-je toujours aussi moche ?<br>
<%= (Reason.getText() ); %>
</body>
</html>
Les expressions JSP permettent d'insérer simplement des chaînes de caractères générées
dynamiquement dans la page HTML.
JSP
Les objets implicites
Java API jsp Object
JspWriter out
HttpServletRequest request
HttpServletResponse response
HttpSession session
ServletContext application
Throwable exception
PageContext pageContext
Object page
Les expressions JSP permettent d'insérer simplement des chaînes de caractères générées
dynamiquement dans la page HTML.
JSP
Les scopes
Page scope
- portée : une JSP
Request scope
- portée : une http request
Session scope
- portée : la session d'un utlisateur du site
- n'est pas thread safe (plusieurs onglet d'un browser peuvent partager la
même session)
Application/Context scope
- portée : globale (Servlet, Jsp, listener)
- n'est pas thread safe
JSP
Expression Language (EL)
Inclus à partir de JSP 2.0
Un seul but : Code less
Too long expression
<%= ((fr.enib.cai.core.Beer) request.getAttribute("beers").get(0).getName() %>
Much better no ?
${beers[0].name}
Attention EL implicit objects sont des Maps - pair(name / value)
pageScope - requestScope - sessionScope - applicationScope
param - paramValues
header - headerValue
cookie
initParam
Il faut toujours un exception : pageContext
Oracle tutorial : http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html
JSP
Expression Language (EL) - Implicit objects
Autre exemple :
Method is : <%= request.getMethod() %>
Avec les EL essayez :
Method is : ${request.method}
Method is : ${requestScope.method}
Method is : ${pageContext.request.method}
Oracle tutorial : http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html
Ouch
● JSTL = JSP Standard Tag Library
● 4 Bibliothèques de tags utilisables dans les JSP
● Objectif : faciliter le développement des JSP
● Anéantir les scriptlets
● Depuis servlet API 2.3
JSTL
Relookez vos JSP
Avec le Jstl on peut faire :
des valeurs par défaut
<c:out value='${user}' default='invité' />
des boucles
<c:forEach var="beer" items="${beers}" >
Beer name : ${beer.name}
</c:forEach>
Ne jamais laisser trainer les cadavres !
<c:remove var="kenny" scope="request" />
Le scope est optionnel
JSTL
Les gammes - core library
des if... sans else
<c:if test="${beer.name eq 'Karmeliet'}">
Yes ${beer.name} have an incredible flavour !
</c:if>
mais avec des choose on peut faire de choses !
<c:choose>
<c:when test="${beer.name eq 'Karmeliet'}">
Yes ${beer.name} have an incredible flavour !
</c:when>
<c:when test="${beer.name eq 'Rochefor 8'}">
${beer.name} is another best choice !
</c:when>
<c:otherwise>
Dammed give me a Kro !
</c:otherwise>
</c:choose>
JSTL
Les gammes - core library
un set vraiment open !
des variables
<c:set var="username" scope="" value="moi" />Pour les variables c'est basic
même des Maps
<c:set target="${PrettyMap}" property="prettyKey" value="prettyValue" />
JSTL
Les gammes - core library
Focus sur les includes!
<%@ include file="header.html" %> Static include content added at translation time
<jsp:include page="header.jsp" /> Dynamique include, compiled on time executed for each request
<c:import url="http://www.beertender.com/product.html />
Dynamique (comme jsp:include)
Je peux inclure des ressources en dehors de mon container ???
Même avec des paramètres !
<c:import url="header.jsp>
<c:param name="subTitle" value="Wy I drink so many beers ?" />
</c:import>
File header.jsp
<em><strong>${param.subTitle}</strong></em>
JSTL
Les gammes - core library
Créer des liens dans vos pages !
<c:url value='/signin.jsp' />
Avec des paramètres
<c:url value='/signin.jsp' >
<c:param name="promocode" value="${enib}" />
</c:url>
Dans la page HTTP vous aurez un lien du genre :
-> http://myServer.enib.fr:8080/mycontext/signin.jsp?promocode=enib
JSTL
Les gammes - core library
catcher les exceptions (NOTE : Ne pas coder avec des moufles) !
<c:catch var="myException">
<!-- doing here a very dangerous operation -->
</c:catch>
<c:if test="${myEception != null}">
Dammed, what is going wrong ? ${myException.message}
</c:if>
JSTL
Les gammes - core library
La librairie de formatage (fmt):
http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/fmt/tld-summary.html
● internationalisarion
● formatage des chaines de caractère
La "SQL" library :
Hum, du Sql dans les JSP, je suis confus... ce n'est pas vraiment MVC
compliant... mais ça existe.
La "XML" library :
A utiliser en dernier recours, à dose homeopathique !
JSTL
L'aventure continue
Peut vous sauver la vie :
● réduire la duplication de code dans vos JSP
● intégrer la vue d'un composant complexe
● coder coté java quand le langage JSP / JSTL est aux limites
Helas trop long pour le parcourir !
JSTL
Yeah je fais ma lib de tags
Plein de noms pour la même chose
-> Conteneur de servlets (Servlet container en anglais)
-> Conteneur web (web container en anglais)
-> moteur web
-> moteur de servlets...
Bref, il exécute des servlets.
La Star : Tomcat de la fondation Apache (59% du marché).
Les poids lourds :
Jboss ou WildFly (redhat), Jetty (Codehaus), WebLogic (IBM), WebSphere
(IBM), GlassFish (Oracle), ... et une multitude d'autres
Le Conteneur
● contenir des web apps
● recevoir des requêtes HTTP et les faire traiter par la bonne web app
● faire le mapping vers les servlets
● gérer les ressources de l'application web (base de données, etc...)
● gérer la session
● faire le mapping url / servlet, filtres,valves
● gérer le realm (royaume de la sécurité, un peu obsolète)
● gérer les logs
Le Conteneur
Son rôle
Le Conteneur
Schema général
Copyright : http://marakana.com/s/post/106/tomcat_architecture_diagram
Le Conteneur
serveur.xml
Copyright : http://marakana.com/s/post/106/tomcat_architecture_diagram
● Configuration des services (généralement 1, : Catalina)
● Configuration pour chaque service
○ connecteur (port d'écoute)
○ valves (intercèpte toutes les requêtes)
○ realm (gère l'authentification)
○ host (les applications web du container)
Intercèpte TOUTES les requêtes
Définie dans le server.xml ou context.xml
Applicable pour un : engine, host ou context
exemple :
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
Ecrit un fichier de logs contenant une ligne pour chaque requête HTTP
10.144.167.233 - - [10/Oct/2012:04:31:17 +0200] "POST /servau/thrift/acces/ HTTP/1.1" 200 325
"null" "Java/THttpClient" 3
Le Conteneur
La valve
Intercèpte les requêtes en amont d'une servlet pour un url pattern donné
Définie dans le web.xml
Le filtre est une classe Java
Souvent utilisé pour traiter vérifier la session et les habilitations d'une requête.
exemple :
<filter>
<filter-name>UserContextFilter</filter-name>
<filter-class>
fr.enib.cai.filter.UserContextFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>UserContextFilter</filter-name>
<url-pattern>/prive/*</url-pattern>
</filter-mapping>
Le Conteneur
Le filtre
Execute une requête pour un mapping d'url donné
Définie dans le web.xml
La servlet est une classe Java
exemple :
<servlet>
<servlet-name>authentication_servlet</servlet-name>
<servlet-class>
fr.enib.cai.servlet.SignInServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>authentication_servlet</servlet-name>
<url-pattern>/signin</url-pattern>
</servlet-mapping>
Le Conteneur
La Servlet
WAR = un fichier jar (donc un zip...) contenant :
○ JSP
○ Servlet
○ classes Java
○ fichiers (xml, html, js, css)
○ taglibs (tld)
Cette archive est utilisée pour déployer une application web sur un serveur
d'application.
Le War
Web Application ARchive
Le War
Structure
mywebapp.war
WEB-INF
libclasses tags
fr
foo
MyTag.tag
fr.foo.Foo.class
web.xml
META-INF
MANIFEST.MF
(public)
resources
CSS
JS
PNG
(public)
content
JSP
HTML(private)
views
JSPs
PRIVATE : fichiers exposés par l'intermédiaire d'une servlet / filtre / web.
xml
PUBLIC : fichiers exposés directement par le container
Contener needs
infrastructure !
Un service web est un programme informatique permettant la communication et
l'échange de données entre applications et systèmes hétérogènes dans des
environnements distribués.
Il s'agit donc d'un ensemble de fonctionnalités exposées sur internet ou sur un
intranet, par et pour des applications ou machines, sans intervention humaine, et
de manière synchrone.
Source Wikipedia
Les web services utilisent comme medium de communication HTTP/S
Web service
anciènement : Simple Object Access Protocol : protocol RPC orienté objet bâti
sur XML
● Définit initialement par Microsoft et IBM.
● recommandé par le W3C
● utilisé dans les architecture SOA (Service Oriented Architecture)
Avantages :
● basé sur HTTP
● indépendant de la plate-forme
● "presque" indépendant du langage
Inconvénients :
● formalisme lourd (verbosité de l'xml)
● couplage fort client / serveur
● volume de données transactionnel
Web service
SOAP
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<soap:Header>
<m:User xmlns:m="http://www.exemple.com/rights/" soap:actor="http://www.exemple.com/rights/RightsManager">
Charles
</m:User>
<m:Session xmlns:m="http://www.exemple.com/session/" soap:mustUnderstand="1">12AE3C </m:Session>
<m:Lang xmlns:m="http://www.exemple.com/lang/" soap:actor="http://schemas.xmlsoap.org/soap/next" soap:mustUnderstand="0">
FR
</m:Lang>
</soap:Header>
<soap:Body>
<m:GetPrice xmlns:m="http://www.exemple.com/prices">
<m:Item>Pomme</m:Item>
</m:GetPrice>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Impossible de router le message.</faultstring>
<faultactor>http://www.exemple.com/messageDispatcher</faultactor>
<detail>
<m:error xmlns:m="http://www.exemple.com/errors">E_NO_ROUTE</m:error>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Web service
SOAP - Exemple
Web Service Description Language: grammaire XML décrivant un Service Web
● v2.0 approuvée en 2007
● recommandé par le W3C
● décrit une interface publique dans les architecture SOA
Le WSDL sert à décrire :
● le protocole de communication (SOAP RPC ou SOAP orienté message)
● le format des messages
● les méthodes que le client peut invoquer
● la localisation du service
Le wsdl est compilé (wsdl2java) pour obtenir les couches client / serveur
Des implementation sont disponibles avec les frameworks :
○ cxf
○ axis
○ un conteneur Web Profile (tomEE entre autres)
Web service
WSDL
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<!-- Définition d'un message getTermRequest contenant une chaîne de caractères term -->
<wsdl:message name="getTermRequest">
<wsdl:part name="term" type="xs:string"/>
</wsdl:message>
<!-- Définition d'un message getTermResponse contenant une chaîne de caractères value -->
<wsdl:message name="getTermResponse">
<wsdl:part name="value" type="xs:string"/>
</wsdl:message>
<!-- Description du WebService glossaryTerms contenant une opération (action) qui prend en
entrée un message getTermRequest et retourne un message getTermResponse -->
<wsdl:portType name="glossaryTerms">
<wsdl:operation name="getTerm">
<!-- On peut rajouter une description textuelle de l'opération -->
<wsdl:documentation .... />
<wsdl:input message="getTermRequest"/>
<wsdl:output message="getTermResponse"/>
</wsdl:operation>
</wsdl:portType>
<!-- Association de l’accès SOAP pour le WebService glossaryTerms -->
<wsdl:binding type="glossaryTerms" name="b1">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation>
<soap:operation
soapAction="http://www.example.com/getTerm"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>
Web service
WSDL - Exemple
REST (REpresentational State Transfer)
● un style d'architecture logicielle permettant de construire une application
devant fonctionner sur des systèmes distribués
● très proche du Web (définit par Roy Fielding, un des rédacteurs de la norme
HTTP 1.1)
● aux sources du Web - STATELESS -
Bref, REST est donc le style d'architecture soutenant le Web.
Web service
REST
● PUT créer des ressources / urls sur un serveur
● GET récupérer une ressource
● POST créer ou modifier une ressource sur le server
● DELETE supprimer une ressource
Exemple : http://myIncredibleRestServer:8080/context/rest/articles?prix=3.05
[
{
"nom": "article a",
"prix": 3.05,
"disponible": false,
"descriptif": "mon article a ..."
},
{
"nom": "article b",
"prix": 3.05,
"disponible": true,
"descriptif": null
}
]
Web service
REST - The Web Spirit !
● Un langage de description d'interfaces (IDL) pour les données et services
● Un compilateur qui génère le code pour mettre en place les services
Multi-langage : Java, Python, C/C++, PHP...
● Du code pour la description des données (beans)
● la sérialisation/désérialisation
● le transport (HTTP, TCP...)
● le client et le serveur
Web service
C'est quoi Thrift
enum PhoneType {
HOME,
WORK,
MOBILE,
OTHER,
}
struct Phone {
1: i32 id,
2: string number,
3: PhoneType type,
}
struct Contact {
1 : i32 id,
2 : string name,
3 : string surname,
4 : list<Phone> phones,
}
Thrift
Les idls - décrire les données
struct GetContactByNameRequest {
1 : string name,
2 : string surname,
}
struct GetContactByNameResponse {
1 : GetContactByNameRequest request,
2 : Contact contact,
}
service GetContact {
//Ici une belle description du service
GetContactByNameResponse getContactByName( 1 : GetContactByNameRequest request
);
}
● Un et un seul paramètre en entrée NomDeLaMethodeRequest
● Un et un seul objet en sortie NomDeLaMethodeResponse
● Le premier champ de l'objet response est toujours la request
Web service
Services
Cloud
You did this really by youself ?
Cloud
Enjoy, the Cloud save you life
This afternoon...

Weitere ähnliche Inhalte

Was ist angesagt?

Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les basesAntoine Rey
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework springAntoine Rey
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring BatchAntoine Rey
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016Antoine Rey
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JSAntoine Rey
 
cours j2ee -présentation
cours  j2ee -présentationcours  j2ee -présentation
cours j2ee -présentationYassine Badri
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur SpringAntoine Rey
 
Presentation Tomcat Load Balancer
Presentation Tomcat Load BalancerPresentation Tomcat Load Balancer
Presentation Tomcat Load Balancertarkaus
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsAntoine Rey
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec JavaFrancois ANDRE
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWinslo Nwan
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystémeAlgeria JUG
 

Was ist angesagt? (20)

Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
Rapport tp2 j2ee
Rapport tp2 j2eeRapport tp2 j2ee
Rapport tp2 j2ee
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
Rapport tp3 j2ee
Rapport tp3 j2eeRapport tp3 j2ee
Rapport tp3 j2ee
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring Batch
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JS
 
cours j2ee -présentation
cours  j2ee -présentationcours  j2ee -présentation
cours j2ee -présentation
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
 
Presentation Tomcat Load Balancer
Presentation Tomcat Load BalancerPresentation Tomcat Load Balancer
Presentation Tomcat Load Balancer
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du temps
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec Java
 
Zf2 ce-qui-va-changer
Zf2 ce-qui-va-changerZf2 ce-qui-va-changer
Zf2 ce-qui-va-changer
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystéme
 
APACHE HTTP
APACHE HTTPAPACHE HTTP
APACHE HTTP
 

Andere mochten auch

ENIB cours CAI Web - Séance 3 - JSP/Servlet - TP
ENIB cours CAI Web - Séance 3 - JSP/Servlet - TPENIB cours CAI Web - Séance 3 - JSP/Servlet - TP
ENIB cours CAI Web - Séance 3 - JSP/Servlet - TPHoracio Gonzalez
 
Java - JEE - Introduction aux JSP
Java - JEE - Introduction aux JSPJava - JEE - Introduction aux JSP
Java - JEE - Introduction aux JSPNoël
 
Travailler en équipe avec le web 2.0
Travailler en équipe avec le web 2.0Travailler en équipe avec le web 2.0
Travailler en équipe avec le web 2.0cedric lemery
 
SAINT-WITZ DEMAIN #10 PLUS SUR L'AGGLO
SAINT-WITZ DEMAIN #10 PLUS SUR L'AGGLO SAINT-WITZ DEMAIN #10 PLUS SUR L'AGGLO
SAINT-WITZ DEMAIN #10 PLUS SUR L'AGGLO SAINT-WITZ DEMAIN
 
Culture Numérique Master EMT1 Caen
Culture Numérique Master EMT1 CaenCulture Numérique Master EMT1 Caen
Culture Numérique Master EMT1 CaenLeaGu
 
Tap 21 thien ac doi dau
Tap 21 thien ac doi dauTap 21 thien ac doi dau
Tap 21 thien ac doi dautruyentranh
 
“Open Data” & “Big Data” présentation de Romain Lacombe, mission Etalab, févr...
“Open Data” & “Big Data” présentation de Romain Lacombe, mission Etalab, févr...“Open Data” & “Big Data” présentation de Romain Lacombe, mission Etalab, févr...
“Open Data” & “Big Data” présentation de Romain Lacombe, mission Etalab, févr...ADBS
 
Friends Pictures
Friends PicturesFriends Pictures
Friends Picturesaylingn
 
3 Clés du Succès en Affaires
3 Clés du Succès en Affaires 3 Clés du Succès en Affaires
3 Clés du Succès en Affaires mariam tounkara
 
Lb web mobile_slideshare
Lb web mobile_slideshareLb web mobile_slideshare
Lb web mobile_slideshareALTICS
 
Direct assurance - Rouler sans assurance
Direct assurance - Rouler sans assuranceDirect assurance - Rouler sans assurance
Direct assurance - Rouler sans assuranceDirect Assurance
 

Andere mochten auch (20)

ENIB cours CAI Web - Séance 3 - JSP/Servlet - TP
ENIB cours CAI Web - Séance 3 - JSP/Servlet - TPENIB cours CAI Web - Séance 3 - JSP/Servlet - TP
ENIB cours CAI Web - Séance 3 - JSP/Servlet - TP
 
Java - JEE - Introduction aux JSP
Java - JEE - Introduction aux JSPJava - JEE - Introduction aux JSP
Java - JEE - Introduction aux JSP
 
J2 ee
J2 eeJ2 ee
J2 ee
 
Travailler en équipe avec le web 2.0
Travailler en équipe avec le web 2.0Travailler en équipe avec le web 2.0
Travailler en équipe avec le web 2.0
 
SAINT-WITZ DEMAIN #10 PLUS SUR L'AGGLO
SAINT-WITZ DEMAIN #10 PLUS SUR L'AGGLO SAINT-WITZ DEMAIN #10 PLUS SUR L'AGGLO
SAINT-WITZ DEMAIN #10 PLUS SUR L'AGGLO
 
Culture Numérique Master EMT1 Caen
Culture Numérique Master EMT1 CaenCulture Numérique Master EMT1 Caen
Culture Numérique Master EMT1 Caen
 
Tap 21 thien ac doi dau
Tap 21 thien ac doi dauTap 21 thien ac doi dau
Tap 21 thien ac doi dau
 
Objetivos primera parte
Objetivos primera parteObjetivos primera parte
Objetivos primera parte
 
Relations
RelationsRelations
Relations
 
“Open Data” & “Big Data” présentation de Romain Lacombe, mission Etalab, févr...
“Open Data” & “Big Data” présentation de Romain Lacombe, mission Etalab, févr...“Open Data” & “Big Data” présentation de Romain Lacombe, mission Etalab, févr...
“Open Data” & “Big Data” présentation de Romain Lacombe, mission Etalab, févr...
 
Friends Pictures
Friends PicturesFriends Pictures
Friends Pictures
 
Bases generales Concurso Gran
Bases generales Concurso GranBases generales Concurso Gran
Bases generales Concurso Gran
 
Pp Cv Nora
Pp Cv NoraPp Cv Nora
Pp Cv Nora
 
Al aire del romance
Al aire del romanceAl aire del romance
Al aire del romance
 
3 Clés du Succès en Affaires
3 Clés du Succès en Affaires 3 Clés du Succès en Affaires
3 Clés du Succès en Affaires
 
Lb web mobile_slideshare
Lb web mobile_slideshareLb web mobile_slideshare
Lb web mobile_slideshare
 
Blo
BloBlo
Blo
 
Direct assurance - Rouler sans assurance
Direct assurance - Rouler sans assuranceDirect assurance - Rouler sans assurance
Direct assurance - Rouler sans assurance
 
Wud by elan_14
Wud by elan_14Wud by elan_14
Wud by elan_14
 
Paris
ParisParis
Paris
 

Ähnlich wie ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours

Java EE _ Servlet et vue (1).pdf
Java EE _ Servlet et vue (1).pdfJava EE _ Servlet et vue (1).pdf
Java EE _ Servlet et vue (1).pdfColombieColombie
 
BordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets JavaBordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets JavaCamblor Frédéric
 
Ajax en Java - GTI780 & MTI780 - ETS - A08
Ajax en Java - GTI780 & MTI780 - ETS - A08Ajax en Java - GTI780 & MTI780 - ETS - A08
Ajax en Java - GTI780 & MTI780 - ETS - A08Claude Coulombe
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09Claude Coulombe
 
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursHoracio Gonzalez
 
Ajax GTI780 & MTI780 ETS A09
Ajax  GTI780 & MTI780  ETS  A09Ajax  GTI780 & MTI780  ETS  A09
Ajax GTI780 & MTI780 ETS A09Claude Coulombe
 
Activity
ActivityActivity
Activitydido
 
Java Entreprise Edition EE est fait pour le développement des applications Cl...
Java Entreprise Edition EE est fait pour le développement des applications Cl...Java Entreprise Edition EE est fait pour le développement des applications Cl...
Java Entreprise Edition EE est fait pour le développement des applications Cl...HAMIDGARMANI
 
Aspnetcore introduction
Aspnetcore introductionAspnetcore introduction
Aspnetcore introductionMichel Bruchet
 
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Jean-Laurent de Morlhon
 

Ähnlich wie ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours (20)

Java EE _ Servlet et vue (1).pdf
Java EE _ Servlet et vue (1).pdfJava EE _ Servlet et vue (1).pdf
Java EE _ Servlet et vue (1).pdf
 
BordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets JavaBordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets Java
 
Ajax en Java - GTI780 & MTI780 - ETS - A08
Ajax en Java - GTI780 & MTI780 - ETS - A08Ajax en Java - GTI780 & MTI780 - ETS - A08
Ajax en Java - GTI780 & MTI780 - ETS - A08
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09
 
Support Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFISupport Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFI
 
Marzouk jsp
Marzouk jspMarzouk jsp
Marzouk jsp
 
APACHE TOMCAT
APACHE TOMCATAPACHE TOMCAT
APACHE TOMCAT
 
Vert.x
Vert.xVert.x
Vert.x
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
 
Ajax GTI780 & MTI780 ETS A09
Ajax  GTI780 & MTI780  ETS  A09Ajax  GTI780 & MTI780  ETS  A09
Ajax GTI780 & MTI780 ETS A09
 
nodejs vs vertx
nodejs vs vertxnodejs vs vertx
nodejs vs vertx
 
spring.pdf
spring.pdfspring.pdf
spring.pdf
 
Activity
ActivityActivity
Activity
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Java Entreprise Edition EE est fait pour le développement des applications Cl...
Java Entreprise Edition EE est fait pour le développement des applications Cl...Java Entreprise Edition EE est fait pour le développement des applications Cl...
Java Entreprise Edition EE est fait pour le développement des applications Cl...
 
Aspnetcore introduction
Aspnetcore introductionAspnetcore introduction
Aspnetcore introduction
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
 

Mehr von Horacio Gonzalez

Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27Horacio Gonzalez
 
But there is no web component for that - Web Components Remote Conference - 2...
But there is no web component for that - Web Components Remote Conference - 2...But there is no web component for that - Web Components Remote Conference - 2...
But there is no web component for that - Web Components Remote Conference - 2...Horacio Gonzalez
 
Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
 Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27 Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27Horacio Gonzalez
 
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...Horacio Gonzalez
 
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSHoracio Gonzalez
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Horacio Gonzalez
 
Mixing Web Components - Best of Web Paris - 2016 06-09
Mixing Web Components - Best of Web Paris - 2016 06-09Mixing Web Components - Best of Web Paris - 2016 06-09
Mixing Web Components - Best of Web Paris - 2016 06-09Horacio Gonzalez
 
Polymer in the real life - Devoxx France - 2016 04-20
Polymer in the real life - Devoxx France - 2016 04-20Polymer in the real life - Devoxx France - 2016 04-20
Polymer in the real life - Devoxx France - 2016 04-20Horacio Gonzalez
 
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24 Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24 Horacio Gonzalez
 
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptHoracio Gonzalez
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...Horacio Gonzalez
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...Horacio Gonzalez
 
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQLENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQLHoracio Gonzalez
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSHoracio Gonzalez
 
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQLENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQLHoracio Gonzalez
 
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScriptENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScriptHoracio Gonzalez
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...Horacio Gonzalez
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSHoracio Gonzalez
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...Horacio Gonzalez
 
Beyond Polymer - JUG Summer Camp - 2015-09-18
Beyond Polymer - JUG Summer Camp - 2015-09-18Beyond Polymer - JUG Summer Camp - 2015-09-18
Beyond Polymer - JUG Summer Camp - 2015-09-18Horacio Gonzalez
 

Mehr von Horacio Gonzalez (20)

Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
 
But there is no web component for that - Web Components Remote Conference - 2...
But there is no web component for that - Web Components Remote Conference - 2...But there is no web component for that - Web Components Remote Conference - 2...
But there is no web component for that - Web Components Remote Conference - 2...
 
Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
 Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27 Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
 
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
 
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
 
Mixing Web Components - Best of Web Paris - 2016 06-09
Mixing Web Components - Best of Web Paris - 2016 06-09Mixing Web Components - Best of Web Paris - 2016 06-09
Mixing Web Components - Best of Web Paris - 2016 06-09
 
Polymer in the real life - Devoxx France - 2016 04-20
Polymer in the real life - Devoxx France - 2016 04-20Polymer in the real life - Devoxx France - 2016 04-20
Polymer in the real life - Devoxx France - 2016 04-20
 
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24 Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
 
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
 
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQLENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
 
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQLENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
 
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScriptENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
 
Beyond Polymer - JUG Summer Camp - 2015-09-18
Beyond Polymer - JUG Summer Camp - 2015-09-18Beyond Polymer - JUG Summer Camp - 2015-09-18
Beyond Polymer - JUG Summer Camp - 2015-09-18
 

ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours

  • 2. La Servlet The Web War Je dois obéir à mon maître Perl Tu souséstime le pouvoir de CGI Ton simple language est bien faible comparé au coté obscur de Perl Robuste je suis grâce à Java Toujours en mouvement le Web est Du conteneur émane l'énergie de la Servlet
  • 3. La Servlet Généralitée La Servlet est une classe Java permettant de créer dynamiquement des données au sein d'un serveur HTTP. Une instance unique de la Servlet s'execute à chaque requête HTTP reçu par le conténeur (Serveur Web). Elle produit du code (HTML, XML, JS...) compréhensible par un navigateur Web. ● Crée en 1997 (v1.0) par Sun Microsystems ● la servlet est un singleton ● interface définie dans le package javax.servlet ● normée par une JSR (Java Specification Requests) ● support natif dans un conténeur web java (Tomcat, Jetty, etc...)
  • 4. La Servlet Historique Servlet 3.0 12/2009 JavaEE/SE 6 Async Servlet, File Uploading Tomcat 7.x, Jetty 8.x Servlet 2.5 09/2005 JavaEE/SE 5 Ajout des annotations Tomcat 6.x, Jetty 6.x-7.x Servlet 2.4 11/2003 J2EE 1.4, J2SE 1.3 XML Schema pour le web. xml Tomcat 5.x, Jetty 5.x Servlet 2.3 08/2001 J2EE 1.3, J2SE 1.2 Gestion des filtres Tomcat 4.x, Jetty 4.x Servlet 2.2 08/1999 J2EE 1.2, J2SE 1.2 Intégration dans J2EE Tomcat 3.x, Jetty 3.x Servlet 2.1 11/1998 Spécification officielle Jetty 2.x Servlet 2.0 JDK 1.1 Servlet 1.0 06/1997
  • 5. Web Browser Java Web Containeur La Servlet Designed to eat HTTP requests GET http://localhost:8080/myservlet HTTP/1.0 Decode et affiche la résponse HTML HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/html Content-Length: 122 Date: Fri, 02 Nov 2012 14:40:51 GMT <html> <head> <title>Hello Enib!</title> </head> <body> <h1>Welcome in the Java server side!</h1> </body> </html> CAI Webappp (war) MyServlet.class Produit du code HTML
  • 6. La Servlet Controlled by the container Copyright : http://marakana.com/s/post/106/tomcat_architecture_diagram
  • 7. La Servlet Life cycle Web Container Servlet Class Servlet Object BeerServlet.class Class Loading Instantiation (Default contructor) Servlet ready to work init() service() Servlet clean up Servlet working destoy() Handle client HttpRequest doGet() doPost() each request in a separate Thread Call once by the container Call once by the container The servlet should only have the default contsructor Copyright : http://www.lifecyclesfilm.com/
  • 8. La Servlet Simple ? ... or not ? public class HtmlServlet extends HttpServlet { private static final long serialVersionUID = 1L; public HtmlServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html") ; PrintWriter out = response.getWriter() ; out.println("<html>") ; out.println("<head>") ; out.println("<title>Hello Enib!</title>") ; out.println("</head>") ; out.println("<body>") ; out.println("<h1>Welcome in the Java server side!</h1>") ; out.println("</body>") ; out.println("</html>") ; } } Really so simple ? Copyright : http://www.lifecyclesfilm.com/
  • 9. POST : Permet de réaliser une transaction afin de mettre à jour le modèle. Les données sont transmises via l'entête de la page Web. Attention que se passe-t-il si la page est rejouée ? La Servlet Get or Post Madness GET ... POST ... Servlet Servlet Model <html> ... <html> ... GET permet de récupérer un document, ne doit RIEN changer sur le serveur. Peut être rejoué (F5) sans effets de bords Copyright : http://www.lifecyclesfilm.com/
  • 10. La Servlet La guerre des clones Je vais cloner mes Servlets ! Une pour chaque page !
  • 11. La Servlet Au modèle MVC vous fier, il faut ! Le contrôleur n'effectue aucun traitement, ne modifie aucune donnée. Il analyse la requête du client et se contente d'appeler le modèle adéquat et de renvoyer la vue correspondant à la demande. Controller (Servlet) Modèle (Java) Vue (JSP) Ce avec quoi l'utilisateur interagit. - présente les résultats renvoyés par le modèle. - reçoit toute action de l'utilisateur (clic de souris, etc...) - envoie les évènements au contrôleur (HTTP Request) La vue n'effectue pas de traitement, elle se contente d'afficher les résultats des traitements effectués par le modèle et d'interagir avec l'utilisateur. Le modèle représente le cœur (algorithmique) de l'application : traitements des données. - décrit les données manipulées par l'application. - responsable de l'intégrité des données métier. Les résultats renvoyés par le modèle ne s'occupent pas de présentation. Le modèle ne contient aucun lien direct vers le contrôleur ou la vue. BDD
  • 12. La Servlet Requête HTTP et modèle MVC 1. Requête du navigateur 2. Mapping url / servlet 3. Appel du modèle métier 4. La servlet ajoute la réponse du modèle à la requête 5. Forward vers la JSP 6. La JSP récupére la réponse 7. Génération de la page HTML 8. Le conteneur envoie la page au navigateur Container logic Servlet Modèle (Java) Vue (JSP) 2 1 3 8 7 5 4 6 request
  • 13. La Servlet My best work 1. Requête du navigateur 2. Mapping url / servlet 3. Appel du modèle métier 4. La servlet ajoute la réponse du modèle à la requête 5. Forward vers la JSP 6. La JSP récupére la réponse 7. Génération de la page HTML 8. Le conteneur envoie la page au navigateur protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Call the business List<Beer> beers = beerBusiness.getBeers(); // Adds the model response to the request request.setAttribute("beers", beers); // Forward to the JSP RequestDispatcher dispatch = request.getRequestDispatcher ("/WEB-INF/views/beer.jsp"); dispatch.forward(request, response); }
  • 14. beers.jsp Head / Body.... <table class="table table-condensed"> <thead> <tr> <th>Name</th> <th>Brewery</th> <th>Country</th> <th>Alcohol</th> </tr> </thead> <tbody> <c:forEach items="${beers}" var="beer"> <tr> <td>${beer.name}</td> <td>${beer.brewery}</td> <td>${beer.country}</td> <td>${beer.alcohol}</td> </tr> </c:forEach> </tbody> </table> ... La Servlet Liens Servlet / JSP 1. Requête du navigateur 2. Mapping url / servlet 3. Appel du modèle métier 4. La servlet ajoute la réponse du modèle à la requête 5. Forward vers la JSP 6. La JSP récupére la réponse 7. Génération de la page HTML 8. Le conteneur envoie la page au navigateur
  • 15. La Servlet Gestion de la session Une session web est une période délimitée pendant laquelle un serveur est en communication et réalise des opérations au service d'un client HTTP. Session implicite : Lié à un browser Session explicite : Liée a des credentials (login / password) Création d'une session : HttpSession session = request.getSession(true);
  • 16. La Servlet HttpSession Principales methodes Configuration de la durée de session void setAttribute(String name, Object Value) Object getAttribute(String name) Ajoute ou récupère la valeur d'un attribut en session Enumeration getAttributeNames() Retourne la liste de tous les attriuts String getId() Retourne l'identificant de sessions void invalidate() Invalide la session courante Dans le web.xml -global à toutes les sessions- : <session-config> <session-timeout>30</session-timeout> </session-config> A la création de la session -local pour chaque session- : session.setMaxInactiveInterval(30);
  • 17. La Servlet Listener de Session Interfacesà implémenter HttpSessionListerner HttpSessionAttributeListerner Déclaration dans le web.xml Notification new session created void sessionCreated( HttpSessionEvent hse ) Notification session invalidated void sessionDestroyed( HttpSessionEvent hse ) Notification new attribute added : void attributeAdded( HttpSessionBindingEvent hsbe ) Notification attribute removed : void attributeRemoves( HttpSessionBindingEvent hsbe ) Notification attribute replaced: void attributeRemoves( HttpSessionBindingEvent hsbe ) <listener> <description>HttpSessionListener, HttpSessionAttributesListener</description> <listener-class>fr.enib.cai.servlet.SessionListener</listener-class> </listener>
  • 18. JSP Introduction JSP = JavaServer Pages Technologie Java crée par Sun Permettent la génération de pages web dynamiques. Mélange de Java côté serveur et d'HTML côté client. Adore se transformer ! Adepte du ménage à 3 (la JSP n'existe pas sans container ni Servlet)
  • 19. JSP Transformation <html> <body> <%= new String ("Hello!") % > </body> </html> package ... import javax. servlet... byte code 0010 0010 1001 0001 0001 1100 0101 1010 Servlet Hello.jsp Hello_jsp.java Hello_jsp.class Hello_jsp servlet translated compiled loaded
  • 20. JSP Scriptlet UglyScriptlet.jsp <html> <body> Pourquoi suis-je si moche ?<br> <% out.println(plain.old.java.Reason.getText() ); %> </body> </html> Reason.java package plain.old.java; pubic class Reason { public static synchronized String getText() { return new String("Parce que tu as un problème de circulation sanguine."); } }
  • 21. JSP Les directives UglyScriptlet.jsp <%@ page import="plain.old.java.*" %> <html> <body> Pourquoi suis-je toujours aussi moche ?<br> <% out.println(Reason.getText() ); %> </body> </html> <%@ page [language="java"] [extends="package.class"] [import="{package.class|package.*}, ..."] [session="true|false"] [buffer="none|8kb|sizekb"] [autoflush="true|false"] [isThreadSafe="true|false"] [info="text"] [errorPage="relativeURL"] [contentType="mimeType [charset=characterSet]" | "text/html;charset=ISO-8859-17"] [iserrorPage="true|false"] %> <%@ include file="relativeURL" %> <%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
  • 22. JSP Les expressions UglyScriptlet.jsp <%@ page import="plain.old.java.*" %> <html> <body> Pourquoi suis-je toujours aussi moche ?<br> <%= (Reason.getText() ); %> </body> </html> Les expressions JSP permettent d'insérer simplement des chaînes de caractères générées dynamiquement dans la page HTML.
  • 23. JSP Les objets implicites Java API jsp Object JspWriter out HttpServletRequest request HttpServletResponse response HttpSession session ServletContext application Throwable exception PageContext pageContext Object page Les expressions JSP permettent d'insérer simplement des chaînes de caractères générées dynamiquement dans la page HTML.
  • 24. JSP Les scopes Page scope - portée : une JSP Request scope - portée : une http request Session scope - portée : la session d'un utlisateur du site - n'est pas thread safe (plusieurs onglet d'un browser peuvent partager la même session) Application/Context scope - portée : globale (Servlet, Jsp, listener) - n'est pas thread safe
  • 25. JSP Expression Language (EL) Inclus à partir de JSP 2.0 Un seul but : Code less Too long expression <%= ((fr.enib.cai.core.Beer) request.getAttribute("beers").get(0).getName() %> Much better no ? ${beers[0].name} Attention EL implicit objects sont des Maps - pair(name / value) pageScope - requestScope - sessionScope - applicationScope param - paramValues header - headerValue cookie initParam Il faut toujours un exception : pageContext Oracle tutorial : http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html
  • 26. JSP Expression Language (EL) - Implicit objects Autre exemple : Method is : <%= request.getMethod() %> Avec les EL essayez : Method is : ${request.method} Method is : ${requestScope.method} Method is : ${pageContext.request.method} Oracle tutorial : http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html Ouch
  • 27. ● JSTL = JSP Standard Tag Library ● 4 Bibliothèques de tags utilisables dans les JSP ● Objectif : faciliter le développement des JSP ● Anéantir les scriptlets ● Depuis servlet API 2.3 JSTL Relookez vos JSP
  • 28. Avec le Jstl on peut faire : des valeurs par défaut <c:out value='${user}' default='invité' /> des boucles <c:forEach var="beer" items="${beers}" > Beer name : ${beer.name} </c:forEach> Ne jamais laisser trainer les cadavres ! <c:remove var="kenny" scope="request" /> Le scope est optionnel JSTL Les gammes - core library
  • 29. des if... sans else <c:if test="${beer.name eq 'Karmeliet'}"> Yes ${beer.name} have an incredible flavour ! </c:if> mais avec des choose on peut faire de choses ! <c:choose> <c:when test="${beer.name eq 'Karmeliet'}"> Yes ${beer.name} have an incredible flavour ! </c:when> <c:when test="${beer.name eq 'Rochefor 8'}"> ${beer.name} is another best choice ! </c:when> <c:otherwise> Dammed give me a Kro ! </c:otherwise> </c:choose> JSTL Les gammes - core library
  • 30. un set vraiment open ! des variables <c:set var="username" scope="" value="moi" />Pour les variables c'est basic même des Maps <c:set target="${PrettyMap}" property="prettyKey" value="prettyValue" /> JSTL Les gammes - core library
  • 31. Focus sur les includes! <%@ include file="header.html" %> Static include content added at translation time <jsp:include page="header.jsp" /> Dynamique include, compiled on time executed for each request <c:import url="http://www.beertender.com/product.html /> Dynamique (comme jsp:include) Je peux inclure des ressources en dehors de mon container ??? Même avec des paramètres ! <c:import url="header.jsp> <c:param name="subTitle" value="Wy I drink so many beers ?" /> </c:import> File header.jsp <em><strong>${param.subTitle}</strong></em> JSTL Les gammes - core library
  • 32. Créer des liens dans vos pages ! <c:url value='/signin.jsp' /> Avec des paramètres <c:url value='/signin.jsp' > <c:param name="promocode" value="${enib}" /> </c:url> Dans la page HTTP vous aurez un lien du genre : -> http://myServer.enib.fr:8080/mycontext/signin.jsp?promocode=enib JSTL Les gammes - core library
  • 33. catcher les exceptions (NOTE : Ne pas coder avec des moufles) ! <c:catch var="myException"> <!-- doing here a very dangerous operation --> </c:catch> <c:if test="${myEception != null}"> Dammed, what is going wrong ? ${myException.message} </c:if> JSTL Les gammes - core library
  • 34. La librairie de formatage (fmt): http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/fmt/tld-summary.html ● internationalisarion ● formatage des chaines de caractère La "SQL" library : Hum, du Sql dans les JSP, je suis confus... ce n'est pas vraiment MVC compliant... mais ça existe. La "XML" library : A utiliser en dernier recours, à dose homeopathique ! JSTL L'aventure continue
  • 35. Peut vous sauver la vie : ● réduire la duplication de code dans vos JSP ● intégrer la vue d'un composant complexe ● coder coté java quand le langage JSP / JSTL est aux limites Helas trop long pour le parcourir ! JSTL Yeah je fais ma lib de tags
  • 36. Plein de noms pour la même chose -> Conteneur de servlets (Servlet container en anglais) -> Conteneur web (web container en anglais) -> moteur web -> moteur de servlets... Bref, il exécute des servlets. La Star : Tomcat de la fondation Apache (59% du marché). Les poids lourds : Jboss ou WildFly (redhat), Jetty (Codehaus), WebLogic (IBM), WebSphere (IBM), GlassFish (Oracle), ... et une multitude d'autres Le Conteneur
  • 37. ● contenir des web apps ● recevoir des requêtes HTTP et les faire traiter par la bonne web app ● faire le mapping vers les servlets ● gérer les ressources de l'application web (base de données, etc...) ● gérer la session ● faire le mapping url / servlet, filtres,valves ● gérer le realm (royaume de la sécurité, un peu obsolète) ● gérer les logs Le Conteneur Son rôle
  • 38. Le Conteneur Schema général Copyright : http://marakana.com/s/post/106/tomcat_architecture_diagram
  • 39. Le Conteneur serveur.xml Copyright : http://marakana.com/s/post/106/tomcat_architecture_diagram ● Configuration des services (généralement 1, : Catalina) ● Configuration pour chaque service ○ connecteur (port d'écoute) ○ valves (intercèpte toutes les requêtes) ○ realm (gère l'authentification) ○ host (les applications web du container)
  • 40. Intercèpte TOUTES les requêtes Définie dans le server.xml ou context.xml Applicable pour un : engine, host ou context exemple : <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" Ecrit un fichier de logs contenant une ligne pour chaque requête HTTP 10.144.167.233 - - [10/Oct/2012:04:31:17 +0200] "POST /servau/thrift/acces/ HTTP/1.1" 200 325 "null" "Java/THttpClient" 3 Le Conteneur La valve
  • 41. Intercèpte les requêtes en amont d'une servlet pour un url pattern donné Définie dans le web.xml Le filtre est une classe Java Souvent utilisé pour traiter vérifier la session et les habilitations d'une requête. exemple : <filter> <filter-name>UserContextFilter</filter-name> <filter-class> fr.enib.cai.filter.UserContextFilter </filter-class> </filter> <filter-mapping> <filter-name>UserContextFilter</filter-name> <url-pattern>/prive/*</url-pattern> </filter-mapping> Le Conteneur Le filtre
  • 42. Execute une requête pour un mapping d'url donné Définie dans le web.xml La servlet est une classe Java exemple : <servlet> <servlet-name>authentication_servlet</servlet-name> <servlet-class> fr.enib.cai.servlet.SignInServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>authentication_servlet</servlet-name> <url-pattern>/signin</url-pattern> </servlet-mapping> Le Conteneur La Servlet
  • 43. WAR = un fichier jar (donc un zip...) contenant : ○ JSP ○ Servlet ○ classes Java ○ fichiers (xml, html, js, css) ○ taglibs (tld) Cette archive est utilisée pour déployer une application web sur un serveur d'application. Le War Web Application ARchive
  • 44. Le War Structure mywebapp.war WEB-INF libclasses tags fr foo MyTag.tag fr.foo.Foo.class web.xml META-INF MANIFEST.MF (public) resources CSS JS PNG (public) content JSP HTML(private) views JSPs PRIVATE : fichiers exposés par l'intermédiaire d'une servlet / filtre / web. xml PUBLIC : fichiers exposés directement par le container
  • 46. Un service web est un programme informatique permettant la communication et l'échange de données entre applications et systèmes hétérogènes dans des environnements distribués. Il s'agit donc d'un ensemble de fonctionnalités exposées sur internet ou sur un intranet, par et pour des applications ou machines, sans intervention humaine, et de manière synchrone. Source Wikipedia Les web services utilisent comme medium de communication HTTP/S Web service
  • 47. anciènement : Simple Object Access Protocol : protocol RPC orienté objet bâti sur XML ● Définit initialement par Microsoft et IBM. ● recommandé par le W3C ● utilisé dans les architecture SOA (Service Oriented Architecture) Avantages : ● basé sur HTTP ● indépendant de la plate-forme ● "presque" indépendant du langage Inconvénients : ● formalisme lourd (verbosité de l'xml) ● couplage fort client / serveur ● volume de données transactionnel Web service SOAP
  • 48. <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <soap:Header> <m:User xmlns:m="http://www.exemple.com/rights/" soap:actor="http://www.exemple.com/rights/RightsManager"> Charles </m:User> <m:Session xmlns:m="http://www.exemple.com/session/" soap:mustUnderstand="1">12AE3C </m:Session> <m:Lang xmlns:m="http://www.exemple.com/lang/" soap:actor="http://schemas.xmlsoap.org/soap/next" soap:mustUnderstand="0"> FR </m:Lang> </soap:Header> <soap:Body> <m:GetPrice xmlns:m="http://www.exemple.com/prices"> <m:Item>Pomme</m:Item> </m:GetPrice> <soap:Fault> <faultcode>soap:Server</faultcode> <faultstring>Impossible de router le message.</faultstring> <faultactor>http://www.exemple.com/messageDispatcher</faultactor> <detail> <m:error xmlns:m="http://www.exemple.com/errors">E_NO_ROUTE</m:error> </detail> </soap:Fault> </soap:Body> </soap:Envelope> Web service SOAP - Exemple
  • 49. Web Service Description Language: grammaire XML décrivant un Service Web ● v2.0 approuvée en 2007 ● recommandé par le W3C ● décrit une interface publique dans les architecture SOA Le WSDL sert à décrire : ● le protocole de communication (SOAP RPC ou SOAP orienté message) ● le format des messages ● les méthodes que le client peut invoquer ● la localisation du service Le wsdl est compilé (wsdl2java) pour obtenir les couches client / serveur Des implementation sont disponibles avec les frameworks : ○ cxf ○ axis ○ un conteneur Web Profile (tomEE entre autres) Web service WSDL
  • 50. <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <!-- Définition d'un message getTermRequest contenant une chaîne de caractères term --> <wsdl:message name="getTermRequest"> <wsdl:part name="term" type="xs:string"/> </wsdl:message> <!-- Définition d'un message getTermResponse contenant une chaîne de caractères value --> <wsdl:message name="getTermResponse"> <wsdl:part name="value" type="xs:string"/> </wsdl:message> <!-- Description du WebService glossaryTerms contenant une opération (action) qui prend en entrée un message getTermRequest et retourne un message getTermResponse --> <wsdl:portType name="glossaryTerms"> <wsdl:operation name="getTerm"> <!-- On peut rajouter une description textuelle de l'opération --> <wsdl:documentation .... /> <wsdl:input message="getTermRequest"/> <wsdl:output message="getTermResponse"/> </wsdl:operation> </wsdl:portType> <!-- Association de l’accès SOAP pour le WebService glossaryTerms --> <wsdl:binding type="glossaryTerms" name="b1"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation> <soap:operation soapAction="http://www.example.com/getTerm"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> </wsdl:definitions> Web service WSDL - Exemple
  • 51. REST (REpresentational State Transfer) ● un style d'architecture logicielle permettant de construire une application devant fonctionner sur des systèmes distribués ● très proche du Web (définit par Roy Fielding, un des rédacteurs de la norme HTTP 1.1) ● aux sources du Web - STATELESS - Bref, REST est donc le style d'architecture soutenant le Web. Web service REST
  • 52. ● PUT créer des ressources / urls sur un serveur ● GET récupérer une ressource ● POST créer ou modifier une ressource sur le server ● DELETE supprimer une ressource Exemple : http://myIncredibleRestServer:8080/context/rest/articles?prix=3.05 [ { "nom": "article a", "prix": 3.05, "disponible": false, "descriptif": "mon article a ..." }, { "nom": "article b", "prix": 3.05, "disponible": true, "descriptif": null } ] Web service REST - The Web Spirit !
  • 53. ● Un langage de description d'interfaces (IDL) pour les données et services ● Un compilateur qui génère le code pour mettre en place les services Multi-langage : Java, Python, C/C++, PHP... ● Du code pour la description des données (beans) ● la sérialisation/désérialisation ● le transport (HTTP, TCP...) ● le client et le serveur Web service C'est quoi Thrift
  • 54. enum PhoneType { HOME, WORK, MOBILE, OTHER, } struct Phone { 1: i32 id, 2: string number, 3: PhoneType type, } struct Contact { 1 : i32 id, 2 : string name, 3 : string surname, 4 : list<Phone> phones, } Thrift Les idls - décrire les données struct GetContactByNameRequest { 1 : string name, 2 : string surname, } struct GetContactByNameResponse { 1 : GetContactByNameRequest request, 2 : Contact contact, }
  • 55. service GetContact { //Ici une belle description du service GetContactByNameResponse getContactByName( 1 : GetContactByNameRequest request ); } ● Un et un seul paramètre en entrée NomDeLaMethodeRequest ● Un et un seul objet en sortie NomDeLaMethodeResponse ● Le premier champ de l'objet response est toujours la request Web service Services
  • 56. Cloud You did this really by youself ?
  • 57. Cloud Enjoy, the Cloud save you life