Les expressions EL vont permettre d'éviter, voire de limiter, l'utilisation de code JAVA dans Jakarta EE (scriptlet). Ceci est particulièrement intéressant pour les dernières versions du JDK qui ne permettent plus de facilement importer des classes (beans) dans les jsp.
Syntaxe générale : ${ expression }
Une expression peut-être un calcul ou un test, exemples :
Tous les opérateurs sont possibles : + - * / % && || > < … etc
Une expression peut être un paramètre de la requête, exemple
${param.ztPseudo} // Affichera le contenu du paramètre ztPseudo 
Il est possible de tester si un paramètre est renseigné :
${empty param.ztPseudo ? "Veuillez-vous authentifier" : "Authentification réussie"}  
Une expression peut être un attribut de la requête, exemple
${isAdmin} // Affichera le contenu de l'attribut isAdmin  
La servlet peut avoir mis un objet en attribut, dans ce cas, au niveau de la jsp, on peut le récupérer pour l'afficher :
${empty controlForm.getResultat() ? "" : controlForm.getResultat()}  
Il n'y a pas besoin de faire d'importation spécifique, ni de transtypage.
Cela permet d’écrire des chemins dynamiques qui ne cassent pas si le contexte change (par exemple si l’application est renommée ou déployée ailleurs).
${pageContext.request.contextPath}
Note: Pour plus d'informations sur Expression Langage : https://docs.oracle.com/javaee/6/tutorial/doc/gjddd.html
JSTL va nous permettre, grâce à des balises, de réaliser les principales actions nécessaires dans la couche de présentation. JSTL prend en charge les tâches structurelles courantes telles que l’itération et les conditions, les balises pour la manipulation de documents XML, ainsi que les balises SQL.
Note: JSTL nécessite l’import de la librairie :
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
| avec scriptlet, sans JSTL | avec JSTL | |
|---|---|---|
| <br><% if(request.getParameter(“pseudo”) != null) { %><br> Bonjour <%= request.getParameter(“pseudo”) %><br><% } %><br> | <br><c:if test=“${not empty param.pseudo}”><br> Bonjour ${param.pseudo}<br></c:if><br> | |
| <c:choose>
    <c:when test="${ variable }">Du texte</c:when>
    <c:when test="${ autreVariable }">Du texte</c:when>
    <c:when test="${ encoreUneAutreVariable }">Du texte</c:when>
    <c:otherwise></c:otherwise>
</c:choose> | 
| avec scriptlet, sans JSTL | avec JSTL | |
|---|---|---|
| <br><% for(String nom : (List<String>) request.getAttribute(“liste”)) { %><br> <li><%= nom %></li><br><% } %><br> | <br><c:forEach var=“nom” items=“${liste}”><br> <li>${nom}</li><br></c:forEach><br> | 
A Savoir: Combiner EL, JSPF et JSTL permet d'avoir de bonnes pratiques :