|
Cadre Fonctionnel |
Développement de JSP et présentation de données |
|
Cadre Technique |
NT/WebLogic 6.0 |
|
Identifiant |
SYS_JSP_01 |
|
Référent technique |
|
|
Version |
1.0 |
|
Auteur |
Alexandre Brillant |
|
Date |
09/10 |
| Source |
Documentation WebLogic 6 |
La conception de JSP (Java Server
Pages) sert à :
Son principale inconvénient est
la difficulté de mise à jour de la présentation
à travers un éditeur HTML et la tendance à faire
trop de traitement complexe Java.
Exemple de JSP insérant
respectivement ver4.html et ver3.html pour un
navigateur de version 4 et un navigateur de version 3 :
<%@page language= "java" info= "Test"%>
<html>
<body>
<! String agent ; %>
<% agent = request.getHeader(
"User-Agent" ) ;
if (
agent.startsWith("Mozilla/4.0" ) { %>
<%-- Page pour Netscape 4 --%>
<%@include file= "ver4.html"%>
<% } else { %>
<%@include file="ver3.html"%>
<% } %>
</body>
</html>
|
Lorsque le serveur d'application reçoit
une requête pour cette page JSP, il effectue un premier
traitement de conversion du JSP en un code de servlet qu'il compile.
Cette opération est aussi effectuée sur une mise à
jour de la page JSP. On peut également compiler avant tout
accès à la JSP (JSP 1.1).
Tous les tags JSP sont sous la forme <%
Tag JSP %>. Il existe 4 déclinaisons pour ce format :
Exemple pour chaque catégorie
:
Directive : <%@ page language="java" imports="java.util.*" %>
Déclaration : <% String agent; %>
Scriplet : <% if ( true { %> OK <% } %>
Expression : <%= agent %>
Listes des directives accessibles depuis 1.1
|
language="java" |
|
|
extends="une classe" |
Classe parent de la servlet générée |
|
import="packaque1,package2…" |
Liste de classe ou de package à inclure |
|
session="true|false" |
Si true (par défaut), alors la page peut accéder aux données de la session |
|
buffer="none|8kb|sizeKb" |
Tampon pour le flot de sortie |
|
autoFlush="true|false" |
Vide le tampon de sortie lorsqu'il est plein |
|
isThreadSafe="true|false" |
Si true alors plusieurs utilisateurs peuvent accéder à la page en même temps. Les accès uniques sur une ressource peuvent se faire à l'aide du mot clé synchronized. |
|
info="text" |
|
|
errorPage="pathToErrorPage" |
Chemin relatif vers la page JSP traitant les requêtes |
|
isErrorPage="true|false" |
Définit le type de page |
|
contentType="text/html;charset=ISO-8859-1" |
En début de fichier |
|
import |
Insertion d'une autre page. Cela peut être employé pour toutes les parties communes de pages |
|
taglib |
Localisation du descripteur XML des composants JavaBean associés à des tags. |
Listes des objets accessibles depuis
une scriplet
|
request |
classe dérivée de la classe HttpServletRequest |
|
response |
classe dérivée de la classe HttpServletResponse |
|
pageContext |
forme de factory permettant l'obtention de la plupart des objets de cette liste |
|
session |
Session HTTP liée à la requête, cet objet peut contenir un nombre non défini d'objets pour un utilisateur donné, ces objets seront par défaut supprimés après expiration au bout de 30 minutes. Pour des raisons de performances, il faut limiter le nombre d'objet en mémoire |
|
application |
Contexte de la servlet |
|
out |
Flot de sortie |
|
config |
Objet de type ServletConfig |
|
page |
Correspondant à la servlet courante |
|
exception |
Exception non interceptée |
Chaînage
JSP-Servlet / JSP-JSP
Le tag jsp:forward permet
d'appeler une autre JSP ou une servlet tout en conservant le contexte
courant (session, paramètres,…).
La méthode la plus simple est
l'utilisation du tag jsp:forward. Par exemple <jsp:forward
page="page1.jsp"/>. Ce tag peut recevoir des
paramètres simulant des champs HTML avec la syntaxe <jsp:param
name="Un paramètre" value="Une valeur"/>.
Exemple de chaînage avec
passage de paramètres :
<jsp:forward
page="/test.jsp">
<jsp:param
name="param1" value="value1"/>
</jsp:forward>
Un autre intérêt est le
passage d'un composant JavaBean vers une servlet pour un
enrichissement de contenu et le retour vers une JSP pour la
présentation.
Exemple de chaînage
JSP-Servlet avec un composant java bean :
1. Création d'un JSP JSP1.jsp
et d'un composant JavaBean bean avec chaînage sur la
servlet servletTest
<jsp:useBean id="bean"
class="com.airial.tool.DataBean" scope="request"/>
<jsp:setProperty name="bean"
property="*"/>
<jsp:forward
page="/servlet/ServletTest"/>
2. Réception dans la servlet
ServletTest de la requête, modification du composant
JavaBean et chaînage sur un JSP JSP2.jsp
public void doPost(
HttpServletRequest request, HttpServletResponse response ) {
try {
DataBean db =
(DataBean)request.getAttribute( "bean");
db.setData( "Data1" );
getServletConfig().getServletContext().getRequestDispatcher(
"/jsp/JSP2.jsp" );
} catch( Exception exc ) { …
}
}
|
<html> <body> <jsp:useBean id="bean" class="com.airial.tool.DataBean" scope="request"/> <jsp:getProperty name="bean" property="data"/> </body> </html> |
l'application.
Syntaxe JSP tag :
|
Déclaration |
<jsp:bean id="Un identifiant" scope="application" class="classe Java Bean"/> |
|
Affectation d'une propriété |
<jsp:setProperty name="Nom du composant" property="Nom de la propriété" value="Valeur"> |
|
Lecture d'une propriété |
<jsp:getProperty name="Nom du composant" property="Nom de la propriété"> |
Exemple complet JSP tag :
<%@page language="java"%> <html> <body> <jsp:useBean id="currentDate" scope="application" class="com.airial.tool.DateBean"/> <jsp:setProperty name="currentDate" property="Format" value="dd/MM/yyyy"/> La date courante est : <jsp:getProperty name="currentDate" property="Date"/> </body> </html> |
La classe associée doit hériter
de javax.servlet.jsp.tagext.TagSupport avec deux fonctions
principales : doStartTag et doEndTag. L'objet
javax.servlet.jsp.tagext.PageContext permet d'accéder
à tous les objets courants (session, flux de sortie…).
Exemple d'utilisation de TagLib :
<%@language="java"%> <%@taglib url="testTag.tld" prefix="tag"%> <html> <body> <tag:test color="#ff0000 "/> </body> </html> |
<?xml version="1.0"
encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>Test de
TagLib</shortname>
<info>
This tag library contains several tag extensions
useful for formatting content for HTML.
</info>
<tag>
<name>test</name>
<tagclass>com.airial.TestTag</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>color</name>
</attribute>
</tag>
</taglib>
|
Remarque : Le tag bodycontent
n'est pas obligatoire et peut contenir les valeurs tagdependent,
JSP ou empty respectivement pour indiquer un tag contenant pas de
tag JSP, un tag contenant des tag JSP et un tag vide.
Composant TestTag. La propriété
Color est utilisée dans la méthode doStartTag
package com.airial;
import java.io.*;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
/**
* Describe class
<code>TestTag</code> here.
*
* @author "Alexandre
Brillant" <brillant@hexadev.com>
* @version 1.0
* @since 1.0
* @see TagSupport */
public class TestTag extends TagSupport {
private String color = null;
public void setColor( String color ) {
this.color = color;
}
public int doStartTag() throws JspException {
try {
if ( color != null )
pageContext.getOut().println( "<font color=\"" +
color + "\">" );
pageContext.getOut().println( "TAG OK" );
if ( color != null )
pageContext.getOut().println( "</font>" );
} catch( IOException exc ) {}
return SKIP_BODY;
}
}
|
Remarques : Les tagLib ne fonctionnent pas avec WebLogic 6 si le descripteur de librairie n'est pas nommé taglib.tld. D'autre part, il est obligatoire d'utiliser des packages même pour une exploitation sous forme de jar.
Déploiement des tagLibs : La méthode la plus simple pour exploiter un taglib est la création d'un jar. Ce jar sera déposé dans le répertoire WEB-INF/lib du répertoire d'accès.
Le jar (par exemple testTag.jar)
contient :
Il faut notifier l'exploitation du jar
dans le fichier WEB-INF/web.xml. L'uri déclaré dans la
page HTML se rapporte à l'uri déclaré dans ce
fichier.
Exemple de conception du fichier
web.xml pour l'exemple précédent :
<?xml version="1.0"
?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 1.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<taglib>
<taglib-uri>testTag.tld</taglib-uri>
<taglib-location>
/WEB-INF/lib/testTag.jar
</taglib-location>
</taglib>
</web-app>
|
Le mécanisme le plus simple est l'utilisation du tag include pour incorporer des parties de pages communes.
Exemple de construction d'une page :<%@ page language="java"%> <html><body> <%@include file="header.html"%> <%@include file="body.html"%> </body></html> |
Exemple de construction d'un template template.jsp :
<%@page language="java"%> <%@taglib uri='template.tld' prefix='template'%> <html> <body> <template:get name='title'/> <template:get name='header'/> <template:get name='content'/> </body> </html> |
Appel d'un JSP à partir d'une
servlet
Exemple d'appel d'un JSP
dataView1.jsp
public void doGet( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// Récupération et traitement des données
…
// Stockage dans la session
…
// Transmission à un JSP
RequestDispatcher rd = getServletContext().getRequestDispatcher( « /jsp/dataView1.jsp ») ;
rd.forward( req, res ) ;
…
}
|