miércoles, 11 de agosto de 2010

Ejemplo completo con JSTL(core,xml, function,sql,format)

Para este ejemplo estoy utilizando Ubuntu 10.04 y Netbeans version 9
Primeramente creamos un nuevo proyecto web en Netbeans, lo llamaremos JSTL .

Además utilizaremos el servidor Glassfish V3 y damos click en Finish

Una vez hecho esto damos boton derecho sobre el proyecto y seleccionamos properties

Luego la opción Libraries y damos click en Add Library. Ahi seleccionamos JSTL 1.1 y luego damos click en Add Library y OK. Esto es para dar el soporte de JSTL a nuestro proyecto.

Ahora tenemos que crear una base de datos en Derby para conectar nuestra aplicacion JSTL a una base de datos
Seleccionamos Services, luego Databases.

Luego sobre JavaDB, seleccionamos Create Database
Le damos el nombre ejemplo, con el user usuario1 y la clave usuario1 y damos click en ok
Luego seleccionamos la conexion, nos conectamos.
abrimos APP y damos botón derecho sobre tables y seleccionamos CREATE TABLE.
Entonces creamos una tabla llamada Clientes.
Con los campos Id de tipo Integer, Nombre del tipo varchar(20) y Direccion del tipo varchar(20)





Con esto tenemos creada una base de datos, con la que vamos a interactuar cuando usemos JSTL con SQL


Luego de esto abrimos index.jsp , que tendrá enlaces a pagainas y Servlets con funcionalidades de JSTL.

En index.jsp vamos a colocar el siguiente codigo:
- Una referencia a JSTL
- Declaración de varaibles
- Visualización de esas variables

Todo esto corresponde al siguiente código:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<c:set var="opcion1" value="Mapa"/>
<c:set var="opcion2" value="Funciones.jsp"/>
<c:set var="opcion3" value="Formatos"/>
<c:set var="opcion4" value="SQL.jsp"/>
<c:set var="opcion5" value="XML.jsp"/>
<c:out value="Seleccione una opción:"/><br/>
<a href='<c:url value="${opcion1}"/>'>${opcion1}</a><br/>
<a href='<c:url value="${opcion2}"/>'>${opcion2}</a><br/>
<a href='<c:url value="${opcion3}"/>'>${opcion3}</a><br/>
<a href='<c:url value="${opcion4}"/>'>${opcion4}</a><br/>
<a href='<c:url value="${opcion5}"/>'>${opcion5}</a><br/>
</body>
</html>


Una vez hecho esto, tenemos que crear el sisguiente paquete:com.ejemplo
Este paquete contendrá dos servlets
Mapa.java: Este servlet crea un mapa simple, coloca valores y luego usando un dispatcher, los envia a otra página, acontinuación coloco el método processRequest:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
List<Map<String,String>> listadoPersonas=new ArrayList<Map<String,String>>();
for(int i=0;i<10;i++){
Map<String, String> persona=new HashMap<String,String>();
persona.put("id", String.valueOf(i));
persona.put("nombre", "persona"+i);
persona.put("direccion", "direccion"+i);
listadoPersonas.add(persona);
}
RequestDispatcher rd = request.getRequestDispatcher("VerMapa.jsp");
request.setAttribute("personas", listadoPersonas);
rd.forward(request, response);
} finally {
out.close();
}
}

Tambien creamos otro servlet dentro del mismo paquete que se llamará Formatos.java

Este servlet, no permite colocar una fecha en el request y un numero a los que se les aplicará un formato:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
Double valor=100000d/3d;
Date fecha= new Date();
RequestDispatcher rd = request.getRequestDispatcher("VerFormatos.jsp");
request.setAttribute("numero", valor);
request.setAttribute("fecha", fecha);
rd.forward(request, response);
} finally {
out.close();
}
}

También vamos a crear un archivo de propiedades llamado app.properties, que se encontrará junto al directorio com, de nuestro código fuente, el archivo de propiedades debe tener el siguiente contenido:
ejemplo1=prueba1
ejemplo2=prueba2
ejemplo3=prueba3


Hecho esto vamos a crear una página para ver el mapa que la llamaremos VerMapa.jsp
Esta pagina hace una llamada a JSTL y relaiza una iteración, creando una tabla de HTML:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<table border="1">
<tr>
<td>ID</td>
<td>NOMBRE</td>
<td>DIRECCION</td>
</tr>
<c:forEach var="persona" items="${personas}">

