• Aucun résultat trouvé

Les servlets

N/A
N/A
Protected

Academic year: 2022

Partager "Les servlets"

Copied!
18
0
0

Texte intégral

(1)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 1

Les servlets

et les conteneurs de servlets Tomcat

Répartition d'une application

Données Système d'exploitation

Conteneur EJB

Données Système d'exploitation Application de

Présentation

Données Système d'exploitation Application de

Données Middleware Implicite

J2EE

Middleware Explicite

•rmi

Middleware Système

•SGFdistribué

Conteneur de traitement Conteneur de

présentation

(2)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 3

Les servlets

Qu'est ce qu'une servlet

• Une servlet est un programme Java utilisé pour étendre les fonctionnalités d'un serveur Web

• C'est :

– Une application côté serveur

– Utilisée pour générer du contenu dynamique – Chargée dynamiquement quand elle est demandée

• Elle est exécutée dans le cadre d'un conteneur qui

en pilote son cycle de vie et son contexte

(3)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 5

Le modèle d'exécution

Get /servlet/toto.Hello http/1.1

content-type: text/html

<html>

coucou

</html>

Conteneur de servlet Tomcat

Jserv Jetty

toto.Hello doGet(HttpServletRequest, HttpServletResponse);

out

...out.print("<html>");

out.print("coucou");

...

(4)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 7

Ecrire le code de la méthode service ?

Cycle de vie de la Servlet

Classe de la servlet

Instanciation et Chargement

?

Initialisation

?

?

Active Requêtes client

Destruction

? Garbage

Collection

?

(5)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 9

Cycle de vie

public void init(ServletConfig config) throws ServletException;

Appelée une seule fois à l'initialisation de la servlet, l'objet config doit être conservé. Classiquement il est passé à l'init de la classe parent (super.init(config))

public void service(req,res) throws ServletException, IOException;

La requête du client préparée par le conteneur

L'objet de réponse qui contiendra la réponse au client. Intérêt ?

Cette méthode est rarement implanté, car les classes concrètes de Servlet le font pour vous (cf. HttpServlet)

public void destroy();

Invoquée par le conteneur quand la servlet est détruite.

La servlet de base !

import javax.servlet.GenericServlet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import java.io.IOException;

public class MaServlet extends GenericServlet {

public void init(ServletConfig config) throws ServletException{

super.init(config);

}

public void service (ServletRequest req, ServletResponse res) throws ServletException, IOException{

res.setContentType("text/html");

PrintWriter out=res.getWriter();

out.println("<html>");

out.println("<head><title>Salut le monde</title></head>");

out.println("<body><h1>Bonjour le monde</h1></body>");

out.println("<html>");

} }

(6)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 11

La servlet Http

...

