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