Una de las tecnologías con las que más trabajamos en la capa de presentación es con Java EL (Expression Language) . Es la tecnología que nos permite mostrar información de forma sencilla en la capa de presentación, así como realizar operaciones básicas con ella. Vamos a ver un ejemplo sencillo a través de un Servlet y un JSP para luego extenderlo:
package com.arquitecturajava; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Servlet") public class Servlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher despachador= request.getRequestDispatcher("/pagina.jsp"); int numero=100; request.setAttribute("numero", numero); despachador.forward(request, response); } }
El Servlet tiene una variable que se denomina “numero” y que se la pasa al fichero “pagina.jsp” para que este la imprima. Si echamos un vistazo al fichero JSP veremos que este multiplica por 2 el número utilizando “expresión language”.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> ${numero*2} </body> </html>
La página nos imprimirá el siguiente resultado por pantalla:
Extendiendo EL
Java EL soporta bastantes capacidades en su core y nos permite realizar operaciones aritméticas y acceder a las variables que se encuentran en los distintos scopes.
Sin embargo a veces sus capacidades se quedan cortas y necesitamos extenderlo. Para ello vamos a implementar una nueva función de EL que nos permita por ejemplo calcular un número primo. El primer paso será implementar la función en una clase Java.
package com.arquitecturajava; public class FuncionEL { public static String calcularPrimo(Integer numero) { System.out.println(numero); for(int i=2;i<numero;i++) { if(numero %i==0) { return "el numero :" +numero+" no es primo"; } } return "el numero:" +numero+" si es primo"; } }
Una vez definida la funcionalidad la registramos en un fichero tld a nivel de la carpeta WEB-INF (se podría ubicar en un jar para reutilizarlo).
El contenido del fichero tld es el siguiente que registra la función .
<?xml version="1.0" encoding="UTF-8"?> <taglib 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/j2eeimagesweb-jsptaglibrary_2_1.xsd" version="2.1"> <description> Funcion Numero Primo </description> <tlib-version>1.0</tlib-version> <function> <description>Primo</description> <name>calcularPrimo</name> <function-class>com.arquitecturajava.FuncionEL</function-class> <function-signature> java.lang.String calcularPrimo (java.lang.Integer) </function-signature> </function> </taglib>
Una vez hecho esto estamos extendiendo Java EL para que soporte esta función. Podemos cambiar el contenido de la página por el siguiente :
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/WEB-INF/tagfuncion.tld" prefix="funciones"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> ${funciones:calcularPrimo(numero)} </body> </html>
Hemos terminado de extender Java EL para que soporte una nueva función:
El resultado será el siguiente:
Hemos terminado de extender el lenguaje de expressiones (Java EL)
Otros artículos relacionados: Servlet 3.0 , ServletContext ,ServletFilter