Académique Documents
Professionnel Documents
Culture Documents
François Charoy
Pascal Molli
Pascal Urso
License Creative Commons
2 CC by-nc-sa
Plan
3 CC by-nc-sa
Premier browser sur NeXt
4 CC by-nc-sa
Application Web
5 CC by-nc-sa
Web 1.0 vs Web 2.0
6 CC by-nc-sa
Modèle de conversation
7 CC by-nc-sa
Short History
• 1980 : HTML 0.9
• 1990 : Scripts CGI
– Programmes C, shell scripts, perl, ...
• 1994 : Langages spécifiques
– PHP, JSP, ASP (Server Side scripting)
– JavaScript (Client Side Scripting)
• 2002 : Evolutions de HTML
– XHTML, CSS, JavaScript
8 CC by-nc-sa
Aggrégation
9 CC by-nc-sa
10 CC by-nc-sa
Mashups
Composition d'application Web
Composition/Filtre de sources de données
Composition d'applications
Google Maps + bases de données
Yahoo Pipes
...
11 CC by-nc-sa
Service Web/Rest
Exposition des API
Exemple : Twitter
12 CC by-nc-sa
Conclusion
Les applications Web sont le cœur du Web-2.0
Et ça ne fait que commencer...
Pour développer des appli web pertinentes:
Vous avez besoin de «comprendre» le web
Vous avez besoin de comprendre les problèmes techniques pour
faire des applications Web évolutives, sécurisées, tolérantes aux
pannes, composable
Vous devez comprendre les problèmes spécifiques des
applications web pour rendre les applications Web utilisables,
maintenable et sûres
13 CC by-nc-sa
Developping Web Applications :
Introduction to Servlets
14 CC by-nc-sa
Couches de protocole du WWW
Modèle OSI
15 CC by-nc-sa
Requête HTTP
Quelques lignes de texte
Ligne de commande : commande, url, version de protocole
Entête de requête
[ligne vide]
Corps de requête (optionel : paramêtres, appel soap, …)
POST /fichier.ext HTTP/1.1
Host: www.site.com
Connection: Close
Content-type: application/x-www-form-urlencoded
Content-Length: 33
<nouvelle ligne>
variable=valeur&variable2=valeur2
16 CC by-nc-sa
Commandes HTTP
Demande sans effet de bord (en théorie)
GET ressource
HEAD information sur une ressource
OPTIONS options de communication
CONNECT utilisation de proxy
TRACE journal de serveur
Demande avec effet de bord (en théorie)
POST soumission de données
PUT ajout/màj d’une ressource
DELETE suppression d’une ressource
Usuellement seulement GET et POST
17 CC by-nc-sa
Réponse HTTP
Quelques lignes de texte
Ligne de statut : version de protocole, code, message
Entête de réponse
[ligne vide]
Corps de requête (optionel : ressource, url, rép. soap, …)
HTTP/1.0 200 OK
Date: Fri, 31 Dec 1999 23:59:59 GMT
Server: Apache/0.8.4
Content-Type: text/html
Content-Length: 59
<TITLE>Exemple</TITLE>
<P>Ceci est une page d'exemple.</P>
18 CC by-nc-sa
Quels sont les problèmes ?
Protocole HTTP
Stateless
Clients multiples et inconnus
Identification des utilisateurs
Maintient des sessions
Requêtes et réponses statiques
Application distribuée
Concurrence d’accès
Sécurité
Passage à l’échelle
19 CC by-nc-sa
Les Servlets
20 CC by-nc-sa
Ressources
Référence
http://java.sun.com/javaee
API
http://java.sun.com/javaee/6/docs/api/
Tutorial
http://java.sun.com/javaee/6/docs/tutorial/doc/
Java Specification Requests
Servlet
http://jcp.org/aboutJava/communityprocess/pfd/jsr315/index.html
JSP
http://jcp.org/aboutJava/communityprocess/final/jsr245/index.html
21 CC by-nc-sa
Fonctionnement d'un servlet
Un servlet lit les données envoyées par un client Web
(transmises par le serveur)
Données explicites (Formulaire)
Données implicites (Request Header)
Il génère un résultat
Il envoit le résultat au client
Données explicites (Page HTML)
Données implicites (Response Header, Status code)
Database
Serveur Jndi
Web Java App
22 CC by-nc-sa
Serveur d'application JEE
Fournit un ensemble de services pour l'écriture
d'application distribuées en Java
Nommage
Transactions
Sécurité
Conteneur Web
Pourquoi Java ?
23 CC by-nc-sa
Avantage des servlets
Efficacité
Utilisent des threads plutôt que des processus comme les CGI
Pratique
Librairie très développée (moins que PHP mais plus consistante)
Portable
Déployable quelque soit le serveur (ou presque)
Sécurisé
Fonctionne dans une machine virtuelle (plus maitrisable)
Pas cher
Nombreux serveurs gratuits
24 CC by-nc-sa
L’architecture
25 CC by-nc-sa
La partie Web
26 CC by-nc-sa
Les containers de servlet
27 CC by-nc-sa
L’exécution d’un servlet
28 CC by-nc-sa
Un premier servlet
Le servlet HelloWorld
Un servlet surcharge la classe HttpServlet
Il doit implanter au moins une des méthodes
doGet
doPost
doPut
doDelete
29 CC by-nc-sa
Le servlet HelloWorld
30 CC by-nc-sa
Le fichier de configuration
31 CC by-nc-sa
Servlet 3.0 : annotations
32 CC by-nc-sa
Un module Web
Déployable et exécutable dans un serveur Web
33 CC by-nc-sa
L’application Web
• Une archive war
• Déployée dans le serveur
Web
• Web.xml = description de
l’application
Structure d’une application
Package déployable
Composants Web : Servlet et JSP
Ressources statiques (images)
Classes java (helper)
Librairies
Descripteurs de déploiement (web.xml)
35 CC by-nc-sa
Execution d’une requête
36 CC by-nc-sa
Exécution d’une requête
Objet HttpServlet
Objets HttpServletRequest, HttpServletResponse
Paramètres de requête,
Header de requête
Cycle de vie des servlet
37 CC by-nc-sa
La classe HttpServlet
38 CC by-nc-sa
doGet et doPost
39 CC by-nc-sa
L'interface HttpServletRequest
Fournit les informations sur la requête du client au serveur
Principales méthodes (pour l'instant):
String getParameter(String name)
Enumeration getParameterNames()
Retourne une énumération de tous les noms de paramètres
String[] getParameterValues()
Retourne un tableau contenant toutes les valeurs des paramètres
String getHeader(String name)
Enumeration getHeaderNames()
Retourne une énumération de tous les noms des propriétés du header
String[] getHeaderValues()
Retourne un tableau de toutes les valeurs du header
40 CC by-nc-sa
Les paramètres
Les paramètres d'une requête sont accessibles dans l'objet
(HttpServletRequest) request
request.getParameter("paramname");
Il est possible de récupérer tous les noms des paramètres
request.getParameterNames()
41 CC by-nc-sa
Exemples paramètres
42 CC by-nc-sa
Exemple POST
http://www.cs.cornell.edu/projects/
ladis2009/program.htm
43 CC by-nc-sa
Exemple POST (suite)
44 CC by-nc-sa
Nombre de requêtes HTTP : 2
http://localhost:8084/CoursWeb/formulaire.html (GET)
http://localhost:8084/CoursWeb/myForm (POST)
45 CC by-nc-sa
Les request headers
46 CC by-nc-sa
L'interface HttpServletResponse
Objet fournissant les services pour envoyer la réponse à un
client.
Les principales méthodes sont:
java.io.PrintWriter getWriter()
Pour récupérer un printWriter qui permet d'envoyer du texte au client
public void setContentLength(int len)
Positionne le Content-Length Header
public void setContentType(java.lang.String type)
Position le Content-Type header (exemple text/html)
public void sendError(int sc, java.lang.String msg) throws
java.io.IOException
Envoi un message d'erreur au client (cf code dans l'API)
public void setHeader(java.lang.String name, java.lang.String value)
47 CC by-nc-sa
web.xml
Le fichier web.xml donne des instructions sur le
déploiement du servlet dans le container
web-app
La description d'une Web Application
Servlet
La relation entre le nom du servlet et la classe qui l'implante
Servlet-mapping
La relation entre le nom du servlet et l'url qui permet d'y accéder
Servlet 3.0 : remplacement possible par annotations @
Plus « élégant »
Moins « modulaire »
48 CC by-nc-sa
Les paramètres d'initialisation
Les servlets peuvent avoir des paramètres d'initialisation.
Ces paramètres peuvent être changés sans avoir à
recompiler l'application
<init-param>
<param-name>testValue</param-name>
<param-value>12</param-value>
<description>une valeur quelconque</description>
</init-param>
49 CC by-nc-sa
Exemple
50 CC by-nc-sa
Le servlet mapping
Permet de construire la relation entre un servlet et son
URL
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/Test/*</url-pattern>
</servlet-mapping>
52 CC by-nc-sa
Les éléments du chemin de requête
ContextPath : le chemin du contexte de déploiement
ServletPath : la section du chemin qui a déclenché le
mapping
PathInfo : la partie de la requête qui n’est ni le
ContextPath ni le ServletPath
Request.getContextPath()
Request.getServletPath()
Request.getPathInfo()
53 CC by-nc-sa
Exemples
54 CC by-nc-sa
Autre propriétés
Pour le mapping mime
<mime-mapping>
Pour les fichiers à charger quand un nom de répertoire est
donné
<welcome-file-list>
Pour les pages d'erreur
<error-page>
Pour chaque code d'erreur on peut fixer une page spécifique
Il y en a d'autres pour
La sécurité
Les taglibs
55 Les références aux ressources utilisés CC
parby-nc-sa
les servlets
Le cycle de vie d'un servlet
Tous les servlets ont le même cycle de vie
Le container charge le servlet
La fonction init() est appelée (initialisation de variables, connection à des bases de
données)
Le servlet répond aux requêtes des clients
Le container détruit le servlet
La fonction destroy() est appelée (fermeture des connections)
56 CC by-nc-sa
Servlet Life Cycle
57 CC by-nc-sa
Ecrire une application Web
58 CC by-nc-sa
Ecrire une application Web
Gestion des paramètres
Application
Session
RequestDispatcher
Listeners
Filtres
Wrapper
Erreurs
Sécurité
59 CC by-nc-sa
La visibilité
(from jGuru)
60 CC by-nc-sa
Le ServletConfig
61 CC by-nc-sa
Le Servlet Context
Maintien des données pour toute l’application
Fournit le request dispatcher
Données d’initialisations pour toute l’application
Log
Un ServletContext par application et par JVM
62 CC by-nc-sa
Le ServletContext
Objet permettant au servlet de communiquer avec le servlet
container
Obtenu avec
Servlet.getServletContext()
Les principales méthodes de ServletContext
Object getAttribute(String name)
Retourne un attribut du contexte
void setAttribute(String name, Object value)
Ajoute ou remplace un objet dans le contexte
String getInitParameter(String name)
Retourne un paramètre d'initialisation de l'application
void log(String msg)
Ajoute un message dans le log file du servlet container
63 CC by-nc-sa
Le Servlet Context
64 CC by-nc-sa
Les attributs du context
Valeurs disponibles pour toute l’application
65 CC by-nc-sa
Le contexte
Il est possible d'avoir des paramètres d'initialisation du
contexte
<context-param>
<param-name>database</param-name>
<param-value>testDB</param-value>
<description>le nom de la base</description>
</context-param>
66 CC by-nc-sa
La visibilité
(from jGuru)
67 CC by-nc-sa
Les Sessions
Comment maintenir l’état d’un client au cours d’une série
de requêtes d’un même utilisateur pendant un temps
donné ?
HTTP est stateless
Comment identifier le client ?
Où mettre les données de la session ?
68 CC by-nc-sa
Servlet et sessions
La gestion des sessions utilise les techniques classiques
url rewriting
Cookies
Champs cachés dans les formulaires
L'API HttpServlet fournit des fonctions pour gérer les
sessions
L'implantation est casi-transparente pour l'utilisateur
69 CC by-nc-sa
Session & HttpServletRequest
C'est le paramètre request qui maintient les informations
sur la session
Les méthodes sont
HttpSession request.getSession(boolean flag)
Flag=true : retourne l'objet session courant ou en crée un s'il n'y en a
pas.
Flag=false : Retourne l'objet session courant ou null s'il n'y en a pas
isRequestedSessionIdValid()
Vrai si l'id de la session est valide dans le contexte courant
isRequestedSessionIdFromCookie()
Vrai si l'id de la session vient d'un cookie
isRequestedSessionIdFromURL()
70 Vrai si l'id de la session vient d'un URL CC by-nc-sa
Création de la session
71 CC by-nc-sa
Requête dans la même session
72 CC by-nc-sa
L'objet HttpSession
L'objet HttpSession permet de conserver des valeurs entre des appels d'un
client
Les principales méthodes sont
Object getAttribute(String name) String getId()
Récupère la valeur de l'attribut par Retourne l'identifiant de la session
son nom
void invalidate()
Enumeration getAttributeNames()
Invalide la session
Retourne la liste de tous les attributs
long getCreationTime()
void setAttribute(String name, Object
long getLastAccessedTime()
value)
long getMaxInactiveInterval()
Ajoute un attribut à la session
ServletContext getServletContext()
73 CC by-nc-sa
Cookies
Création de cookies
74 CC by-nc-sa
Cookies
75 CC by-nc-sa
Getting cookies values
76 CC by-nc-sa
Fin de vie d’une session
Au niveau programmatique
77 CC by-nc-sa
Ecrire une application Web
RequestDispatcher
78 CC by-nc-sa
Le RequestDispatcher
L'objet RequestDispatcher est utilisé pour
Transférer la requête à un autre programme
Inclure la réponse d'un autre programme
Pour obtenir le request dispatcher
79 CC by-nc-sa
L'utilisation du RequestDispatcher
La requête peut être transférée
rd.forward(request,response)
L'utilisation classique consiste à avoir un servlet contrôleur qui
transmet les commandes à des servlets spécialisés
Pas d’écriture sur la réponse avant le forward (exception)
Le contrôle revient au servlet
Ecritures sur la réponse ignorés après le forward
La réponse peut être incluse dans la réponse en cours de
construction
rd.include(request,response)
Ici, on peut implanter un équivalent de server side include.
80 CC by-nc-sa
Exemple d’utilisation
Démonstration !
81 CC by-nc-sa
82 CC by-nc-sa
Ecrire une application Web
Listeners
83 CC by-nc-sa
Les listeners
Les listeners sont des objets dont les méthodes sont
invoquées en fonction du cycle de vie d'un servlet
A la création et à la destruction d'un contexte (une appli)
javax.servlet.ServletContextListener
Quand on modifie les attributs du contexte
javax.servlet.ServletContextAttributeListener
A la création, la suppression, le timeout d'une session
javax.servlet.HttpSessionListener
A la création, modification, suppression d'un attribut de
session
javax.servlet.HttpSessionAttributeListener
84 CC by-nc-sa
Pourquoi des listeners ?
Pour une application Web
Pas de point d’entrée (main)
Pas d’exit()
Comment faire pour initialiser l’application ?
Pour une session
Possibilité de démarrer à plusieurs adresses (bookmarks,
recherche)
Comment initialiser la session ?
Pas de fin de session explicite.
Comment terminer la session ?
85 CC by-nc-sa
Les listeners du contexte
ServletContextListener
void contextDestroyed(ServletContextEvent sce)
Notification that the servlet context is about to be shut
down.
void contextInitialized(ServletContextEvent sce)
Notification that the web application is ready to process
requests.
ServletContextAttributeListener
void attributeAdded(ServletContextAttributeEvent scab)
Notification that a new attribute was added to the servlet
context.
void attributeRemoved(ServletContextAttributeEvent scab)
Notification that an existing attribute has been remved from the
servlet context.
void attributeReplaced(ServletContextAttributeEvent scab)
Notification that an attribute on the servlet context has been
replaced.
86 CC by-nc-sa
Les listeners de session
HttpSessionListener
void sessionCreated(HttpSessionEvent se)
Notification that a session was created.
void sessionDestroyed(HttpSessionEvent se)
Notification that a session was invalidated.
HttpSessionAttributeListener
void attributeAdded(HttpSessionBindingEvent se)
Notification that an attribute has been added to a session.
void attributeRemoved(HttpSessionBindingEvent se)
Notification that an attribute has been removed from a
session.
void attributeReplaced(HttpSessionBindingEvent se)
Notification that an attribute has been replaced in a session.
87 CC by-nc-sa
La déclaration d’un listener
web.xml
<listener>
<listener-class>
cours.exemple1.SessionCounter
</listener-class>
</listener>
Il n’est pas nécessaire de préciser le type du Listener (pourquoi ?)
Annotation @WebListener
88 CC by-nc-sa
Exemple
89 CC by-nc-sa
Un autre exemple
90 CC by-nc-sa
Exemple (Servlet 3.0) avec déclarations
91 CC by-nc-sa
Ecrire une application Web
Filtres
92 CC by-nc-sa
Les filtres
Un filtre est un morceau de code exécuté entre la requête
et le « endpoint »
Permettent de faire du pre et post-processing sur une
requête
Lire la requête, modifier la requête modifier la réponse,
retourner des erreurs au client
Même cycle de vie qu’un servlet
init / doFilter / destroy
93 CC by-nc-sa
Intérêt des filtres
Permettent d’étendre l’application sans changer les
servlets
Services transversaux en entrée et en sortie
En entrée
Log des appels
Sécurité
Contrôle des paramètres
En sortie
Post processing du flux (XSLT)
Compression (gzip)
Fonctionnent comme un pipe & filter
94 CC by-nc-sa
Coder un filtre
95 CC by-nc-sa
Exemple (généré par NetBeans)
96 CC by-nc-sa
PreProcessing
Affichage des paramètres
97 CC by-nc-sa
PotsProcessing
98 CC by-nc-sa
Le servlet filtré
99 CC by-nc-sa
L’exécution
Sur le serveur
100 CC by-nc-sa
Wrapping
Principe : encapsuler l’objet requête ou l’objet réponse
pour modifier son comportement
Encapsulation de request : surcharge
HttpServletRequestWrapper
Encapsulation de reponse : surcharge de
HttpServletRequestResponse
Ensuite il suffit de remplacer l’objet wrappé.
Le Wrapping peut aussi être utilisé dans des Servlets
normaux.
101 CC by-nc-sa
Le Wrapping des réponses
Plus compliqué que pour les requêtes
Nécessite de
récupérer la réponse d’abord
Ou d’écrire un Writer spécialisé
Utilisations classiques
Caching des réponses
Compression des réponses
102 CC by-nc-sa
Ecrire une application Web
Erreurs
103 CC by-nc-sa
La gestion des erreurs
Il est possible de définir les pages à afficher
En fonction d'erreurs http
En fonction d'exceptions java
Pour une
Dans web.xml exception java
<error-page>
<exception-type>
cours.event.EventException
</exception-type>
<location>/erreur.html</location>
</error-page>
Pour une erreur
Http
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
104 CC by-nc-sa
Codes HTTP
100 : Continue : Attente de la suite de la requête
200 : OK : Requête traitée avec succès
201 : Created : Requête traitée avec succès avec création d'un document
204 : No Content : Requête traitée avec succès mais pas d'information à
renvoyer
303 : See Other : La réponse à cette requête est ailleurs
400 : Bad Request : La syntaxe de la requête est erronée
401 : Unauthorized : Une authentification est nécessaire
403 : Forbidden : L'authentification est refusée
404 : Not Found : Document non trouvé
414 : Request-URI Too Long : URI trop longue
500 : Internal Server Error : Erreur interne du serveur
…
105 CC by-nc-sa
Ecrire une application Web
Sécurité
106 CC by-nc-sa
Servlet et sécurité (from servlet spec)
A web application contains resources that can be accessed
by many users.
These resources often traverse unprotected, open
networks such as the Internet.
In such an environment, a substantial number of web
applications will have security requirements.
Authentication
Access Control
Data Integrity
107 CC by-nc-sa
Sécurité
The Servlet Container support declarative security and
programmatic security.
Declarative : Security policies are declared in deployement
descriptor (web.xml) or as annotation
Programmatic security allow servlet developers to directly
interact with security API of the container.
Use it carefully (only if declarative security is not sufficient)
108 CC by-nc-sa
Declarative security
<security-constraint>
<web-resource-collection>
<web-resource-name>SalesInfo </web-resource-name>
<url-pattern>/salesinfo/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>manager</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL </transport-
guarantee>
</user-data-constraint>
</security-constraint>
109 CC by-nc-sa
Security constraints
110 CC by-nc-sa
Modèle de sécurité
Basé sur des rôles
Groupes d’utilisateurs
Accès aux servlet/méthodes
Ne fournit pas de gestion fine des droits d’accès aux donnés
Au déploiement, les rôles sont mappé sur des groupes
sun-applicaton.xml (glassfish)
<security-role-mapping>
<role-name>pouet</role-name>
<group-name>utilisateur</group-name>
</security-role-mapping>
111 CC by-nc-sa
Security model
112 CC by-nc-sa
Le rôle « pouet » est associé au groupe « pouet » déclaré sur glassfish,
pour l'application web MyHello
113 CC by-nc-sa
Gestion des utilisateurs (Tomcat)
Propre au container web
Tomcat :
De manière statique dans le $TOMCAT_HOME/conf/tomcat-
users.xml
<tomcat-users>
<role rolename="chat"/>
<role rolename="souris"/>
<user username="tom" password="miaou" roles="chat"/>
<user name="admin" password="pw" roles="chat,souris" />
</tomcat-users>
114 CC by-nc-sa
Gestion des utilisateurs
Définis dans un domaine
FileRealm
JDBCRealm
CustomRealm
LDAPRealm, ...
115 CC by-nc-sa
Déclarer les users dans le « runtime »
116 CC by-nc-sa
Authentication
A web client can authenticate a user to a web server using
one of the following mechanisms:
HTTP(S) Basic Authentication
HTTP Digest Authentication
HTTP(S) Client Authentication
Form Based Authentication
Programmatic Authentication
117 CC by-nc-sa
Authentication : Basic
Couple username / password
Définie par la spécification HTTP/1.0
Pas sécurisé
passwords envoyé en encoding base64
le serveur cible n’est pas authentifié
Requière HTTPS ou IPSEC/VPN pour assurer plus de sécurité
118 CC by-nc-sa
Security model
Contrainte
de sécurité
Authentication
« BASIC »
Déclaration
de rôle
119 CC by-nc-sa
Accès sécurisé à la servlet « World »
120 CC by-nc-sa
Authentication : Digest
<login-config>
<auth-method>DIGEST</auth-method>
<realm-name>Digest Authentication Example</realm-name>
</login-config>
122 CC by-nc-sa
David Geary
Nov 30, 2001
123 CC by-nc-sa
Authentication « form login »
Même problèmes que l’authentication BASIC
password transmis en clair
Stockage des password côté serveur
Gestion des utilisateurs par le container
Requière aussi HTTPS ou IPSEC/VPN pour assurer plus de
sécurité
124 CC by-nc-sa
Authentication « programmatique »
Methodes de l’interface HttpServletRequest (J EE 6) :
authenticate()
Demande au container d’effectuer l’authentification
login()
avec login/password
logout()
getRemoteUser()
Nom de l’utilisateur (null si personne)
isUserInRole()
getUserPrincipal()
Retourne le java.security.Principal correspondant à l’utilisateur
125 CC by-nc-sa
Sécurité et annotation (servlet 3)
Annotation sur une servlet OU une do-méthode (doGet,
doPut, doHead, …)
Déclaration des rôles
@DeclareRoles ("role1")
Rôles autorisés
@RolesAllowed("role1"), @RolesAllowed({"role1", "role2"})
Mode de transport (HTTPS ou HTTP)
@TransportProtected
Autorisation globale
@PermitAll, @DenyAll
126 CC by-nc-sa
Sécurité et annotation : exemple
@WebServlet("/myurl")
@RolesAllowed("javaee")
@TransportProtected
public class TestServlet extends HttpServlet {
...
@RolesAllowed("staff")
protected void doPost(HttpServletRequest req,
HttpServletResponse res)
throws IOException, ServletException {
...
}
@TransportProtected(false)
@PermitAll
protected void doTrace(HttpServletRequest req,
HttpServletResponse res)
throws IOException, ServletException {
...
}
}
127 CC by-nc-sa
Accès sécurisé à une méthode (Servlet 3)
@WebServlet("/myurl")
@RolesAllowed("javaee")
@TransportProtected
public class TestServlet extends HttpServlet {
...
@RolesAllowed("staff")
protected void doPost(HttpServletRequest req,
HttpServletResponse res)
throws IOException, ServletException {
...
}
@TransportProtected(false)@PermitAll
protected void doTrace(HttpServletRequest req,
HttpServletResponse res)
throws IOException, ServletException {
...
}
}
128 CC by-nc-sa
Conclusion Servlet
129 CC by-nc-sa
Conclusion
The servlet model is a component model
Servlet developpers have to conform to the model
(implements HttpServlet class)
The Servlet container offers:
Web application lifecycle management
Distributed container
Security management
Servlet composition (by dispatching)
Interception (through filters)
Session management facilities
130 CC by-nc-sa
What we have not seen
Distributed Servlet container over a cluster of computers
Asynchronous servlet (Servlet 3.0)
Web Fragment :
Make Web application by composition web application fragment...
131 CC by-nc-sa
Servlet limitations
Request/Response model can decrease maintainability...
The business logic of application are in servlets
HTML code or XHTML code is embedded in servlet...
Need an higher abstraction level
to leverage maintainability problems
To speed up coding stage (RAD, rapid application development)...
132 CC by-nc-sa