Que es JPS?
La tecnología Java para la creación de páginas web con programación en el servidor.
JSP es un acrónimo de Java Server Pages, que en castellano vendría a decir algo como Páginas de Servidor Java. Es, pues, una tecnología orientada a crear páginas web con programación en Java.
Con JSP podemos crear aplicaciones web que se ejecuten en variados servidores web, de múltiples plataformas, ya que Java es en esencia un lenguaje multiplataforma. Las páginas JSP están compuestas de código HTML/XML mezclado con etiquetas especiales para programar scripts de servidor en sintaxis Java. Por tanto, las JSP podremos escribirlas con nuestro editor HTML/XML habitual.
Motor JSP
El motor de las páginas JSP está basado en los servlets de Java -programas en Java destinados a ejecutarse en el servidor-, aunque el número de desarrolladores que pueden afrontar la programación de JSP es mucho mayor, dado que resulta mucho más sencillo aprender que los servlets.
En JSP creamos páginas de manera parecida a como se crean en ASP o PHP -otras dos tecnologías de servidor-. Generamos archivos con extensión .jsp que incluyen, dentro de la estructura de etiquetas HTML, las sentencias Java a ejecutar en el servidor. Antes de que sean funcionales los archivos, el motor JSP lleva a cabo una fase de traducción de esa página en un servlet, implementado en un archivo class (Byte codes de Java). Esta fase de traducción se lleva a cabo habitualmente cuando se recibe la primera solicitud de la página .jsp, aunque existe la opción de precompilar en código para evitar ese tiempo de espera la primera vez que un cliente solicita la página.
Ventajas y desventajas de JSP
Ventajas
La principal ventaja de JSP frente a otros lenguajes es que el lenguaje Java es un lenguaje de propósito general que excede el mundo web y que es apto para crear clases que manejen lógica de negocio y acceso a datos de una manera prolija. Esto permite separar en niveles las aplicaciones web, dejando la parte encargada de generar el documento HTML en el archivo JSP.
Otra ventaja es que JSP hereda la portabilidad de Java, y es posible ejecutar las aplicaciones en múltiples plataformas sin cambios. Es común incluso que los desarrolladores trabajen en una plataforma y que la aplicación termine siendo ejecutada en otra.
Etiquetas JSP para simplificar el código y dar mayor funcionalidad.Desarrollar sitios web utilizando etiquetas presenta ciertas ventajas como; facilitar el aprendizaje, facilitar el mantenimiento, fomentar la modularidad y la reutilización y simplificar el código y reducir el número de líneas necesarias.
Otras de las ventajas de JSP es que es un lenguaje totalmente escrito, fuerte capacidad de manipulación de gráficos, cargas de APIs: Interfaz de programación de aplicaciones.
También tenemos el Open source; código abierto es la expresión con la que se conoce al software distribuido y desarrollado libremente.
La ventaja que también es fundamental de JSP es que tenemos el lenguaje java a nuestro alcance. JSP tiene robustez y es multiplataforma.
Desventajas
Una de las desventajas que JSP tiene es que no posee una interfaz, ya que la interfaz web es limitada, la codificación de interfaces elaboradas lleva muchas líneas de código, y la mayoría debe hacerse usando scripts (javascript). No tiene tipo VARIANT de variables, tampoco soporta Switchs o arrays con índices alfanuméricos, y la carga de la interfaz es más lenta que la de una aplicación de escritorio.
Otra desventaja que también tiene es que la mayor parte de la lógica de la aplicación se ejecuta en el servidor, por lo que se corre el riesgo de sobrecargar al mismo y, la aplicación no está disponible si ocurre algún problema con el servidor o con la conexión de red.
API JSP
El paquete principal de la API JSP es javax.servlet.jsp que contiene todas las interfaces.
La interfaz base de JSP API es javax.servlet.jsp.JspPage y tiene una interfaz secundaria javax.servlet.jsp.HttpJspPage que extiende la interfaz JspPage.
El contenedor genera la clase Servlet a partir de un archivo jsp que implementa la interfaz HttpJspPage
4.2.1 Interfaz JspPage
Esta es la interfaz principal y define dos métodos de ciclo de vida jsp
a) jspInit () : este es el método del ciclo de vida y se ejecuta solo una vez en el ciclo de vida de una página jsp. El contenedor llama al método jspInit () para inicializar la instancia del servlet antes de atender cualquier solicitud. Este método se llama solo una vez para un servlet y generalmente se usa para una actividad de tiempo como inicializar conexiones de base de datos, etc. Este método se llama desde el método init de Servlet.
Podemos anular el método jspInit () y agregarle un código de inicialización personalizado.
b) jspDestroy () : cuando el contenedor elimina la instancia del servlet correspondiente, llama al método jspDestroy () para realizar cualquier actividad de limpieza.
Este método se ejecuta solo una vez en todo el ciclo de vida de un servlet (jsp) y puede anularlo para realizar actividades de limpieza como cerrar las conexiones de la base de datos o cualquier archivo abierto, etc.
Este método se llama desde el método destroy () de Servlet y podemos anular este método para agregar un código de limpieza personalizado.
4.2.2 Interfaz HttpJspPage
La interfaz HttpJspPage extiende la interfaz JspPage y define un método de ciclo de vida.
a) _ jspService (HttpServletRequest, HttpServletResponse) : este método de ciclo de vida se ejecuta en una nueva solicitud de una página Jsp. Este método se llama desde service () método de servlet, lo que significa que este método se ejecuta en un hilo separado. El contenedor pasa el objeto de solicitud y respuesta en este método
Este método se agrega de forma predeterminada en la clase de servlet generada, lo que significa que no podemos anular este método y al hacerlo se producirá un error.
Todo el código escrito dentro de una etiqueta de scriplet (<%%>) o cualquier código html va dentro de este método
La clase Servlet generada implementa la interfaz HttpJspPage, lo que significa que los tres métodos (jspInit (), jspDestroy () y _jspService ()) están disponibles en la clase.
Sugerencias: Debe haber observado que el método _jspService () tiene una "_" pre-pendiente con el nombre del método, ya que este no es el caso con otros dos métodos. Puede recordarlo, ya que es un signo de que la Especificación le advierte que no lo toque.
Formas de utilizar JSP
Declaraciones, Expresiones y Scriplet
Declaraciones, Expresiones y Scriplet
Operaciones básicas que podemos realizar en una página JSP.
Comentarios
Son comentarios sobre el código, sirven para ayudar al programador. El compilador los ignora.
<%-- Esto es un comentario --%>
<% // comentario de una linea
/*
Comentario de
varias lineas
*/
%>
<% // comentario de una linea
/*
Comentario de
varias lineas
*/
%>
Declaraciones
Se utilizan para definir variables y métodos que se utilizarán en scriptles y expresiones posteriores.
Su sintaxis es:
<%!
Declaraciones
%>
Declaraciones
%>
Ejemplo:
<%!
int contador = 5;
int sumar(int a, int b){
return a+b;
}
%>
int contador = 5;
int sumar(int a, int b){
return a+b;
}
%>
Expresiones
Son una evaluación de una expresión Java.
Su sintaxis es:
<%= contador %>
contador es una variable con un valor que se mostrará donde se haya colocado la expresión.
Scriptles
Pueden incluir cualquier tipo de código Java dentro.
Su sintaxis es:
Directivas
Son etiquetas a partir de las cuales se genera información que puede ser utilizada por el motor JSP. No producen una salida visible al usuario sino que configuran cómo se ejecutará la página JSP.
Su sintaxis es:
<%@directiva atributo="valor" %>
Las directivas disponibles son:
- includeIncluye el contenido de un fichero en la página mediante el atributo file.
- taglibImporta bibliotecas de etiquetas (Tag Libraries)<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
- pageEspecifica atributos relacionados con la página a procesar. Los atributos son:
¿Qué es JSTL? (JSP Standard Tag Library)
La librería JSTL es un componente dentro de la especificación del Java 2 Enterprise Edition (J2EE) y es controlada por Sun MicroSystems. JSTL no es más que un conjunto de librerías de etiquetas simples y estándares que encapsulan la funcionalidad principal que es usada comúnmente para escribir páginas JSP. Las etiquetas JSTL están organizadas en 4 librerías:
- core: Comprende las funciones script básicas como loops, condicionales, y entrada/salida.
- xml: Comprende el procesamiento de xml
- fmt: Comprende la internacionalización y formato de valores como de moneda y fechas.
- sql: Comprende el acceso a base de datos.
¿Como mejoran esta situación la librería JSTL?
- Debido a que las etiquetas JSTL son XML, estas etiquetas se integran limpia y uniformemente a las etiquetas HTML.
- Las 4 librerías de etiquetas JSTL incluyen la mayoría de funcionalidad que será necesaria en una página JSP. Las etiquetas JSTL son muy sencillas de usarlas para personas que no conocen de programación, a lo mucho necesitarán conocimientos de etiquetas del estilo HTML.
- Las etiquetas JSTL encapsulan la lógica como el formato de fechas y números. Usando los scriptlets JSP, esta misma lógica necesitaría ser repetida en todos los sitios donde es usada, o necesitaría ser movida a Clases de ayuda.
- Las etiquetas JSTL pueden referenciar objetos que se encuentren en los ambientes Request y Session sin conocer el tipo del objeto y sin necesidad de hacer el Casting.
- Los JSP EL (Expression Language) facilitan las llamadas a los métodos Get y Set en los objetos Java. Esto no es posible en la versión JSP 1.2, pero ahora está disponible en JSP 2.0. EL es usado extensamente en la librería JSTL.
- Los JSTL pueden agregar mayor sobrecarga en el servidor. Los scriptlets y las librerías de etiquetas son compilados a servlets, los cuales luego son ejecutados por el contenedor. El código Java embebido en los scriptlets es básicamente copiado en el servlet resultante. En cambio, las etiquetas JSTL, causan un poco más de código en el servlet. En la mayoría de casos esta cantidad no es mensurable pero debe ser considerado.
- Los scriptlets son más potentes que las etiquetas JSTL. Si desea hacer todo en un script JSP pues es muy probable que insertará todo el código en Java en él. A pesar que las etiquetas JSTL proporciona un potente conjunto de librerías reutilizables, no puede hacer todo lo que el código Java puede hacer. La librería JSTL está diseñada para facilitar la codificación en el lado de presentación que es típicamente encontrado en la capa de Vista si hablamos de la arquJSTitectura Modelo-Vista-Controlador.
Etiquetas JSTL
Etiquetas de la librería
setDataSource
El tag setDataSource permite definir el objeto DataSource con el que trabajar, y dejarlo asignado en una variable.
SINTAXIS:
<sql:setDataSource {dataSource="DataSource" |
url="url" [driver="driver"] [user="usuario"]
[password="password"]} [var="variable"]
[scope="page|request|session|application"]/>
ATRIBUTOS:
- dataSource: objeto DataSource al que queremos enlazar (en caso de que esté creado de antemano).
- url: URL de la base de datos a acceder
- driver: driver con que conectar con la base de datos
- user: nombre de usuario con que conectar a la base de datos
- password: password con que conectar a la base de datos
- var: variable donde guardar el DataSource que se obtenga
- scope: ámbito de la variable var
Notar que se puede obtener el DataSource tanto indicándolo directamente en el atributo dataSource como indicando url, driver, user y password (los tres últimos opcionales).
query
El tag query permite definir una consulta (select) en una base de datos.
SINTAXIS:
Sin cuerpo:
<sql:query sql="consulta" var="variable"
[scope="page|request|session|application"]
[dataSource="DataSource"] [maxRows="max"]
[startRow="inicio"]/>
Con cuerpo donde indicar parámetros de la consulta:
<sql:query sql="consulta" var="variable"
[scope="page|request|session|application"]
[dataSource="DataSource"] [maxRows="max"]
[startRow="inicio"]>
Campos <sql:param>
</sql:query>
Con cuerpo donde indicar la propia consulta y los parámetros de la consulta:
<sql:query var="variable"
[scope="page|request|session|application"]
[dataSource="DataSource"] [maxRows="max"]
[startRow="inicio"]>
Consulta
Campos <sql:param>
</sql:query>
ATRIBUTOS:
- sql: consulta a realizar (en formato SQL). Puede indicarse la consulta tanto en este atributo como en el cuerpo de la etiqueta.
- dataSource: objeto DataSource asociado a la base de datos a la que se accede. Si especificamos este campo, no podemos incluir esta etiqueta dentro de una transacción (etiqueta transaction).
- maxRows: máximo número de filas que se devuelven como resultado
- startRow: fila a partir de la cual devolver resultados. Por defecto es la 0.
- var: variable donde guardar el resultado. Es de tipo javax.servlet.jsp.jstl.sql.Result.
- scope: ámbito de la variable var.
update
El tag update permite definir una actualización (insert, update, delete) en una base de datos.
SINTAXIS:
Sin cuerpo:
<sql:update sql="actualizacion"
[dataSource="DataSource"] [var="variable"]
[scope="page|request|session|application"]/>
Con cuerpo donde indicar parámetros de la actualización:
<sql:update sql="actualizacion"
[dataSource="DataSource"] [var="variable"]
[scope="page|request|session|application"]>
Campos <sql:param>
</sql:update>
Con cuerpo donde indicar la propia actualización y los parámetros de la misma:
<sql:update [dataSource="DataSource"] [var="variable"]
[scope="page|request|session|application"]>
Actualización
Campos <sql:param>
</sql:update>
ATRIBUTOS:
- sql: actualización a realizar (en formato SQL). Puede indicarse tanto en este atributo como en el cuerpo de la etiqueta.
- dataSource: objeto DataSource asociado a la base de datos a la que se accede. Si especificamos este campo, no podemos incluir esta etiqueta dentro de una transacción (etiqueta transaction).
- var: variable donde guardar el resultado. Es de tipo Integer (se devuelve el número de filas afectadas por la actualización).
- scope: ámbito de la variable var.
transaction
El tag transaction permite agrupar dentro de él varios tags query y/o update, de forma que se define una transacción con ellos.
SINTAXIS:
<sql:transaction [dataSource="DataSource"]
[isolation="nivel"]>
Conjunto de etiquetas query y/o update
</sql:transaction>
ATRIBUTOS:
- dataSource: objeto DataSource asociado a la base de datos a la que se accede. Se utiliza este DataSource por todas las operaciones query y update que se definan dentro.
- isolation: nivel de aislamiento de la transacción, que puede ser "read_committed", "read_uncommitted", "repeatable_read" o "serializable".
param
El tag param permite definir parámetros a la hora de ejecutar consultas (query) o actualizaciones (update). Así, se sustituyen las marcas "?" que pueda haber en consultas o actualizaciones, por los valores de los parámetros que se indiquen.
SINTAXIS:
Sin cuerpo:
<sql:param value="valor"/>
Con cuerpo:
<sql:param>
Valor
</sql:param>
ATRIBUTOS:
- value: valor del parámetro. Puede indicarse mediante este atributo o como cuerpo del tag.
Los valores de los parámetros se sustituyen en las etiquetas en el orden en que se van definiendo. Veremos un ejemplo más adelante.
Otras Etiquetas
Se tienen otras etiquetas, como dateParam, que es igual que param pero para parámetros de tipo Date(fechas). No la veremos con más detalle aquí.
EJEMPLO
Vemos un ejemplo de uso de las etiquetas explicadas.
- Creamos un DataSource mediante una etiqueta setDataSource, que se conecta a la base de datos miBD, de MySQL. Guardamos el DataSource en la variable miDataSource:
<sql:setDataSource url="jdbc:mysql//localhost/miBD" driver="org.gjt.mm.mysql.Driver" user="root" password="mysql" var="miDataSource" />
- Ejecutamos una consulta (query) que muestra todos los nombres de la tabla nombres. Guardamos el resultado en la variable miConsulta:
<sql:query var="miConsulta" dataSource="${miDataSource}"> SELECT nombre FROM nombres </sql:query> <c:foreach var="fila" items="${miConsulta.rows}"> <c:out value="${fila.nombre}"/><br> </c:foreach>
- Ejecutamos una actualización que actualice el nombre que tenga id = 1 o id = 2:
<sql:update dataSource="${miDataSource}"> UPDATE nombres SET nombre='pepe' WHERE id=1 OR id=2 </sql:update>
- Utilizamos dos etiquetas param para pasar como parámetros los id de los nombres que se tienen que actualizar:
<sql:update dataSource="${miDataSource}"> UPDATE nombres SET nombre='pepe' WHERE id=? OR id=? <sql:param value="${param.id1}"/> <sql:param value="${param.id2}"/> </sql:update>
Se sustituiría la primera ? por el primer param y la segunda ? por el segundo param. Los dos parámetros se toman en este ejemplo de la petición request. Pueden tomarse de cualquier otro sitio (constantes, variables, etc). - Vemos cómo quedarían las dos operaciones anteriores en una transacción (transaction):
<sql:transaction dataSource="${miDataSource}"> <sql:query var="miConsulta"> SELECT nombre FROM nombres </sql:query> <c:foreach var="fila" items="${miConsulta.rows}"> <c:out value="${fila.nombre}"/><br> </c:foreach> <sql:update> UPDATE nombres SET nombre='pepe' WHERE id=? OR id=? <sql:param value="${param.id1}"/> <sql:param value="${param.id2}"/> </sql:update> </sql:transaction>
Ejemplo
Vemos cómo quedaría el ejemplo visto en la sesión anterior para la librería dbtags adaptado a la librería sql.
<%@ taglib uri="sql" prefix="sql" %>
<%@ taglib uri="core" prefix="c" %>
<html>
<body>
<sql:setDataSource url="jdbc:mysql://localhost/prueba"
driver="org.gjt.mm.mysql.Driver"
user="root" password="mysql" var="miDataSource"/>
<sql:query var="miConsulta" dataSource="${miDataSource}">
SELECT * FROM datos
</sql:query>
<c:forEach var="fila" items="${miConsulta.rows}">
Nombre: <c:out value="${fila.nombre}"/><br>
Descripcion: <c:out value="${fila.descripcion}"/><br>
</c:forEach>
</body>
</html>
Utilizamos la librería sql y la core para recorrer todos los registros encontrados.
La librería de internacionalización
Los tags de la librería de internacionalización (o I18n) permiten adaptar aplicaciones Web a las convenciones de idioma y formato de los clientes para un determinado origen (locale). Los tags de esta librería se presentan con el prefijo "fmt".
En la librería tenemos tags para la internacionalización propiamente dicha, y para el formato de determinados elementos según la región (podremos formatear números, fechas, monedas, etc, dependiendo del idioma o región que se trate).
Etiquetas de la librería
Algunas etiquetas interesantes de esta librería son:
formatNumber
El tag formatNumber permite dar formato a un número, e indicar, por ejemplo, con cuántos decimales queremos que se muestre.
SINTAXIS:
<fmt:formatNumber [value="numero"] [type="number|currency|percentage"]
[pattern="patron"] [groupingUsed="true|false"]
[maxIntegerDigits="cantidad"] [minIntegerDigits="cantidad"]
[maxFractionDigits="cantidad"] [minFracionDigits="cantidad"]
[var="nombreVariable"] [scope="ambito"]... />
ATRIBUTOS:
- value: el valor del número que queremos formatear. Podrá ser un valor constante ("2.34"), o uno encapsulado en una variable en lenguaje de expresiones ("${numero}").
- type: indica el tipo de número que se quiere formatear: number (número genérico), currency(moneda) o percentage (para porcentajes).
- pattern: indica un patrón propio con el que formatear el número. Un ejemplo de uso sería "#.###", que dejaría 3 decimales, y al menos 1 entero.
- groupingUsed: a true indica que se separen las cifras de mil en mil, con puntos (2.032.135), y a false indica que no se utilicen los puntos para separar (2032135).
- maxIntegerDigits y minIntegerDigits establecen cuántas cifras tendrá como mucho y como poco (respectivamente) la parte entera.
- maxFractionDigits y minFractionDigits establecen el número de cifras como máximo y como mínimo (respectivamente) de la parte decimal.
- var: nombre de la variable donde guardar el número formateado (si se quiere almacenar temporalmente)
- scope: ámbito de la variable (como los campos scope vistos en otras etiquetas).
- Además, la etiq
Etiquetas de la librería
setDataSourceEl tag setDataSource permite definir el objeto DataSource con el que trabajar, y dejarlo asignado en una variable.SINTAXIS:<sql:setDataSource {dataSource="DataSource" | url="url" [driver="driver"] [user="usuario"] [password="password"]} [var="variable"] [scope="page|request|session|application"]/>
ATRIBUTOS:- dataSource: objeto DataSource al que queremos enlazar (en caso de que esté creado de antemano).
- url: URL de la base de datos a acceder
- driver: driver con que conectar con la base de datos
- user: nombre de usuario con que conectar a la base de datos
- password: password con que conectar a la base de datos
- var: variable donde guardar el DataSource que se obtenga
- scope: ámbito de la variable var
Notar que se puede obtener el DataSource tanto indicándolo directamente en el atributo dataSource como indicando url, driver, user y password (los tres últimos opcionales).queryEl tag query permite definir una consulta (select) en una base de datos.SINTAXIS:Sin cuerpo:<sql:query sql="consulta" var="variable" [scope="page|request|session|application"] [dataSource="DataSource"] [maxRows="max"] [startRow="inicio"]/>
Con cuerpo donde indicar parámetros de la consulta:<sql:query sql="consulta" var="variable" [scope="page|request|session|application"] [dataSource="DataSource"] [maxRows="max"] [startRow="inicio"]> Campos <sql:param> </sql:query>
Con cuerpo donde indicar la propia consulta y los parámetros de la consulta:<sql:query var="variable" [scope="page|request|session|application"] [dataSource="DataSource"] [maxRows="max"] [startRow="inicio"]> Consulta Campos <sql:param> </sql:query>
ATRIBUTOS:- sql: consulta a realizar (en formato SQL). Puede indicarse la consulta tanto en este atributo como en el cuerpo de la etiqueta.
- dataSource: objeto DataSource asociado a la base de datos a la que se accede. Si especificamos este campo, no podemos incluir esta etiqueta dentro de una transacción (etiqueta transaction).
- maxRows: máximo número de filas que se devuelven como resultado
- startRow: fila a partir de la cual devolver resultados. Por defecto es la 0.
- var: variable donde guardar el resultado. Es de tipo javax.servlet.jsp.jstl.sql.Result.
- scope: ámbito de la variable var.
updateEl tag update permite definir una actualización (insert, update, delete) en una base de datos.SINTAXIS:Sin cuerpo:<sql:update sql="actualizacion" [dataSource="DataSource"] [var="variable"] [scope="page|request|session|application"]/>
Con cuerpo donde indicar parámetros de la actualización:<sql:update sql="actualizacion" [dataSource="DataSource"] [var="variable"] [scope="page|request|session|application"]> Campos <sql:param> </sql:update>
Con cuerpo donde indicar la propia actualización y los parámetros de la misma:<sql:update [dataSource="DataSource"] [var="variable"] [scope="page|request|session|application"]> Actualización Campos <sql:param> </sql:update>
ATRIBUTOS:- sql: actualización a realizar (en formato SQL). Puede indicarse tanto en este atributo como en el cuerpo de la etiqueta.
- dataSource: objeto DataSource asociado a la base de datos a la que se accede. Si especificamos este campo, no podemos incluir esta etiqueta dentro de una transacción (etiqueta transaction).
- var: variable donde guardar el resultado. Es de tipo Integer (se devuelve el número de filas afectadas por la actualización).
- scope: ámbito de la variable var.
transactionEl tag transaction permite agrupar dentro de él varios tags query y/o update, de forma que se define una transacción con ellos.SINTAXIS:<sql:transaction [dataSource="DataSource"] [isolation="nivel"]> Conjunto de etiquetas query y/o update </sql:transaction>
ATRIBUTOS:- dataSource: objeto DataSource asociado a la base de datos a la que se accede. Se utiliza este DataSource por todas las operaciones query y update que se definan dentro.
- isolation: nivel de aislamiento de la transacción, que puede ser "read_committed", "read_uncommitted", "repeatable_read" o "serializable".
paramEl tag param permite definir parámetros a la hora de ejecutar consultas (query) o actualizaciones (update). Así, se sustituyen las marcas "?" que pueda haber en consultas o actualizaciones, por los valores de los parámetros que se indiquen.SINTAXIS:Sin cuerpo:<sql:param value="valor"/>
Con cuerpo:<sql:param> Valor </sql:param>
ATRIBUTOS:- value: valor del parámetro. Puede indicarse mediante este atributo o como cuerpo del tag.
Los valores de los parámetros se sustituyen en las etiquetas en el orden en que se van definiendo. Veremos un ejemplo más adelante.Otras EtiquetasSe tienen otras etiquetas, como dateParam, que es igual que param pero para parámetros de tipo Date(fechas). No la veremos con más detalle aquí.EJEMPLOVemos un ejemplo de uso de las etiquetas explicadas.- Creamos un DataSource mediante una etiqueta setDataSource, que se conecta a la base de datos miBD, de MySQL. Guardamos el DataSource en la variable miDataSource:
<sql:setDataSource url="jdbc:mysql//localhost/miBD" driver="org.gjt.mm.mysql.Driver" user="root" password="mysql" var="miDataSource" />
- Ejecutamos una consulta (query) que muestra todos los nombres de la tabla nombres. Guardamos el resultado en la variable miConsulta:
<sql:query var="miConsulta" dataSource="${miDataSource}"> SELECT nombre FROM nombres </sql:query> <c:foreach var="fila" items="${miConsulta.rows}"> <c:out value="${fila.nombre}"/><br> </c:foreach>
- Ejecutamos una actualización que actualice el nombre que tenga id = 1 o id = 2:
<sql:update dataSource="${miDataSource}"> UPDATE nombres SET nombre='pepe' WHERE id=1 OR id=2 </sql:update>
- Utilizamos dos etiquetas param para pasar como parámetros los id de los nombres que se tienen que actualizar:
<sql:update dataSource="${miDataSource}"> UPDATE nombres SET nombre='pepe' WHERE id=? OR id=? <sql:param value="${param.id1}"/> <sql:param value="${param.id2}"/> </sql:update>
Se sustituiría la primera ? por el primer param y la segunda ? por el segundo param. Los dos parámetros se toman en este ejemplo de la petición request. Pueden tomarse de cualquier otro sitio (constantes, variables, etc). - Vemos cómo quedarían las dos operaciones anteriores en una transacción (transaction):
<sql:transaction dataSource="${miDataSource}"> <sql:query var="miConsulta"> SELECT nombre FROM nombres </sql:query> <c:foreach var="fila" items="${miConsulta.rows}"> <c:out value="${fila.nombre}"/><br> </c:foreach> <sql:update> UPDATE nombres SET nombre='pepe' WHERE id=? OR id=? <sql:param value="${param.id1}"/> <sql:param value="${param.id2}"/> </sql:update> </sql:transaction>
Ejemplo
Vemos cómo quedaría el ejemplo visto en la sesión anterior para la librería dbtags adaptado a la librería sql.<%@ taglib uri="sql" prefix="sql" %> <%@ taglib uri="core" prefix="c" %> <html> <body> <sql:setDataSource url="jdbc:mysql://localhost/prueba" driver="org.gjt.mm.mysql.Driver" user="root" password="mysql" var="miDataSource"/> <sql:query var="miConsulta" dataSource="${miDataSource}"> SELECT * FROM datos </sql:query> <c:forEach var="fila" items="${miConsulta.rows}"> Nombre: <c:out value="${fila.nombre}"/><br> Descripcion: <c:out value="${fila.descripcion}"/><br> </c:forEach> </body> </html>
Utilizamos la librería sql y la core para recorrer todos los registros encontrados.La librería de internacionalización
Los tags de la librería de internacionalización (o I18n) permiten adaptar aplicaciones Web a las convenciones de idioma y formato de los clientes para un determinado origen (locale). Los tags de esta librería se presentan con el prefijo "fmt".En la librería tenemos tags para la internacionalización propiamente dicha, y para el formato de determinados elementos según la región (podremos formatear números, fechas, monedas, etc, dependiendo del idioma o región que se trate).Etiquetas de la librería
Algunas etiquetas interesantes de esta librería son:formatNumberEl tag formatNumber permite dar formato a un número, e indicar, por ejemplo, con cuántos decimales queremos que se muestre.SINTAXIS:<fmt:formatNumber [value="numero"] [type="number|currency|percentage"] [pattern="patron"] [groupingUsed="true|false"] [maxIntegerDigits="cantidad"] [minIntegerDigits="cantidad"] [maxFractionDigits="cantidad"] [minFracionDigits="cantidad"] [var="nombreVariable"] [scope="ambito"]... />
ATRIBUTOS:- value: el valor del número que queremos formatear. Podrá ser un valor constante ("2.34"), o uno encapsulado en una variable en lenguaje de expresiones ("${numero}").
- type: indica el tipo de número que se quiere formatear: number (número genérico), currency(moneda) o percentage (para porcentajes).
- pattern: indica un patrón propio con el que formatear el número. Un ejemplo de uso sería "#.###", que dejaría 3 decimales, y al menos 1 entero.
- groupingUsed: a true indica que se separen las cifras de mil en mil, con puntos (2.032.135), y a false indica que no se utilicen los puntos para separar (2032135).
- maxIntegerDigits y minIntegerDigits establecen cuántas cifras tendrá como mucho y como poco (respectivamente) la parte entera.
- maxFractionDigits y minFractionDigits establecen el número de cifras como máximo y como mínimo (respectivamente) de la parte decimal.
- var: nombre de la variable donde guardar el número formateado (si se quiere almacenar temporalmente)
- scope: ámbito de la variable (como los campos scope vistos en otras etiquetas).
- Además, la etiqueta tiene otros atributos (para indicar monedas y otros elementos), que no se comentan aquí.
formatDateEl tag formatDate permite dar formato a una fecha y mostrar las partes de ella que queramos, y en el orden que queramos.SINTAXIS:<fmt:formatDate [value="fecha"] [type="time|date|both"] [dateStyle="default|short|medium|long|full"] [timeStyle="default|short|medium|long|full"] [pattern="patron"] [timeZone="zona"] [var="nombreVariable"] [scope="ambito"]... />
ATRIBUTOS:- value: el valor de la fecha. Normalmente vendrá en una variable ("${fecha}").
- type: indica el tipo de fecha que se quiere formatear: fecha, hora o ambos.
- dateStyle: formatea la fecha con uno de los formatos predeterminados que tiene
- timeStyle: formatea la hora con uno de los formatos predeterminados que tiene
- pattern: indica un patrón propio con el que formatear la fecha.
- timeZone: cadena de texto descriptiva de la zona horaria para la que queremos formatear la fecha.
- var: nombre de la variable donde guardar el número formateado (si se quiere almacenar temporalmente)
- scope: ámbito de la variable (como los campos scope vistos en otras etiquetas).
formatDate
El tag formatDate permite dar formato a una fecha y mostrar las partes de ella que queramos, y en el orden que queramos.
SINTAXIS:
<fmt:formatDate [value="fecha"] [type="time|date|both"]
[dateStyle="default|short|medium|long|full"]
[timeStyle="default|short|medium|long|full"]
[pattern="patron"] [timeZone="zona"]
[var="nombreVariable"] [scope="ambito"]... />
ATRIBUTOS:
- value: el valor de la fecha. Normalmente vendrá en una variable ("${fecha}").
- type: indica el tipo de fecha que se quiere formatear: fecha, hora o ambos.
- dateStyle: formatea la fecha con uno de los formatos predeterminados que tiene
- timeStyle: formatea la hora con uno de los formatos predeterminados que tiene
- pattern: indica un patrón propio con el que formatear la fecha.
- timeZone: cadena de texto descriptiva de la zona horaria para la que queremos formatear la fecha.
- var: nombre de la variable donde guardar el número formateado (si se quiere almacenar temporalmente)
- scope: ámbito de la variable (como los campos scope vistos en otras etiquetas).
aqui en este link tenemos todo lo referente a una sesion con una explicacion bastante completa
JavaBean
Los JavaBeans son un modelo de componentes creado por Sun Microsystems para la construcción de aplicaciones en Java.
Se usan para encapsular varios objetos en un único objeto (la vaina o Bean en inglés), para hacer uso de un solo objeto en lugar de varios más simples.
La especificación de JavaBeans de Sun Microsystems los define como "componentes de software reutilizables que se puedan manipular visualmente en una herramienta de construcción".
A pesar de haber muchas semejanzas, los JavaBeans no deben confundirse con los Enterprise JavaBeans (EJB), una tecnología de componentes del lado servidor que es parte de Java EE.
Explique el patron del diseño MVC
Modelo vista controlador (MVC)
Modelo Vista Controlador (MVC) es un estilo de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos.
Se trata de un modelo muy maduro y que ha demostrado su validez a lo largo de los años en todo tipo de aplicaciones, y sobre multitud de lenguajes y plataformas de desarrollo.
- El Modelo que contiene una representación de los datos que maneja el sistema, su lógica de negocio, y sus mecanismos de persistencia.
- La Vista, o interfaz de usuario, que compone la información que se envía al cliente y los mecanismos interacción con éste.
- El Controlador, que actúa como intermediario entre el Modelo y la Vista, gestionando el flujo de información entre ellos y las transformaciones para adaptar los datos a las necesidades de cada uno.
No hay comentarios.:
Publicar un comentario