Está en la página 1de 108

Programacion Java

JULIAN BARNEY JAIMES RINCON


jbjaimes@correo.uts.edu.co
Grupo Whatsapp Alumnos 3016360426
Profesor

 Julian Barney Jaimes Rincon


 Ingeniero de Sistemas, candidato a Doctor en Dirección de
Proyectos, Maestría en Gerencia de Proyectos y Negocios MBA UIS,
Investigador Docente Grupo GRIIS  UTS, Especialista en
Telecomunicaciones y Especialista en Desarrollo Avanzado de
Software, con experiencia en experiencia en Proyectos, Docencia y
Pedagogía.
Introducción a Tarea presentación

 El objetivo es realizar una presentación interactiva con foto


realizando una breve introducción de ustedes, hobbies,
familia, trabajo, pre saberes, conocimiento de programación,
hardware de su equipo de desarrollo, especificaciones
equipo, que esperan de la asignatura y repaso programación
Web código html, en Microsoft Sway que es un programa de
presentación de diapositivas o vídeos en línea que permite
trabajar de forma colaborativa con esta información y subir
los enlaces en la tarea plataforma virtual de la universidad y
exponer para que sus compañeros observen las
presentaciones.
Tarea presentación

1. Microsoft Sway realizar la presentación según introducción 0,7pts

2 Crea códigos QR con logotipo, color y diseño personalizados que


lo lleve a la presentación https://www.qrcode-monkey.com/es/ 0,7pts

3. Crear Foto 360 suya y de su área de trabajo con el software de su


celular o de su elección. 0,7pts

4. Hacer un Tour Virtual con varias fotos 360 de su área de trabajo,


usted, su casa etc con mínimos dos tag
https://roundme.com/tour/748045/view/2357426/
5. Exponer en Clase la presentación. 2pts
Proyectos

 https://sway.office.com/eYWFYrezXyvESxRT?ref=Link

 Índice Tiobe Software


 https://www.tiobe.com/tiobe-index/
Parciales UTS

 Parcial Primer Corte


19 de Marzo
 Parcial Segundo Corte
07 de Mayo
 Parcial Tercer Primer Corte
11 de Junio

Talleres 25%
Evaluación 60%
Autoevaluación 15%
JAVA EE

 Enterprise Edition o Java EE (anteriormente conocido


como Java 2 Platform, Enterprise Edition o J2EE hasta
la versión 1.4; traducido informalmente como Java
Empresarial) Es el estándar de la industria para
desarrollar applicaciones Java portables, rebustas,
escalables y seguras en el lado del servidor (server-
side). Basado en Java, proporciona APIs para servicios
web, modelo de componetes, gestión y comunicación.
JAVA EE

 Es decir, desarrollaremos aplicaciones empresariales


distribuidas, con arquitecturas multicapa, escritas en Java
y que se ejecutan en un servidor de aplicaciones.
 Toda aplicación web (sea o no Java EE) se basa para su
funcionamiento en un protocolo cliente-servidor: por un
lado, el usuario abre un navegador (cliente), que le
mostrará una serie de interfaces para la aplicación web a
probar (formularios, enlaces, etc). Interactuando con estos
formularios enviará una serie de órdenes a un servidor
remoto, que las ejecutará, y mostrará al usuario las
páginas con los resultados obtenidos (resultados de una
búsqueda, alta en un sistema de registro, etc).
Java EE

 Java EE proporciona una arquitectura multi-capa. La capa cliente


puede estar constituida por aplicaciones Java de escritorio o
navegadores HTML. Las capas proporcionadas por Java EE
propiamente dicha son las capas Web (mediante las tecnologías
Servlets, JSP y JSF) y las capas de Negocio (mediante tecnologías
como EJB, JMS o Web Services). Por último, estas capas se
comunican con una capa de datos (base de datos o aplicaciones y
sistemas legacy).
Cliente-servidor y protocolo HTTP
 En todo este proceso intervienen varios factores: el cliente envía una serie
de peticiones al servidor, y éste le emite, para cada una su
correspondiente respuesta. En la petición del cliente puede haber una serie
de cabeceras de petición, incluidas por el propio navegador, con información
sobre la petición (tipo de navegador, idiomas aceptados, etc). Por otro lado,
en la respuesta del servidor también pueden incluirse cabeceras de
respuesta, con información sobre el contenido que se envía al navegador
(tamaño del contenido, idioma, fecha de la última modificación, etc). Además,
el servidor envía un código de estado, indicando si la petición previa del
cliente se ha podido responder bien o ha habido errores (por ejemplo, un
código 404 indicará que el servidor no ha podido encontrar la página solicitada
por el cliente).
 Todos estos elementos (cabeceras de petición, cuerpo de la petición, código
de estado de la respuesta, cabeceras de respuesta y texto de la respuesta) se
envían entre cliente y servidor utilizando el protocolo HTTP, que establece la
forma en la que deben separarse estos elementos para enviarse, y la
estructura que debe tener cada bloque
Julian Barney Jaimes Rincon

MVC y JSP
http://www.w3big.com/es/jsp
/default.html

http://www.w3big.com/es/js/
default.html
¿Qué es JAVA?

Es un lenguaje de programación
para añadir interactividad,
dinamismo entre otras
funcionalidades al contenido de
una pagina web. El código de
JavaScript se ejecuta en el
navegador de internet de la
computadora
Objetivo de java

 El principal objetivo del lenguaje Java es