<tr
<c:choose>
<c:when test="${persona.id mod 2==0}"> bgColor="#FF0000"</c:when>
<c:when test="${persona.id mod 3==0}"> bgColor="#00FF00"</c:when>
<c:otherwise> bgColor="#0000FF"</c:otherwise>
</c:choose>
>
<td>${persona.id}</td>
<td>${persona.nombre}</td>
<td>${persona.direccion}</td>
</tr>
</c:forEach>
</table>
</body>
</html>


Ahora vamos a crear una tabla llamada VerFormatos.jsp
Esta tabla coloca un locale y aplica un formato a la fecha y numero colocados en el Servlet, además carga la información del archivo de propiedades llamado app que se encuentra junto al directorio com de nuestros paquetes

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<fmt:formatDate pattern="dd/MM/yyyy" value="${fecha}"/><br/>
<fmt:setLocale value="es_EC"/>
${numero}<br/>
<fmt:formatNumber pattern="###,###.###" value="${numero}"/><br/>
<fmt:bundle basename="app">
<fmt:message key='ejemplo1'/><br/>
<fmt:message key='ejemplo2'/><br/>
<fmt:message key='ejemplo3'/><br/>
</fmt:bundle>

</body>
</html>


Ahora vamos a crear la página llamada Funciones .jsp, esta página tiene las siguientes características:
- Carga una referencia al jslt encargado de usar funciones
- Usa ciertas funciones en una variable

El código es el siguiente:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<c:set var="cadena" value="Esta es una prueba"/>

Replace:${fn:replace(cadena,"a","A")}<br/>
Split: <c:forEach var="num" items="${fn:split(cadena, ' ')}">
<c:out value="${num}"/><br/>
</c:forEach>

Starts With:<c:if test="${fn:startsWith(cadena,'Esta es')}">
Puede ser: Esta es una cadena
</c:if>
</body>
</html>


Ahora tenemos que crear un archivo xml, llamado información.xml a la altura de index.jsp, este archivo tiene el siguiente contenido:
<?xml version="1.0" ?>
<libros>
<libro>
<titulo>Triangulos</titulo>
<autor>Pitagoras</autor>
</libro>
<libro>
<titulo>Java</titulo>
<autor>Alex</autor>
</libro>
<libro>
<titulo>Objective C</titulo>
<autor>Martinez</autor>
</libro>
</libros>


Luego de esto, tenemos que crear una página llamada XML.jsp, que se encargará de mostrarnos la informacion del archivo XML
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<c:import url="informacion.xml" var="archivo" />
<x:parse xml="${archivo}" var="doc" />
<br/>
<x:forEach var="i"
select="$doc/libros/libro">
<x:out select="$i/titulo" />
<br>
<x:out select="$i/autor" />
<br>

</x:forEach>
</body>
</html>



Ahora vamos a crear una pagina llamada SQL.jsp
Este código hace una conexion directa a la base de datos junto con un insert y una consulta que es devuelta a pantalla

El código es el siguiente:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<c:set var="nombre" value="otro"/>

<sql:setDataSource
var="ds"
driver="org.apache.derby.jdbc.ClientDriver"
url="jdbc:derby://localhost:1527/ejemplo"
user="usuario1"
password="usuario1"
/>

<sql:transaction dataSource="${ds}">
<sql:update var="actualizar">
INSERT INTO APP.CLIENTES VALUES (5,'${nombre}','direccion1')

</sql:update>

<sql:query var="clientes">
SELECT * FROM APP.CLIENTES
</sql:query>
</sql:transaction>


<table border=1>
<c:forEach var="row" items="${clientes.rows}">
<tr>
<td><c:out value="${row.id}"/></td>
<td><c:out value="${row.nombre}"/></td>
<td><c:out value="${row.direccion}"/></td>
</tr>
</c:forEach>
</table>
</body>
</html>

Nota: El uso de JSTL para conectarnos a una Base de Datos no es recomendado, es mejor tratar de utilizar un patrón MVC.

Si ejecutamos la aplicacón tenemos:

Mapa:
Funciones:

Formatos:

Sql:
XML:

1 comentario: