-
Cours de 2e année ingénieur
Spécialisation « Génie Informatique »
• Une servlet est une application Java qui permet de créer dynamiquement des données au sein d'un serveur HTTP. Ces données sont le plus généralement présentées au format HTML, mais elles peuvent également l'être au format XML ou tout autre format destiné aux navigateurs web.
• Une servlet s'exécute dynamiquement sur le serveur web et permet l'extension des fonctions de ce dernier. Typiquement : accès à des bases de données, transactions d'e-commerce, etc. Une servlet peut être chargée automatiquement lors du démarrage du serveur web ou lors de la première requête du client. Une fois chargées, les servlets restent actives dans l'attente d'autres requêtes du client.
• Un servlet est un objet qui peut être manipulé par le conteneur via l’interface suivante:
«interface» Servlet |
void destroy() ServletConfig getServletConfig() String getServletInfo() void init(ServletConfig) void service(ServletRequest, ServletResponse) |
• Lorsque le conteneur reçoit une requête, il la transmet au servlet qui correspondàl’URL pour que la requête soit traitée effectivement
Cycle de vie d’un servlet
1. Chargement de la classe
2. Instanciation du servlet
• constructeur par défaut
3. Appel de init()
4. Appel(s) de service()
• 1 thread par requête
5. Appel de destroy()
• Lors de la réception d’une requête, le conteneur crée:
– un objet ServletRequest (la requête), et
– un objet ServletResponse (la réponse) • Le conteneur appelle ensuite la méthode service() avec ces deux objets en paramètres pour permettre au servlet de répondre à la requête du client.
• Deux méthodes principales: GET et POST
GET
Utilisateur Client Serveur
GET ou POST
Utilisateur Client Serveur GenericServlet
Servlets HTTP void destroy()
String getInitParameter(String)
Enumeration getInitParameterNames()
ServletConfig getServletConfig()
«interface» ServletContext getServletContext()
Servlet String getServletInfo()
String getServletName()
void destroy() void init()
ServletConfig getServletConfig() void init(ServletConfig)
String getServletInfo() void log(String) void init(ServletConfig) void log(String, Throwable)
void service(ServletRequest, voidservice(ServletRequest, ServletResponse) ServletResponse)
HttpServletMyServlet # void doDelete(HttpServletRequest, HttpServletResponse)
# void doGet(HttpServletRequest, HttpServletResponse)
void doGet (HttpServletRequest, # void doHead(HttpServletRequest, HttpServletResponse)
HttpServletResponse) # void doOptions(HttpServletRequest, HttpServletResponse)
void doPost(HttpServletRequest, # void doPost(HttpServletRequest, HttpServletResponse)
HttpServletResponse) # void doPut(HttpServletRequest, HttpServletResponse)
void doWhatYouWant() # void doTrace(HttpServletRequest, HttpServletResponse)
# long getLastModified(HttpServletRequest)
# void service(HttpServletRequest, HttpServletResponse) void service(ServletRequest, ServletResponse)
«interface»
ServletRequest
Object getAttribute(String) int getContentLength()
ServletInputStream getInputStream()
int getLocalPort()
String getParameter(String)
Enumeration getParameterNames()
String[] getParameterValues(String)
// Other methods not listed here…
HttpServletResponse | |
void addCookie(Cookie cookie) void addHeader(String, String) String encodeRedirectURL(String) void sendError(int, String) void setStatus(int) // Other methods not listed here… | 8 |
HttpServletRequest
String getContextPath()
Cookie[] getCookies()
String getHeader(String)
String getMethod()
String getQueryString()
HttpSession getSession()
// Other methods not listed here…
(1/8)
Lors de la création d’un projet JEE, on a deux grandes phases :
• La phase de développement qui s’effectue la plupart du temps en local, dans un dossier permettant de compiler et tester les sources Java, les fichiers HTML, les CSS, …
• La phase de déploiement qui exporte le site local sur un serveur JEE afin de le tester.
Ø Ainsi, lors de la création d’une servlet, on commencera par créer un dossier de projet, avec un dossier src contenant les sources des servlets que l’on compilera dans un dossier build/classes (comme nous faisions dans les cours de Java ING1).
Ø C’est dans un second temps, que nous déploierons notre projet sur le serveur Tomcat.
Ø L’utilisation d’un outil de contruction de projets Java, tels que Ant ou Maven, est classique durant ces phases.
(2/8)
• Ecrire un servlet et le mettre dans src (ici ) HttpServletResponse response) redéfinit doGet() throws IOException{ de HttpServlet PrintWriter out= response.getWriter(); today=new (); String docType= "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "+ "Transitional//EN\">\n"; out.println(docType); out.println("<html>"); out.println("<head>\n<title>Clock</title>\n</head>"); Code HTML out.println("<body>\n"+ incorporé"<h1>Time on server</h1>\n"+ dans Java "<p>"+ today+ "</p>\n"+ "</body>"); out.println("</html>"); } } (3/8) • Créer un dossier WEB-INF et y placer le fichier de configuration <?xml version="1.0" encoding="ISO-8859-1"?> <web-app version="2.4" xmlns="; xmlns:xsi="; xsi:schemaLocation=" "> <servlet> <servlet-name>The Clock</servlet-name> <servlet-class> Clock</servlet-class> <servlet-name> permet de lier </servlet> classe Java <servlet> et <servlet-mapping> <servlet-mapping> <servlet-name>The Clock</servlet-name> <url-pattern> /Serv1</url-pattern> </servlet-mapping> nom utilisé par le client </web-app>dans sa requête (4/8) • A partir du répertoire de projet, compiler le servlet et placez-le dans le répertoire build/classes % cd AREL % javac –classpath –d classes (5/8)(6/8) • Démarrer Tomcat % cd tomcat % ou bien lancer le Monitor si vous êtes sous Windows en 8 (7/8)
|