llegar a ser el “nexo universal” que conecte
a los usuarios con la información, esté ésta
situada en el ordenador local, en un
servidor de Web, en una base de datos o en
cualquier otro lugar.
El lenguaje de programación JAVA fue desarrollado para tener las
siguientes características :
 Orientado a objetos. Busca crear objetos o piezas de código autónomo, que pueda interactuar
con otros objetos para resolver un problema.
 Distribuido. Proporciona una colección de clases para su uso en aplicaciones de red, que
permiten abrir sockets y establecer y aceptar conexiones con servidores o clientes remotos.
 Simple. Posee una curva de aprendizaje muy rápida.
 Multihilo. Soporta la sincronización de múltiples hilos de ejecución a nivel de lenguaje.
 Seguro. Se implementaron barreras de seguridad en el lenguaje y en el sistema de ejecución en
tiempo real.
 Independiente de la plataforma. No requiere que sus programas sean compilados ni ligados en
cada máquina.
 En diciembre de 1950 Patrick Naughton,
ingeniero de Sun Microsystems, reclutó a varios
colegas entre ellos James Gosling y Mike
Sheridan para trabajar sobre un nuevo
proyecto conocido como "El proyecto verde".
Con la ayuda de otros ingenieros, empezaron a
trabajar en una pequeña oficina en Sand Hill
Road en Menlo Park, California.
JAVA Y SUS INICIOS

 JAVA surge en 1991 cuando un grupo de ingenieros de Sun


Microsystems trataron de diseñar un nuevo lenguaje de
programación destinado a electrodomésticos. No fue
creado originalmente para la red internet. Sun
Microsysteam comenzó a desarrollarlo con el objetivo de
crear un lenguaje independiente de la plataforma y del
sistema operativo. Para el desarrollo de electrónica de
consumo (dispositivos electrónicos inteligentes , como
televisores, videos, televisores , equipos de música, etc)
JAVA EE

 Es decir, desarrollaremos aplicaciones empresariales distribuidas, con


arquitecturas multicapa, escritas en Java y que se ejecutan en un servidor
de aplicaciones.
 Toda aplicación web (sea o no Java EE) se basa para su funcionamiento
en un protocolo cliente-servidor: por un lado, el usuario abre un navegador
(cliente), que le mostrará una serie de interfaces para la aplicación web a
probar (formularios, enlaces, etc). Interactuando con estos formularios
enviará una serie de órdenes a un servidor remoto, que las ejecutará, y
mostrará al usuario las páginas con los resultados obtenidos (resultados
de una búsqueda, alta en un sistema de registro, etc).
Java Script
JavaScript
 No, JavaScript no puede conectarse directamente a MySQL ya que JavaScript es un lenguaje
de scripting del lado del cliente (Exception Node. js). Necesita una capa intermedia como la API
RESTful para acceder a los datos. 
 LocalStorage y SessionStorage: ¿Qué son?
 localStorage y sessionStorage son propiedades que acceden al objeto Storage y tienen la función
de almacenar datos de manera local, la diferencia entre éstas dos es que localStorage almacena
la información de forma indefinida o hasta que se decida limpiar los datos del navegador y
sessionStorage almacena información mientras la pestaña donde se esté utilizando siga abierta,
una vez cerrada, la información se elimina.
Javascript
Lenguaje de programación que permite programar ciertos
comportamientos sobre las páginas web, respondiendo a la interacción
del usuario y la realización de automatismos sencillos. Actualmente,
además de internet se encuentra nativo en sistemas operativos y
dispositivos, del lado del servidor y del cliente.

Se utiliza, entre otros aspectos para:


a. validar formularios, mostrar cajas de diálogo, etc.
b. Motor de las aplicaciones más conocidas en el ámbito de Internet:
Google, Facebook, Twitter, Outlook...
c. Aplicaciones Web tienen su núcleo realizado en Javascript.
d. La Web 2.0 se basa en el uso de Javascript para implementar
aplicaciones enriquecidas que son capaces de realizar todo tipo de
efectos, interfaces de usuario y comunicación asíncrona con el
servidor por medio de Ajax.
Javascript funciona "del lado del cliente"

Donde se ejecuta es en el navegador (cliente web),


en contraposición a lenguajes como JSP que se ejecutan
del "lado del servidor".

El cliente en su navegador soporta la carga de


procesamiento. Gracias a su compatibilidad con todos
los navegadores modernos se ha convertido en un
estándar como lenguaje de programación del lado del
cliente.
La etiqueta <script>
En HTML, JavaScripts se debe insertar dentro de las
etiquetas <script> y </script>.

El código JavaScripts puede ser ubicado en las secciones


<body> o en <head> de una página html

La etiqueta <script> y </script> indica donde inicia y


donde termina el código JavaScript. El código inserto
dentro de estas etiquetas es código JavaScript
Funciones y Eventos JavaScript

El código JavaScript se ejecuta cuando ocurre un


evento, como por ejemplo el click a un botón.

El código JavaScript dentro de function, puede ser


invocado cuando el evento ocurre.
Primer Ejemplo
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
</head>
<body>

<button type="button"

onclick="document.getElementById('AcaSale').innerHTML
= Date()">
Prima para mostrar la hora y fecha.</button>
<p id="AcaSale"></p>

</body>
</html>
Por cada nuevo ejemplo
cree un nuevo archivo
html en el proyecto
<!DOCTYPE html> JavaScript en el Encabezado
<html>
<head>
<script>
function FuncionDarClick() {
document.getElementById("AcaSale").innerHTML =
"Este es el texto que aparece despues de dar click en el
boton.";
}
</script>
</head>

