
La FAQ Java EEConsultez toutes les FAQ
Nombre d'auteurs : 27, nombre de questions : 83, dernière mise à jour : 26 avril 2013
Sommaire→JSP→Généralités- Comment utiliser les EL (Expression Language) dans une page JSP ?
- Comment récupérer le code HTML généré par une page JSP ?
- Comment mettre un header et un footer a chaque jsp ?
- Comment afficher tous les paramêtres d'une requete ?
- Comment afficher tous les attributs du scope request ?
- Créer sa propre page d'erreur ?
- Comment appliquer ma page d'erreur à toutes mes pages JSP ?
- Que sont les objets implicites ?
Cela dépend de la version de J2EE que vous utilisez :
Avec J2EE 1.4, les EL sont directement intégré dans le moteur JSP 2.0. Toutefois l'application doit obligatoirement être déclaré comme une application Servlet 2.4 au minimum :
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
Si ce n'est pas le cas les EL seront désactivées afin de ne pas compromettre le fonctionnement d'application J2EE postérieur.
Il est toujours possible de désactiver les EL sur une page particulière en utilisant la directive page :
<%@ page isELIgnored="false" %>
Il est également possible d'utiliser les EL avec une version antérieur de J2EE, mais dans ce cas ce n'est pas le moteur JSP qui traitera les EL mais une librairie de tag compatible. Ainsi on peut utiliser la JSTL 1.0 ou Struts-EL qui intègre une gestion des EL. Attention toutefois, ces librairies ne sont pas concus pour être utilisées dans une application J2EE 1.4. Dans ce cas il faut utiliser une version sans EL afin de les laisser au moteur JSP 2.0 (respectivement JSTL 1.1 et Struts).
Il faut commencer par récupérer un RequestDispatcher qui va servir de wrapper pour la ressource (le fichier JSP en l'occurence). Pour récupérer ce dispatcher, il faut passer le contexte de la servlet :
RequestDispatcher rd = servletContext.getRequestDispatcher(jsp);
Ensuite, il faut configurer la requête. Pour cela, c'est simple, il faut simplement passer les attributs nécessaires à la page avec la méthode setAttributes.
Après cela, il faut configurer l'objet response. Ici, on est obligé de créer notre propre classe de réponse pour pouvoir écrire dans un String :
public class FictiveHttpServletResponse extends HttpServletResponseWrapper {
private StringWriter replacementWriter;
public FictiveHttpServletResponse(HttpServletResponse response) {
super(response);
replacementWriter = new StringWriter();
}
public PrintWriter getWriter() throws IOException {
return new PrintWriter(replacementWriter);
}
public String toString() {
return replacementWriter.toString();
}
}
Ensuite, on peut récupérer le contenu de la page :
HttpServletResponse newResponse = new FictiveHttpServletResponse((HttpServletResponse) response);
rd.forward(request, newResponse);
String monMessage = newResponse.toString();
Avec ça, la variable monMessage contiendra le contenu HTML généré par la page JSP.
(si on est en jsp 2.0 (tomcat 5.0 par exemple))
dans web.xml
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<include-prelude>/includes/header.jsp</include-prelude>
<include-coda>/includes/footer.jsp</include-coda>
</jsp-property-group>
</jsp-config>
Enumeration en = request.getParameterNames();
while (en.hasMoreElements()) {
String pName = (String) en.nextElement();
log.debug(pName + "=" + request.getParameter(pName)); //
System.out.println(pName + "=" + request.getParameter(pName));
}
java.util.Enumeration en= request.getAttributeNames();
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
if(request.getAttribute(name) == null) {
log.debug(name + "=NULL");
} else {
log.debug(name + "=" + request.getAttribute(name).toString());
}
}
Voici la page d'erreur que l'on utilise. Elle n'est utile qu'en phase de développement.
Mais elle permet de determiner rapidement les problèmes qui peuvent surgir.
<%@ page language="java" isErrorPage="true" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Page d'erreur</title>
</head>
<body bgcolor="#FFFFFF">
<div>Une erreur s'est produite !</div>
<h1>Attribut de requete</h1>
<div class="requestAttributs">
<%
java.util.Enumeration en = request.getAttributeNames();
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
if(request.getAttribute(name) == null) {
%>
<div>
<%=name%>=null
</div>
<%
} else {
%>
<div>
<%=name%>=<%=request.getAttribute(name).toString()%>
</div>
<%
}
}
%>
</div>
<div class="requestParameters">
<%
en=request.getParameterNames();
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
if(request.getParameter(name) == null) {
%>
<div>
<%=name%>=null
</div>
<%
} else {
%>
<div>
<%=name%>=<%=request.getParameter(name).toString()%>
</div>
<%
}
}
%>
</div>
<h1>Exception</h1>
<div>
<%
Throwable th = pageContext.getException();
if(th != null) {
printRecursiveException(out,th);
}
%>
</div>
<%! public void printRecursiveException(JspWriter out, Throwable th) throws java.io.IOException {
out.println("<div>" + th.getClass().getName() + ":" + th.getMessage() + "</div>");
StackTraceElement ste;
for(int x=0;x < th.getStackTrace().length;x++) {
out.println("<div>" + th.getStackTrace()[x].toString() + "</div>");
}
Throwable parent = th.getCause();
if(parent != null) {
out.println("<div class=\"parentCause\">");
printRecursiveException(out,parent);
out.println("</div>");
}
}
%>
</body>
</html>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
Note: L'insertion doit se faire entre session-config et ressource-ref mais je ne suis pas sur que çà soit le session-config et ressource-ref qui entoure directement cette balise.
Des objets sont dit implicites car il ne nous est pas nécessaire de les déclarer ou de les initialiser
Les objest le plus souvent utilisés sont:
- request : lorsqu'un navigateur envoie une requête vers le serveur, il est possible que celui-ci envoie un certain nombre de paramètres.
Il existe deux sortes de paramètres :- Les paramètres se trouvant dans l'URL comme par exemple http://www.monsite.com/path/de/ma/page?param1=valeur1¶m2=valeur2
- Les paramètres de formulaire: ces dernier sont transmis dans le corps de la requête
- response : cet objet contient la réponse envoyée au client. La portée de cette instance est la page
- out : peut être employé dans les scriptlets pour écrire des données dans la page qui sera envoyée au client. La portée de cette instance est la page
- session : cet objet contient, comme son nom l'indique, tous les objets relatif à la session


