public class MaServlet extends HttpServlet {

public void init(ServletConfig config) throws ServletException {super.init (config);

}

public void doGet(HttpServletRequest req, HttpServletResponse res){

this.doPost(req, res);

}

public void doPost(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{

res.setContentType("text/html");

PrintWriter out=res.getWriter();

out.println("<html>");

out.println("<head><title>Salut le monde</title></head>");

out.println("<body><h1>Bonjour le monde</h1>");

out.println("de "+req.getRemoteAddr()+"</body>");

out.println("<html>");

out.close();

} }

Communication entre servlets

• Les servlets peuvent s'échanger des informations par une

« mémoire partagée »

– La ServletContext

• C'est un espace commun partagé dans une webapp

• Les méthodes

void setAttribute(String name, Object obj);

Object getAttribute(String name);

void removeAttribute(String name);

Enumeration getAttributeNames();

(7)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 13

Récupération des paramètres http

• Pour récupérer les paramètres (QUERY_STRING, POST) d ’une requête – HttpServletRequest véhicule les informations nécessaires

String getParameter(String name, Object obj);

String[] getParameterValues(String name);

Enumeration getParameterNames();

Les servlets conclusion

• Objets programmés en java

• Gérés par un conteneur

• Travaillent sur des flux (out)

• Sur des objets Request, Response

==> Pour simplifier le rôle du développeur il

existe les jsp.

(8)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 15

Les Jsp

Java Server Pages

JSP : Java Server Pages

• Technologie définie pour aider à l'écriture de pages Web

• Elle

– génère une page vers le client

– est portable (Write Once, Run EveryWhere) – mets en avant l'approche par composants

– permet la mise en œuvre facile des sites dynamiques

• Equivalents : ASP, PHP

(9)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 17

La JSP de base !

<html><body>

<H1>Information sur la requête</H1>

<% out.println("Hello Monde"); %>

</body></html>

Page JSP

http://localhost/test/hello.jsp

Génération d'une servlet .java

Servlet Compilée .class

réponse

Les éléments jsp

• Les directives

<%@ <directive> {attribute="value"} %>

ex : <%@ page import="java.util.*" %>

• Le code

– Les déclarations

<%! <declaration> %>

ex : <%! String name=new String("Bob"); /* Code static */

– Les expressions

<%= <expression> %>

ex : <%= getName() %> /* pas de ; */

– Les scriptlets

<% <source de la scriptlet> %>

ex : <% out.println("Hello Bob"); %> /* Code d'exécution */

(10)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 19

Les directives page, include et taglib

<%@ page {attribut="valeur » %>

Les attributs possibles :

language="scripting language" /*Seul java est supporté pour l'instant*/

extends="className" /* Non recommandé pour des questions d'optim.*/

import="importList" /* Liste des importations */

session="true|false" /* Maintient des attributs de session */

buffer="none|size in kb" /* Bufferisation du flux de sortie (out) (8kb)*/

autoflush="true|false"

isThreadSafe="true|false" /* L'applet peut être concurrente */

info="text" /* Information fourni à la méthode Servlet.getServletInfo() */

errorPage="error_url" /* Page jsp qui gère toutes les exceptions */

isErrorPage="true|false" /* Indique si la page est utilisé pour les erreurs */

contentType="ctinfo" /* type MIME et Character set de la réponse */

<%@ include file="header.jsp" %> /* La ressource n'est insérée qu'une fois */

<%@ taglib uri="http://localhost/taglibs/menu" prefix="rand" %> /* Permet d'avoir des tags : <rand:hello> </rand:hello> */

Utilisation des pages d'erreur

<html>

<%@ page isErrorPage="true" %>

Erreur : <%= exception.getMessage() %> est apparue

</body></html>

<html>

<%@ page errorPage="error.jsp" %>

<%

if (true){

throw new Exception("Cette page est en faute");

}

%>

error.jsp

(11)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 21

Les objets implicites

out : représente un jspWriter (extends java.io.Writer, aka print, println) out.println("<center> coucou </center>");

request : représente la requête (javax.servlet.http.HttpServletRequest) out.println("<center> coucou » request.getParameter("Name")+"</center>");

==> http://localhost/coucou.jsp?Name=sfr

response : représente la réponse (javax.servlet.http.HttpServletResponse)

pageContext : représente le contexte d'une page spécifique (setAttribute, getAttribute)

session : représente la session (javax.servlet.http.HttpSession)(Session = context pour un

utilisateur). Elle a la durée de vie de la connexion tcp.

application : représente le contexte global, vu précédemment (javax.servlet.ServletContext)

config : référence sur un ServletConfig, qui contient les informations de conf sur le moteur de

servlet (qui contient l'application web de la page jsp)

page : la page représente la jsp courante (équivalent à this)

exception : objet exception uniquement disponible si la page se déclare comme étant

isErrorPage

Les actions jsp standard

• Les actions jsp sont des tags qui réalisent une tâche standard.

– Les actions sur les bean (un bean est un composant)

• useBean, setProperty, getProperty

– Les autres actions

(12)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 23

<jsp:useBean>

<jsp:useBean id="unCalcul" scope="page" class="exos.Calcul" />

<jsp:useBean id="name" scope="page|request|session|application"

class="className">

text

</jsp:useBean>

• page : la référence a la durée de vie de la page

• request : dans la chaîne de requête (forward request)

• session : durée de vie de la session (connexion tcp keep-alive)

• application : durée de vie de la webapp (arrêt du conteneur)

<jsp:setProperty>, <jsp:getProperty>

<jsp:setProperty name="beanName" property="propName" value="propValue">

<jsp:setProperty name="beanName" property="propName" param="paramName">

<jsp:getProperty name="beanName" property="propName">

package exemple;

public class Compteur{

int compteur=0;

public int getCompteur(){

return(compteur++);

}

public void setCompteur(int cptr){

this.compteur=cptr;

} }

<html><body>

<jsp:useBean id="unCompteur"

scope="session"

class="exemple.Compteur"

/>

<% out.println("Compteur depuis une scriptlet :"+

unCompteur.getCompteur()+"<BR>");

%>

Compteur depuis une propriété : <jsp:getProperty name="unCompteur"

property="compteur" /><br>

</body></html>

(13)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 25

<jsp:param>

<jsp:param name="name" value="value">

Permet de passer un paramètre pour les autres actions standard : (include, forward, plugin)

<jsp:include page="urlSpec" flush="true">

<jsp:param name="user" value="sfrenot">

/* remarque : la directive, est évaluée une seule fois à la création de la servlet. L'action est évaluée à chaque requête */

<html><body>

<jsp:include page="header.jsp"

flush="true">

<jsp:param name="user »

value='<%= request.getParameter("user"); %>' />

</jsp:include>

</body></html>

<jsp:forward>

• Délégation de l'exécution vers une autre page.

L'exécution de l'appelant s'arrête immédiatement

<html><body>

<%

if((request.getParameter("role")).equals("manager")){

%> <jsp:forward page="management.jsp" /> <%

}else{

%> <jsp:forward page="welcome.jsp">

<jsp:param name="user" value='<%=request.getParameter("user") %>'/>

</jsp:forward>

<%

} %>

</body></html>

(14)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 27

<jsp:plugin>

• Insertion de code d'applet / activeX.

<jsp:plugin type=« pluginType » code=« classFile »

codeBase=« relativeURLPath » <jsp:params>

<jsp:param…/>

<jsp:params>

</jsp:plugin>

L'utilisation d'un EJB

<html><head><title> <%= pagetitle %> </title></head>

<h2><font color=#DB1260><%= pagetitle %></font></h2>

<%@ page import="edt.matiere.*"%>

<%!String pagetitle = "JSP : Fibonnacci";%>

<%try {

ctx = getInitialContext();

homeFib = (FibonnacciHome) ctx.lookup("fibonnaci");

uneSuite=homeFib.create();

out.println("fib(7)="+uneSuite.getFibonacciNumber(7));

}catch(Exception e){

e.printStackTrace();

}

%>

</body></html>

(15)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 29

Conteneur de déploiement

Architecture du conteneur tomcat http://jakarta.apache.org/tomcat

• Le conteneur présente l'arborescence suivante :

– conf – lib – bin – webapps – work – common – server – temp – shared

Toto.war déploiement

http://localhost/Toto/

(16)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 31

Architecture d'une webapplication

• Comme pour les ejb, une application web peut être pacagée dans une archive (war)

• Une webapplication peut être vue comme un site web, complet et autonome.

• Un exemple de webapp (notion de context)

./examples/WEB-INF/classes/HelloWorldExample.class ./examples/WEB-INF/web.xml

./examples/images/code.gif ./examples/jsp/cal/cal1.jsp ./examples/servlets/cookies.html ./examples/servlets/helloworld.html

==> http://localhost/examples/HelloWordExample

Struts

(17)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 33

Struts

• "Mastering jakarta Struts", James Goodwill

• Il est possible de faire des application complètes, structurées et rapide en servlet

• Le système repose sur un modèle mvc (modèle/vue/contrôleur)

• Fabrication automatique de l'ensemble des servlets de traitement/présentation pour une application

• Apports de tags spécifique (librairie taglib)

• Ensemble de classes java qui permettent de coder en java le comportement de formulaires de saisie

(org.apache.struts.action.ActionForm)

• Ensemble de classes java qui permettent la redirection vers une page jsp en fonction des différentes valeurs d'un formulaire

Struts

ActionServlet (Contrôleur) Vue 1

Vue 1

Action1

Action2

Action3

Action4

modèle

(18)

Stéphane Frénot -MID - V.0.0.1 II - Jsp 35

Mais il faudrait un cours entier...

Répartition d'une application

Données Système d'exploitation

Conteneur EJB

Données Système d'exploitation

Moteur de servlets

Données Système d'exploitation Application de

Données Middleware Implicite

J2EE

Middleware Explicite

•rmi

Middleware Système

•SGFdistribué

Conteneur de traitement Conteneur de

présentation

Références

Documents relatifs

• Pour exécuter des servlets, il faut un moteur de servlets dans le serveur Web.. • Ces moteurs sont des plug-in pour des serveurs

  Des pages HTML avec du code JScript ou VBScript pour accéder aux composants DCOM côté serveur.. INF347 - Java côté serveur-V3.0

Allez ensuite dans le menu NIOS II/Quartus II Programmer, sélectionner le fichier DE2_Web_Server_time_limited.sof et cliquez sur le bouton Start. Ne pas déconnecter la liaison

 Du code est exécuté coté serveur pour générer de manière dynamique la page HTML qui sera envoyée au client..  On va s'intéresser à ce type d'exécution dans

La Java Servlet Specification Version 2.3 définit une méthodes uniforme pour installer des servlets dans un serveur Java. Voici brièvement la logique pour le

− Un pré processeur logique de gestion des servlets (sous forme d’un service Internet) destinée à connecter au service HTTPD permettant de générer les documents HTML

Or cette configuration manuelle peut être fastidieuse pour un nombre important de périphériques car pour chaque machine il faut entrer manuellement l'adresse IPv4, le masque

9 Utiliser toujours la méthode HTTP GET pour récupérer une information et pas la méthode