<body>
<h1>Bienvenido a mi Pagina</h1>
<p id="AcaSale">Este es el primer texto que aparece.</p>
<button type="button"
onclick="FuncionDarClick()">Prueba la Funcion</button>
</body>
</html>
JavaScript en el Cuerpo
<!DOCTYPE html>
<html>
<body>
<h1>Bienvenido a mi pagina</h1>
<p id="AcaSale">El texto inicial.</p>

<button type="button"
onclick="funcionDarClick()">Cambie el texto</button>
<script>
function funcionDarClick() {

document.getElementById("AcaSale").innerHTML =
"Texto Cambiado.";
}
</script>
</body>
</html>
Desde un Archivo Externo

1. Cree un archivo Java Script File


2. Adicione en este archivo el siguiente texto

function funcionDarClick() {

document.getElementById("AcaSale").innerHTML
= "Texto Cambiado.";
}
Desde un Archivo Externo

3. Luego cree un nuevo archivo html, y adicione el


siguiente código

<!DOCTYPE html>
<html>
<body>
<h1>Bienvenido a mi Pagina</h1>
<p id="AcaSale">El texto original.</p>
<button type="button"
onclick="funcionDarClick()">Intentelo</button>
<script src="index4.js"></script>
</body>
</html>
Escritura de Notaciones
<!DOCTYPE html>
<html>
<body>
<p>Numeros y cadenas literales con o sin notacion.</p>
<p id="AcaSale1"></p>
<p id="AcaSale2"></p>
<p id="AcaSale3"></p>
<p id="AcaSale4"></p>
<script>
document.getElementById("AcaSale1").innerHTML = 123e5;
document.getElementById("AcaSale2").innerHTML =
32100000;
document.getElementById("AcaSale3").innerHTML = 'Comilla
sencilla';
document.getElementById("AcaSale4").innerHTML =
"Comilla Doble";
</script>
</body>
Escritura de Expresiones, Variables, Operadores
<!DOCTYPE html>
<html>
<body>
<p>Evaluacion de Expresiones</p> <p id="AcaSale"></p>
<p>Evaluacion de Variables</p> <p id="AcaSale1"></p>
<p>Evaluacion de Operadores</p> <p id="AcaSale2"></p>
<p>Evaluacion de Asignaciones</p> <p id="AcaSale3"></p>
<script>
document.getElementById("AcaSale").innerHTML = 5 * 10;
var cad;
cad = 6;
document.getElementById("AcaSale1").innerHTML = cad;
document.getElementById("AcaSale2").innerHTML = (5 + 6) * 10;
var x, y, z;
x=6
y = 8;
z = (x + y) * 10;
document.getElementById("AcaSale3").innerHTML = z;
</script>

</body> Las instrucciones se separan con punto y


</html> como, y pueden haber varias instrucciones en
una misma línea
Comentarios en JavaScript
<!DOCTYPE html>
<html>
<body>
<p>Comandos en HTML.</p>
<p id="AcaSale"></p>
<script>
//Este es un ejemplo de comentario
document.getElementById("AcaSale").innerHTML = "Mostrar texto en
HTML.";
/**
* múltiples lineas de comentarios
*/
</script>

</body>
</html>
Visualizar Variables y Objetos
<!DOCTYPE html>
<html>
<body>
<p id="SaleVars"></p>
<p id="SaleObjeto"></p>
<script>
var var1 = "Quien es?";
var var2 = 'Soy yo !! ';
document.getElementById("SaleVars").innerHTML =
var1 + "<br>" +
var2 + "<br>";
var animal = {
nombre: "Fifi",
raza: "Pastor Aleman",
edad: 2,
peloColor: "Cafe"
};

document.getElementById("SaleObjeto").innerHTML =
animal.nombre + " tiene " + animal.edad + " años.";
</script>
</body>
</html>
Java Server Pages JSP
Las JSP

 Son páginas HTML a las que se le inserta código que produce servlets
 Se usan cuando la parte estática de la página que se debe generar es
relativamente importante (la parte que no cambia)
 Al cargarse una página JSP esta se compila, se genera el servlet y se
ejecuta
 Por esto, la primera invocación a una JSP demora más que las
siguientes
Contenido de una JSP

 Una JSP, aparte de código HTML puede contener 3 tipos de


instrucciones :
 Elementos de scripting: son los elementos que definen el comportamiento
dinámico del servlet, es decir su código
 directivas: afectan la estructura general del servlet que resulta de la JSP
(import, include)
 acciones: permiten redirigir el request a otra instancia JSP, servlet o
página HTML
Elementos de scripting
 1. Expresiones de la forma <%= expresión %>, son evaluadas e insertadas en
el output del servlet
 2. Scriptlets son instrucciones Java de la forma <% code %>, que son
insertadas en el método _jspService que se llama cuando se contacta a la
página jsp (el equivalente al doGet)
 3. Declaraciones de la forma <%! code %>, que son insertadas en el cuerpo
de la clase del servlet, fuera de todo método, definiendo así variables de
instancia
Variables predefinidas

 Para simplificar las expresiones, existen variables predefinidas que se


pueden usar. Las más importantes son:
 request, el HttpServletRequest
 response, el HttpServletResponse
 session, el HttpSession asociada al request
 out, el PrintWriter usado para mandar output al cliente
