Table des matières

Langage JSP : PRINCIPES

Fortement imbriqué dans le code HTML, le langage JSP doit réaliser la partie dynamique d'un site web, c'est à dire :

Le code JSP est compris entre les balises <% et %>, il utilise la syntaxe du langage java (voir fiches correspondantes). Les fichiers auront l'extension .jsp et seront stockés sur le serveur. Ce dernier exécute le code correspondant lorsqu'il est sollicité par le serveur Web.

Une page JSP contient un certain nombre de balises qui seront détaillées plus loin. Notamment :

Comme les autres langages de script, JSP permet de manipuler un certain nombre d'objets prédéfinis :

Comme le langage Java, JSP est extrêmement sensible à la casse (Majuscule / minuscule)

LA DIRECTIVE @

En début d'un fichier JSP, il est intéressant de définir le comportement de la page ou d'incorporer des instructions récurrentes à partir d'un autre fichier (par exemple un entête, un script JavaScript…)

Comportement de la page : <%@ page …%>

Cette directive fournit de nombreuses et précieuses informations. Les options (voir un extrait dans le tableau ci-dessous) seront toutes comprises à l'intérieur de balises <%@ page …%>.

OPTION EXPLICATION EXEMPLE
import les paquetages java utilisés (certains le sont par défaut : java.lang.*, javax.servlet.*, javax.servlet.http.*, javax.servlet;jsp.*) import=“java.applet.*,java.io.*”
extends la classe qu'étend ce JSP extends HttpServlet
errorPage page d'erreur vers laquelle rediriger les exceptions non interceptées dans le code JSP errorpage=“CapteErreur.jsp
isErrorPage Indique si la page JSP est une page d'erreur (alors on peut utiliser l'objet exception sans le redéclarer) ou non IsErrorPage=false
(la valeur par défaut est false)
session Indique que la page permet la gestion des objets session ou non (la valeur par défaut est true, on peut donc créer des session et les utiliser sans avoir à déclarer un objet de la classe HttpSession) session = true
buffer Indique la taille de données mise en mémoire tampon avant de les envoyer vers l'objet ServletResponse. S'exprime en kilo octets (kb) buffer = 32 kb
(valeur par défaut 8kb)
autoFlush Indique si le buffer doit être automatiquement vidé lorsqu'il est plein ou si une exception doit être levée autoFlush = true
(valeur par défaut true)

Incorporation de fichier <%@ include …%>

Lorsque des éléments de programmation doivent apparaître dans plusieurs pages JSP, il est possible d'écrire ce morceau de code dans un fichier JSP et de l'introduire dans un autre par l'usage de la balise

<%@ include file="nomfichier" %>

Ce fichier peut contenir toute forme de texte, aussi bien du javaScript que de l'HTML ou du JSP.

Le code ainsi inclus est analysé par le serveur d'application, contrairement à l'action <jsp:include … > qui ne fait que recopier le texte.

LES ACTIONS

Elles consistent à faire réaliser à la page des actions de type inclusion de Bean, de fichiers, redirection de page…

QUAND CREER UNE PAGE JSP ?

//récupération de la valeur d'une information envoyée par la page appelante
           request.getParameter("txtnom")
//création d'une variable de session nom en fonction d'une donnée envoyée par la page appelante
         session.setAttribute("nom",request.getParameter("txtnom") )
//appel à une variable de session crée précédemment
                 session.getAttribute("mot de passe").toString()
//récupération de l'ensemble des valeurs envoyées par la page appelante
        Enumeration e = request.getParameterNames( );
//parcours des informations 
      while (e.hasMoreElements()) {
        //récupération du nom  du prochain élément 
        String name = (String)e.nextElement();
       //récupération de la valeur du paramètre connu sous son nom
        String value = request.getParameter(name);
 ……………
  } // fin de la boucle
//renvoi vers une autre page
           response.setRedirect("Pageerreur.jsp")
          <jsp:forward  page="Pageerreur.jsp" />

COMMENT ACCEDER AUX BASES DE DONNEES

L'accès aux bases dans des pages JSP se réalise au travers d'une connexion JDBC/ODBC. Un pilote ODBC doit avoir été créé préalablement. Pour utiliser les fonctionnalités base de données de JSP, il est nécessaire d'importer le package java.sql.*. Toute manipulation sur une base de données peut lever une exception qu'il est nécessaire d'encadrer dans un try {… accès aux bases…} catch (… ) {…}.

//définit le pilote odbc à utiliser
    String url = "jdbc:odbc:cnx_etud";
//vérifie l'existence d'une connexion préalable (facultatif)
   Connection cnxion = (Connection)application.getAttribute("dbconn");
   if (cnxion == null) {
       //charge les outils d'accès aux bases
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
     /établit la connexion au pilote ODBC/
      cnxion = DriverManager.getConnection(url, "", "");
     //établit que la connexion a eu lieu (facultatif)
      application.setAttribute("dbconn", cnxion);
//création du texte de la requête à partir d'une donnée fournie par la page appelante
String req = "Delete from employé where emp_nom='" 
req +=  request.getParameter("txtnom") +"'";
//création d'un objet Statement sur la connexion établie précédemment
Statement stmt = cnxion.createStatement( );
// exécution de la requête
stmt.executeQuery(req) ;
//création d'un objet Statement sur la connexion établie précédemment
Statement stmt = cnxion.createStatement( );
//exécution de la requête et récupération du résultat dans un objet ResultSet
ResultSet rs = stmt.executeQuery("Select * from employé") ;
//parcours du résultat
while (rs.next( ) ) {
    //accès à un champ par son nom
      rs.getString("emp_nom") ;
   //accès à un champ par son numéro (il faut commencer au numéro 1
    rs.getString(1) ;
} //fin de la boucle
//création d'un objet Statement sur la connexion établie précédemment
Statement stmt = cnxion.createStatement( );
//exécution de la requête et récupération du résultat dans un objet ResultSet
ResultSet rs = stmt.executeQuery("Select * from employé") ;
//récupération de la structure correspondant à la requête
ResultSetMetaData rsmd = rs.getMetaData( ) ;
//calcul du nombre de colonnes 
int nbCols = rsmd.getColumnCount();
// parcours du ResultSetMetaData
<% for (int i=1; i<=nbCols ;i++) { 
         //accès au nom de la colonne i
           rsmd.getColumnName(i)
       }//fin de la boucle

REUTILISATION AVEC JSP

Fonctionnement très pratique du langage, il offre deux possibilités pour réutiliser du code JSP ou JAVA écrit par ailleurs ou produit dans l'intention de s'en resservir.

//permet de réutiliser le code contenu dans une autre page
           <jsp:include  page="PageFonctions.jsp" />
//déclaration d'une instance d'un Bean
// id est le nom de l'instance, class donne le nom de la classe utilisée, scope décrit la portée du Bean…
   <jsp:useBean  id="unCompte"   class="packageGesCompte.Compte scope="session" />