Un Ejemplo (Ejemplo1.jsp)
<HTML>
<HEAD>
<TITLE>JSP Expressions</TITLE>
</HEAD>
<BODY>
<H2>JSP Expressions</H2>
<UL>
<LI>Current time: <%= new java.util.Date() %>
<LI>Your hostname: <%= request.getRemoteHost() %>
<LI>Your session ID: <%= session.getId() %>
<LI>The <CODE>testParam</CODE> form parameter:
<%= request.getParameter("testParam") %>
</UL>
</BODY>
</HTML>
Explicaciones
• El servidor crea un servlet, lo compila y llama
al método _jspService que contiene todas las
sentencias escritas entre <% y %>
• El texto HTML es mandado al cliente por vía
out.print(....)
• Las expresiones se evalúan y se insertan en el
texto que se manda, por lo cual la expresión

<LI>Current time: <%= new java.util.Date() %>

equivaldría en un servlet a hacer

out.println(“<LI>Current time: “+ new java.util.Date() );


Scriptlets
• Si se quiere hacer algo más complicado que insertar
una simple expresión en el output del servlet se
pueden incluir sentencias JAVA en scriptlets que
tienen la siguiente estructura:
<% String queryData = request.getQueryString();
out.println("Attached GET data: " + queryData); %>
• Los Scriptlets tienene acceso a a las mismas
variables definidas automáticamente a las que tienen
acceso las expresiones
• En particular, esto también se pudo haber logrado
con
El string mandado con GET fue: <%= request.getQueryString() %>
pero hay cosas que no se pueden hacer con
expresiones:
<% response.setContentType("text/plain"); %>
Algo más serio (Ejemplo2.jsp)
<HTML> <HEAD> <TITLE>Color Testing</TITLE> </HEAD>
<% String bgColor = request.getParameter("bgColor");
boolean hasExplicitColor;
if (bgColor != null) {
hasExplicitColor = true;
} else {
hasExplicitColor = false;
bgColor = "WHITE";
} %>
<BODY BGCOLOR="<%= bgColor %>">
<H2 ALIGN="CENTER">Color Testing</H2>
<% if (hasExplicitColor)
out.println("You supplied color " +bgColor );

else
out.println("Using background color WHITE..");
%>
</BODY> </HTML>
Usando Scriptlets con código HTML

Para entender esto hay que tener claro que el contenido de


un scriptlet se incluye exactamente como está escrito al
método _jspService y las sentencias HTML se traducen como
un out.println(...contenido de sentencia HTML...) en el mismo
orden en que aparecen en la página jsp
Scriptlets para hacer partes del archivo JSP condicional

Lo siguiente
<% if (Math.random() < 0.5) { %>
Have a <B>nice</B> day!
<% } else { %>
Have a <B>lousy</B> day!
<% } %>

se traduce en el servlet que se genera en lo


siguiente
if (Math.random() < 0.5) {
out.write("\n");
out.write("Have a <B>nice</B> day!\n");
} else {
out.write("\n");
out.write("Have a <B>lousy</B> day! \n");
}
¡¡¡¡ATENCION!!!!: los paréntesis sin absolutamente
necesarios
<% if (Math.random() < 0.5) { %>
Have a <B>nice</B> day!
<% } else { %>
Have a <B>lousy</B> day!
<% } %>

Debido a que el servidor genera lo siguiente

if (Math.random() < 0.5) {


out.write("\n");
out.write("Have a <B>nice</B> day!\n");
} else {
out.write("\n");
out.write("Have a <B>lousy</B> day! \n");
}
Scriptlets para repetir partes del del codigo HTML

<TABLE BORDER=2>
<% for ( int i = 0; i < n; i++ ) {%>        
<TR> <TD>Number</TD> <TD>
<%= i+1 %>
</TD> </TR>        
<% } %>
</TABLE>

Se traduce en ...
out.println(“<TABLE BORDE=2>”);
for ( int i = 0; i < 10; i++ ) {
out.write(" \n");
out.write(" <TR> <TD>Number</TD> <TD>\n");
out.print( i+1 );
out.write(“ \n");
out.write("</TD> </TR> \n");
}
out.write(" \n");
out.write("</TABLE> \n");
Declaraciones
• No generan output, se usan para declarar
variables que más tarde serán usadas en
expresiones o scriptlets
• Una declaración tiene la siguiente forma:
<%! Java Code %>
• Son variables que se declaran globales para
todo el servlet

Un ejemplo (Ejemplo3.jsp) que cuenta cuantas


veces ha sido accesada una página desde que
se cargó:

<%! private int accessCount = 0; %>


Accesses to page since server reboot:
<%= ++accessCount %>
Se pueden declarar Métodos
<%! int factorial(int x) {
int aux = 1;
for (int i = 2; i<=x; i++)
aux = aux * i;
return aux;
}
%>

El método se puede usar después


<% int n = (int)(10*Math.random());%>
El factorial de <%=n%> es <%= factorial(n) %>
Directivas
 Afectan la estructura general del servlet generado
 Ejemplo de directiva page-import
<%@ page import =“java.util.*" %>
El atributo import
 Permite importar clases que no se incluyen automáticamente
 Por ejemplo, se pueden importar las usuales para java
(java.util.*)
 Para las clases definidas por el programador, estas deben estar
en un lugar “visible”. Este lugar depende del servidor
 En tomcat es el mismo directorio en donde están los servlets
(Ejemplo4.jsp con ServletUtilities.java y LongLivedCookie.java)

<%@ page import=”java.util.*" %>


<%@ page import="package.class1,...,
package.classN" %>
Usando JDBC en JSP
<%@page import="com.mysql.jdbc.Driver"%>
<%@page import="java.sql.*"%>
<% Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost/biblioteca";
Connection con =
DriverManager.getConnection(url,"root","root");
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery("select * from personas");
while(rs.next()) {
%>
<br> RUT : <%=rs.getInt(“rut")%>
<%
}
%>
Incluyendo otros archivos
 Es posible hacerlo al momento en que se compila la página con la
directiva
<%@ include file=”nombre del archivo" %>
 Esto implica que se incluirá el archivo referenciado como parte
del actual antes de compilarlo
 El problema es que si el archivo referenciado cambia, no
cambiará en la página que se muestra (a menos que se reinicie el
servidor) (ver contacto.jsp y pprincipal.jsp)
 Se puede hacer que cada vez que se referencie la página incluida
se vuelva a recargar el contenido con la siguiente directiva
<jsp:include page=”nombre del archivo" flush="true" />
(ver noticias.jsp e item1.html, item2.html, item3.html)
Controlando el tipo de salida
 Se hace a través de la directiva
<%@ page contetType=”text/plain" %>
 Se puede usar para determinar cualquier tipo de salida que no sea text/html
 Puede ir en cualquier parte del archivo, a pesar de que en un servlet esto
debe ir antes de mandar cualquier cosa. Esto es porque primero la página se
compila, traduce y luego se ejecuta en el orden adecuado de las directivas
<HTML>
<BODY>
<H2>The contentType Attribute</H2>
<%@ page contentType="text/plain" %>
Esto debe verse como texto plano <B>no</B> como HTML.
</BODY>
</HTML>
Generando salida para excel
 Se hace a través de la misma directiva pero cambiando el tipo de salida que se
generará (ejemplo5.jsp)
<%@ page contentType="application/vnd.ms-excel" %>
<%- entre columnas poner tabs, no espacios.-%>
1997 1998 1999 2000 2001
12.3 13.4 14.5 15.6 16.7
 Tambien se puede lograr lo mismo escribiendo código HTML para generar una
tabla pero poner en la directiva que el contentType es ms-excel (ejemplo6.jsp)
<TABLE BORDER=1>
<TR><TH></TH><TH>Apples<TH>Oranges
<TR><TH>First Quarter<TD>2307<TD>4706
<TR><TH>Second Quarter<TD>2982<TD>5104
<TR><TH>Third Quarter<TD>3011<TD>5220
<TR><TH>Fourth Quarter<TD>3055<TD>5287
</TABLE>
Directiva Forward
 Se usa para redirigir el requerimiento a otra página
 Cuando se ejecuta se va a esa página sin que se tenga que hacer
nada en el browser
 Es equivalente a hacer response.sendRedirect(“servlet2”);
Ejemplo:
<% percent = Math.random();
if (percent < 0.5) {
%>
<jsp:forward page="/forward/one.jsp"/>
<% } else { %>
<jsp:forward page="two.html"/>
<% } %>
errorPage & isErrorPage
 Es posible invocar una determinada página cuando en
otra sucede un error (se lanza una Exception )
 Para ello hay que poner en la página que puede generar
el ellror la directiva
<%@ page errorPage=”una_URL_relativa" %>
 En la página que debe recibir el control
(una_URL_relativa) debe ponerse lo siguiente
<%@ page isErrorPage="true" %>
(ver generaError.jsp y muestraError.jsp)
Java Beans
 Usar Beans es una buena manera de complementar JSP
cuando se requiere de estructuras de datos (clases) que
hagan cosas más complejas, y separar el código de
programación de estas clases de la JSP
 Un Bean es una clase con las siguientes características:
 Tiene un constructor que no tiene parámetros
 No tiene variables públicas
 Para cierto subconjunto de variables privadas llamadas propiedades, si la variable
es de tipo tipo1 y se llama variable1entonces existe un método programado tipo1
getVariable1() que retorna el valor actual de la propiedad y otro void
setVariable1(tipo1 x) que modifica el valor de la variable con el que está dado
como parámetro
Usando Beans en JSP
 Para poder usar Beans con JSP en Tomcat estos deben ir en el mismo
directorio que los servlets
 Creación
 <jsp:useBean id=’bean1' class=’Nombre_Clase' scope=“validez”/>
 Es lo mismo que haber hecho en un programa Java
 Nombre_Clase bean1 = new Nombre_Clase();
 Obtención de valores
 <jsp:getProperty name=”bean1" property=”variable1" />
 <%= book1.getVariable1() %>
 Modificación valores
 <jsp:setProperty name=”bean1” property=”variable1” value=”valor1" />
 <% book1.setVariable1(”valor1"); %>
MVC

 El MVC es un patrón de diseño arquitectónico de software, que sirve para clasificar


la información, la lógica del sistema y la interfaz que se le presenta al usuario. En
este tipo de arquitectura existe un sistema central o controlador que gestiona las
entradas y la salida del sistema, uno o varios modelos que se encargan de buscar los
datos e información necesaria y una interfaz que muestra los resultados al usuario final.
Es muy usado en el desarrollo web porque al tener que interactuar varios lenguajes para
crear un sitio es muy fácil generar confusión entre cada componente si estos no son
separados de la forma adecuada. Este patrón permite modificar cada uno de sus
componentes si necesidad de afectar a los demás.
¿Qué es JSP?

 JSP por sus siglas en ingles Java Server Pages es una tecnología del lado del
servidor que nos permite hacer aplicaciones web.

 Como ya lo hemos dicho en la clase anterior una aplicación web es una página
web generada dinámicamente, es decir, que se genera de acuerdo a la
interacción con el usuario.

¿ Cuales serían Ejemplos de aplicaciones web ?


JSP

 Como se ha dicho anteriormente JSP es una Página HTML con código Java
embebido o integrado, similar a como se maneja PHP.

 Las etiquetas en PHP de apertura y de cierre son <?php y ?>

 En este caso Java funciona similar, sus etiquetas de apertura y cierre son <% y
%>.
JSP
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page Example 1</title>
</head>
<body>
<h1>Hello Student!!</h1>
<%=new java.util.Date()%>
</body>
</html>
Tipo de código JSP

Expresiones
• <%= expresión Java %>

Scriptlets
• <% varias líneas de código Java %>

Declaraciones
• <%! Declaración de variables o métodos %>
Expresiones

<%@page contentType="text/html" pageEncoding="UTF-8"%>


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ejemplo Expresiones en JSP 1</title>
</head>
<body>
<h1>Convirtiendo un texto a mayuscula</h1>
<%=new String(“Barney").toUpperCase() %>
</body>
</html>
Expresiones
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ejemplo Expresiones en JSP 1</title>
</head>
<body>
<h1>Convirtiendo un texto a mayúscula</h1>
<%=new String("Jose Aguilar").toUpperCase() %>
Otra expresión, sumar 1 + 2 <%= 1+2 %>
El número 8 es menor que 15 <%= 8<15 %>
</body>
</html>
Scriptlets
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ejemplo Scriptlets en JSP 1</title>
</head>
<body>
<h1>Bucle For</h1>
<%
for (int i=0;i<10;i++){
out.println("Este es el mensaje: "+i);
}
%>
</body>
</html>
Declaraciones
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ejemplo Scriptlets en JSP 1</title>
</head>
<body>
<h1>Declaraciones</h1>
<%!
private int suma,r;
public int metodosuma(int num1, int num2){
suma = num1+num2;
return suma;
}
%>
<%
r=metodosuma(5,6);
out.println("La suma es: "+r);
%>
</body>
</html>
HTML

 Antes de continuar es importante revisar el desarrollo o conocimientos sobre


HTML para poderlo utilizar en los archivos JSP.

 Para esto se proponen los siguientes ejercicios.


Peticiones en un servidor

A comunicación entre el cliente y el servidor se lleva a cabo mediante el protocolo de comunicación


HTTP el cual consta de peticiones (request) y res- puestas (response).

Entre los tipos de peticiones HTTP más conocidas están: GET y POST, las cuales sirven para pasar
información (parámetros) del cliente al servidor.
Petición GET

La petición GET se utiliza para solicitar datos que están en el servidor, por ejemplo, para solicitar
una página.

Las peticiones GET se pueden guardar en el historial de navegación, se pueden indexar en los
buscadores, o agregar a enlaces favoritos. La información que se envía en el GET normalmente es
una liga. Get contiene mucho menos información que POST.

El tag ancla: <a href=”paginaDestino.jsp”> </a> siempre utiliza el método GET para solicitar la
página destino.
Petición POST

La petición POST sirve para enviar información al servidor para que ésta sea procesada. Una vez que
se procesa, se envía en la respuesta al navegador alguna página con información.

En una petición POST puede viajar mucho más información.

El valor de los parámetros que proporcionó el usuario en una petición POST, se encuentran dentro
de un objeto llamado request.
Ejemplo

<%
// Este es un scriptlet
// Es código en Javaque captura los parámetros enviados
// en el objeto "request"
String nombre = request.getParameter("nombre");
String color = request.getParameter("color");
String color = request.getParameter("color");
%>
Ejercicio
Experto Universitario Java Enterprise

JAVA WEB JSP 2

Sesión: JSTL
Experto Universitario Java Enterprise

Índice
• Introducción: taglibs y JSTL
• La librería Core
• La librería SQL
• La librería de internacionalización
• Otras librerías
Experto Universitario Java Enterprise

Librerías de tags
• Una librería de tags (taglib) es un conjunto de etiquetas HTML
personalizadas que permiten encapsular acciones mediante
código Java

• Cada etiqueta define un nexo entre la página JSP donde se


coloca y el código Java subyacente que se ejecutará cuando
se procese dicha etiqueta
<%@ taglib uri="ejemplo" prefix="ej" %>
<html>
<body>
<h1>Ejemplo de librerias de tags</h1>
<ej:mitag>Hola a todos</ej:mitag>
<br>
<ej:otrotag/>
</body>
</html>
Experto Universitario Java Enterprise

Qué es JSTL
• JSTL (Java Server Pages Standard Tag Library) es un grupo de
librerías de tags estándar que encapsula varias
funcionalidades: SQL, XML, internacionalización...
• Además, dispone de un lenguaje de expresiones que utiliza en sus
etiquetas (el mismo que tiene JSP 2.0)
• Al ser estándar funciona igual en todos los servidores, y
los contenedores pueden reconocerla y optimizar sus
implementaciones
• Disponible a partir de servlets 2.3 y JSP 1.2

• Más información en:


http://java.sun.com/products/jsp/jstl
Experto Universitario Java Enterprise

Librerías
disponibles
Área URI Prefijo

Core (propósito general) http://java.sun.com/jsp/jstl/core c

XML http://java.sun.com/jsp/jstl/xml x

Internacionalización (I18N) http://java.sun.com/jsp/jstl/fmt fmt

SQL http://java.sun.com/jsp/jstl/sql sql


Experto Universitario Java Enterprise

Ejemplo de uso
• Se coloca al principio de cada página JSP la directiva
taglib con cada librería a utilizar
<%@taglib uri=“http://...” prefix=“c” %>

• Dentro de la página, se pueden utilizar dichas


librerías
<c:out ...>

• También hay que copiar los ficheros JAR


correspondientes en el directorio WEB-INF/lib
de nuestra aplicación
Experto Universitario Java Enterprise

Introducción

• La librería Core incluye tags de propósito general para:


• Evaluación de expresiones
• Establecimiento/obtención de valores de parámetros
• Sentencias de control de flujo: condiciones, iteradores...
• Funciones de acceso a URLs

• Normalmente, los tags de esta librería se utilizan con el prefijo “c”


Experto Universitario Java Enterprise

El tag out

• Se utiliza para evaluar el resultado de una expresión y


colocarlo en la salida JSP
<c:out value="valor" [escapeXML="true|false"] [default="valor"]/>

<c:out value="valor" [escapeXML="true|false"]>


Valor por defecto
</c:out>

• Ejemplo:
<c:out value="${datos.ciudad}" default="desconocida"/>
Experto Universitario Java Enterprise

El tag set
• Establece el valor de un atributo en cualquier sección
(param, header, cookie...)
<c:set value="valor" var="variable" [scope="page|request|session|application"]/>
<c:set var="variable" [scope="page|request|session|application"]>
Valor
</c:set>

<c:set value="valor" target="objeto" property="propiedad"/>


<c:set target="objeto" property="propiedad">
Valor
</c:set>

• Ejemplo:
<c:set var=“foo” value=“2”/>
<c:set value=“19” target=“${persona}” property=“edad”/>
<c:out value=“foo vale ${foo} y edad vale ${persona.edad}”/>
Experto Universitario Java Enterprise

El tag if

• Ejecuta su código si se cumple una condición, o guarda el


valor de la comparación en una variable
<c:if test="condicion" var="variable" [scope="page|request|session|application"]/>

<c:if test="condicion" [var="variable"]


[scope="page|request|session|application"]>
Cuerpo
</c:if>

• Ejemplo:
<c:if test="${visitas > 1000}">
<h1>¡Mas de 1000 visitas!</h1>
</c:if>
Experto Universitario Java Enterprise

El tag choose
• Ejecuta una de las opciones when que tiene (la que cumpla
la condición), o la otherwise si ninguna la cumple. Similar
al switch de C o Java

<c:choose>
<c:when test="condicion1">codigo1</c:when>
<c:when test="condicion2">codigo2</c:when>
...
<c:when test="condicionN">codigoN</c:when>
<c:otherwise>codigo</c:otherwhise>
</c:choose>

• Ejemplo:
<c:choose>
<c:when test="${a < 0}"><h1>a menor que 0</h1></c:when>
<c:when test="${a > 10}"><h1>a mayor que 10</h1></c:when>
<c:otherwise><h1>a entre 1 y 10</h1></c:otherwhise>
</c:choose>
Experto Universitario Java Enterprise

El tag forEach
• Repite su código recorriendo un conjunto de objetos o
un número de iteraciones
<c:forEach [var="variable"] items="conjunto" [varStatus="variableEstado"]
[begin="comienzo"] [end="final"] [step="incremento"]>
codigo
</c:forEach>

<c:forEach [var="variable"] [varStatus="variableEstado"] begin="comienzo"


end="final" [step="incremento"]>
codigo
</c:forEach>

• Ejemplo:
<c:forEach var="item" items="${cart.items}">
<c:out value="${item.valor}"/>
</c:forEach>
Experto Universitario Java Enterprise

El tag forTokens
• Similar a forEach pero recorre una cadena, separando por
los delimitadores indicados

• La sintaxis es la misma que forEach, pero con un


atributo delim que es obligatorio, e indica los
delimitadores de la cadena

• Ejemplo:
<c:forTokens var="item" items="un#token otro#otromas" delims="# ">
<c:out value="${item}"/>
</c:forEach>

• Sacaría 4 tokens: “un”, “token”, “otro” y “otromas”


Experto Universitario Java Enterprise

Los tags import y param


• import se utiliza para importar el contenido de una URL

• Internamente, puede utilizar tags param (otros tags


también pueden utilizarlo) para especificar parámetros de
la URL

• Ejemplo: <c:import url="http://localhost/mipagina.jsp" var="varurl">


<c:param name="id" value="12"/>
</c:import>

<c:out value=“${varurl}”/>

• Equivaldría a importar el contenido de http://


unapagina.com?id=12
Experto Universitario Java Enterprise

Ejemplo de uso
<html>
<body>
<form action="request.jsp">
Nombre: <input type="text" name="nombre"><br>
Descripcion: <input type="text" name="descripcion"><br>
<input type="submit" value="Enviar">
</form>
</body>
</html>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>


<html>
<body>
Nombre: <c:out value="${param.nombre}"/><br>
<c:if test="${not empty param.descripcion}">
Descripcion: <c:out value="${param.descripcion}"/>
</c:if>
</body>
</html>
Experto Universitario Java Enterprise

Introducción
• La librería SQL permite acceder y manipular información de
bases de datos. Podremos:
• Establecer la base de datos a la que acceder
• Realizar consultas a bases de datos (SELECT)
• Acceder a los datos de las consultas realizadas
• Actualizar la BD (INSERT, UPDATE, DELETE)
• Agrupar operaciones en una sola transacción

• Normalmente, los tags de esta librería se utilizan con el prefijo


“sql”

• Las operaciones se realizan sobre un objeto


javax.sql.DataSource, accediendo a su
objeto Connection
Experto Universitario Java Enterprise

El tag setDataSource
• Permite definir el objeto DataSource con el que trabajar,
y dejarlo asignado a una variable
<sql:setDataSource {dataSource="DataSource" | url="url" [driver="driver"]
[user="usuario"] [password="password"]}
[var="variable"] [scope="page|request|session|application"]
/>

• Podemos obtener el DataSource directamente de una


variable precalculada, o indicando url, driver, login y password
• Ejemplo:
<sql:setDataSource
url="jdbc:mysql//localhost/miBD" driver="com.mysql.jdbc.Driver"
user="root" password="mysql" var="miDataSource"
/>
Experto Universitario Java Enterprise

El tag query
• Permite definir una consulta SELECT

<sql:query sql="consulta" var="variable"


[scope="page|request|session|application"]
[dataSource="DataSource"] [maxRows="max"]
[startRow="inicio"]/>

<sql:query sql="consulta" var="variable"


[scope="page|request|session|application"]
[dataSource="DataSource"] [maxRows="max"]
[startRow="inicio"]>
<sql:param ...> ...
</sql:query>

<sql:query var="variable" [scope="page|


request|session|application"]
[dataSource="DataSource"] [maxRows="max"]
[startRow="inicio"]>
Consulta
<sql:param ...> ...
</sql:query>
Experto Universitario Java Enterprise

El tag update
• Permite definir INSERT, UPDATE o
DELETE

<sql:update sql="actualizacion"
[dataSource="DataSource"] [var="variable"]
[scope="page|request|session|application"]/>

<sql:update sql="actualizacion"
[dataSource="DataSource"] [var="variable"]
[scope="page|request|session|application"]>
<sql:param ...> ...
</sql:update>

<sql:update [dataSource="DataSource"] [var="variable"]


[scope="page|request|session|application"]>
Actualización
<sql:param ...> ...
</sql:update>
Experto Universitario Java Enterprise

El tag transaction
• Permite agrupar dentro varios query y/o update que
forman una transacción unitaria

<sql:transaction [dataSource="${varBD1}"] [isolation="nivel"]>


<sql:query.../>
<sql:update.../>
<sql:query.../>
<sql:query.../>
<sql:update.../>
</sql:transaction>
Experto Universitario Java Enterprise

El tag param
• Se utiliza internamente en query y update si la consulta
o actualización necesita parámetros

• Se colocan ? en las zonas de la query que necesiten


parámetros, y luego dentro del tag tantas etiquetas param
como parámetros haya

• Cada etiqueta sustituye a un ?, por orden


<sql:query sql=“SELECT * FROM datos WHERE nombre=?
AND descripcion=?” var=“var1” dataSource=“${varBD1}”>
<sql:param value=“pepe”/>
<sql:param value=“mi descripcion”/>
</sql:query>
Experto Universitario Java Enterprise

Ejemplo de uso
<!-­
‐– OBTENEMOS LA CONEXIÓN ‐-‐-­>­
<sql:setDataSource url=“jdbc:mysql//localhost/miBD”
driver=“com.mysql.jdbc.Driver” user=“usuario1”
password=“password1” var=“varBD1” />

<!-­
‐– REALIZAMOS LA CONSULTA/ACTUALIZACION ‐-‐-­>­
<sql:query sql=“SELECT * FROM datos WHERE nombre=?
AND descripcion=?” var=“var1” dataSource=“$
{varBD1}”>
<sql:param value=“pepe”/>
<sql:param value=“mi descripcion”/>
</sql:query>

<!-­
‐– RECORREMOS LOS DATOS ‐-‐-­>­
<c:forEach var=“item” items=“${var1.rows}”>
<c:out value=“${item.nombre}”/>
</c:forEach>
Experto Universitario Java Enterprise

La librería de
internacionalización
• Permite adaptar aplicaciones Web a convenciones de idioma,
formato, moneda o fecha de una determinada región

• Se tienen etiquetas para la internacionalización propiamente


dicha, y para dar formatos determinados a monedas,
fechas, números... etc
Experto Universitario Java Enterprise

El tag formatNumber
• Permite dar formato a un número e indicar con
cuántos decimales queremos que se muestre

<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"]... />

<fmt:formatNumber value="${num}" maxFractionDigits="3"


minFractionDigits="3"/>
Experto Universitario Java Enterprise

El tag formatDate
• Permite dar formato a una fecha e indicar con qué
formato queremos que se muestre

<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"]... />

<fmt:formatDate value="${miFecha}" pattern="dd/MM/yyyy-­



hh:mm:ss"/>
Experto Universitario Java Enterprise

XML y funciones
• La librería XML se emplea para acceder y procesar el contenido
de ficheros XML. Normalmente suele utilizarse con el prefijo
“x”. En ella existen
• Tags principales: para explorar el fichero XML
• Tags de control de flujo
• Tags de transformación: que aplican hojas XSLT

• La librería de funciones (fn) recopila una serie de funciones


que introducir dentro del lenguaje de expresiones (sustituir en
cadenas, concatenar, etc).
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
La cadena tiene <c:out value="${fn:length(miCadena)}"/> caracteres

También podría gustarte