Está en la página 1de 38

Programa de Capacitación para la Tecnología de

Negocios en la Web
Volumen 1: Introducción a la Computación Empresarial y JavaBeans

Volumen 2: Componentes Web I (Servlets)

Volumen 3: Componentes Web II (JSP)


Volumen 1: Introducción a la Computación Empresarial y JavaBeans

Conceptos Básicos de Computación Distribuída


Computación Local
Los componentes comparten un espacio de direcciones comunes para
comunicarse

Computación Distribuída
Los programas realizan llamadas a otros espacios de direcciones
generalmente de otras máquinas

Middleware
Software para sistemas distribuídos que apunta a ocultar
heterogeneidad de las redes subyacentes , hadware, sistema operativo y
lenguajes de programación

RMI (Invocación a Métodos Remotos)
Modelo de programación basado en objetos en el cual un objeto en un proceso
puede invocar al método de un objeto en otro proceso que reside en una
máquina diferente
Volumen 1: Introducción a la Computación Empresarial y JavaBeans

Tecnologías de Computación Distribuída


RPC (Llamada a Procedimiento Remoto)
Es una tecnología general donde un proceso cliente invoca a un procedimient
en un proceso servidor, generalmente en un sistema remoto

Java RMI
Implementación proporcionada por Java la cual permite que se pueda
invocar a un método de un objeto situado en otra JVM

DCOM (Modelo de Objeto de Componentes Distribuído)
Extensión de COM para soportar la comunicación entre objetos situados en
diferentes computadores basados en Windows

CORBA (Arquitectura Común de Intermediarios en Peticiones a Objetos )
Especificación para el diseñi Middleware que hace posible que objetos
escritos usando diferentes lenguajes puedan comunicarse entre si

Servicios Web
Permiten hacer llamadas a procedimientos remotos contra un objeto sobre la
red
Volumen 1: Introducción a la Computación Empresarial y JavaBeans

Java RMI


Mecanismo de Trabajo
El registro crea un socket en un numero de puerto y espera las peticiones de
los clientes . Cuando un cliente solicita una referencia a un objeto remoto, el
registro lo entrega al cliente. Seguidamente, el cliente se comunica con el
objeto remoto y no se requiere del registro para invocar los métodos

Cómo escribir una aplicación RMI
1. Definir una interfaz remota

2. Definir una clase que implemente la interfaz remota

3. Generar el stub y los archivos de la clase skeleton usando rmic.exe

4. Definir la clase ayudante (helper class)

5. Definir una clase que invoque los métodos del objeto remoto

6. Iniciar el registro

7. Ejecutar el helper

8. Ejecutar el cliente
Volumen 1: Introducción a la Computación Empresarial y JavaBeans

Servicios de Nombres y Directorios


Servicio de Nombres
Característica que ayuda a asociar un nombre con un objeto, proporcionando
una interfaz para que los clientes puedan acceder al objeto


Servicio de Directorios
Posee características similares al Servicio de Nombres , adicionalmente
también asocia atributos con el objetos


Problemas

La forma en que un programa de aplicación accede a un producto es
totalmente diferente a la manera en que otro programa lo accede.

Cambiar de servicios significa reescribir el programa de aplicación. Un
problema similar es el de los usuarios de bases de datos para los que JDBC
fue una solución.
Volumen 1: Introducción a la Computación Empresarial y JavaBeans

JNDI


JNDI
JNDI fue presentado para proporcionar a los programadores de Java de una
interfaz común para acceder a los diferentes servicios de nombres y
directorios productos de diferentes proveedores

JNDI para acceder al sistema de Archivos ...
try {
Hashtable props = new Hashtable();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
props.put(Context.PROVIDER_URL, "file:c:\\TEMP");
Context cotx = new InitialContext(props);
Object fobj = cotx.lookup("test.txt");
System.out.println(fobj);
} catch (Exception e) {
e.printStackTrace();
}
Volumen 1: Introducción a la Computación Empresarial y JavaBeans

Servicios de Nombres y Directorios


Diferentes Servicios de Nombres y Directorios
1. RMI: Servicio de Nombres con sistema plano
2. Nombrado COS : Servicio de Directorio para enlazar objetos CORBA
3. NIS (Servicio de Información en Red): Servicio de Directorio utilizado para
almacenar información que debe ser compartida en la red. Es un producto de
Sun Microsystems
4. NDS : Mantiene un directorio de información que va a ser accedida desde
cualquier punto de la red. Es un producto Novell.
5. IBM WAS : Servicio de Directorio que ofrece acceso compartido a
componentes Java.
6. Servicios que usan el Protocolo LDAP: a través de este protocolo todos
los servicios se acceden de la misma forma utilizando convenciones de
nombres y separadores
Volumen 1: Introducción a la Computación Empresarial y JavaBeans

DataSources


Mecanismo de Trabajo
Los objetos DataSources permiten manejar un pool de conexiones a una base
de datos sin necesidad de conocer las especificaciones y detalles técnicos
de la misma.

Pasos para crear un objeto DataSource y acceder a una Base
de Datos
1. Crear un initialContext para el servicio JNDI

2. Realizar una búsqueda utilizando el metodo lookup()

3. Hacer un casting del objeto retornado por el método lookup() a

javax.sql.DataSource
4. El método getConnecction() de la interfaz javax.sql.DataSource se invoca

sobre el objeto DataSource que devuelve el objeto javax.sql.Connection


Volumen 1: Introducción a la Computación Empresarial y JavaBeans

DataSources


Ejemplo de un programa que obtiene una conexión a una base de
datos

Context cotx=new InitialContext(props);
DataSource ds = (DataSource) cotx.lookup("java:comp/env/jdbc/sampledatasource");
Connection con=ds.getConnection();
...
Volumen 1: Introducción a la Computación Empresarial y JavaBeans

JavaBeans


Requerimientos
1. Debe ser instanciable
2. Debe tener un constructor sin argumentos
3. Debe ser serializable
4. Debe seguir las convenciones de nombres definidas para sus métodos y
accesorios

Propiedades
1. Propiedades: Atributos o variables de un bean
2. Métodos : Comportamientos que muestran un bean
3. Eventos: Indican que algo ha cambiado en un bean
4. Propiedad Bound : Capacidad de actualizar a los elementos dependientes
con relación al valor de una propiedad que ha cambiado
5. Propiedad Constrained : El cambio del valor de una propiedad cambia solo
si los listeners notificados del cambio, lo aprueban
Volumen 1: Introducción a la Computación Empresarial y JavaBeans

J2EE (Java 2 Platform Enterprise Edition)


Qué es J2EE?
Es una especificación unificada para desarrollar aplicaciones empresariales
distribuidas a través de un modelo de aplicaciones basado en componentes.
Los componentes dependen de las entidades de nivel del sistema, conocidas
como contenedores.

Ventajas de J2EE
1. Arquitectura y Desarrollo simplificado

2. Escalabilidad

3. Desarrollo, Prueba y Despliegue

4. Integración

5. Seguridad Flexible
Volumen 2: Componentes WEB – I (Servlets)

Mecanismo GET y POST


GET

La información ingresada por el usuario se agrega al URL

Existe una restricción en la cantidad de datos que pueden ser pasados como
parte del URL

El Método GET es el método de pedido HTTP más usado

Los datos del formulario son pasados al servidor como una cadena de
consulta en el URL

El cuerpo del pedido es vacío


POST

Los parámetros del formulario se almacenan en el cuerpo de la solicitud

Las desventajas del método GET son superadas por el método POST

Cualquier cantidad de datos pueden ser enviados al servidor
Volumen 2: Componentes WEB – I (Servlets)

SERVLETS


Qué es un Servlet?
Es un programa del lado del servidor escrito en Java que reside y se ejecuta en
un servidor web y extiende la funcionalidad del servidor web para entregar
contenido dinámico

Tareas que puede llevar a cabo un Servlet

Generar paginas web dinámicas

Actuar como interfaz entre el cliente y los recursos del lado del servidor

Mantener información de estado y sesión del cliente

Proporcionar servicios de autenticación

Redireccionar solicitudes a otros programas de lado del servidor

Ventajas del uso de Servlets

Independencia del hardware

Bajas probabilidades de violaciones de seguridad

Reutilización de código

Interacción con otros componentes
Volumen 2: Componentes WEB – I (Servlets)

SERVLETS


Consejos para escribir Servlets

Deben implementar directa o indirectamente la interfaz Servlet

Invocar el método doxxxxx () dependiendo del tipo de solicitud

Obtener el flujo del objeto HttpServletResponse para comunicarse con el
cliente

Todos los Servlets deben ser parte de una aplicación web
Volumen 2: Componentes WEB – I (Servlets)

SERVLETS


Código para un Servlet sencillo
import javax.servlet.http.*
import javax.servlet.*;
import java.io.*;
public class WelcomeServlet extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


PrintWriter out= resp.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>Welcome Servlet</TITLE></HEAD>");
out.println("<BODY GCOLOR=#CCCCFF>");
out.println("<H3><I><CENTER>”);
out.println(“Sample HTML page generated from Servlet”);
out.println(“</CENTER></I></H3>");
out.println("<HR>");
out.println("<H2><I><CENTER>”);
out.println(“Welcome To the World of Servlet Programming!!”);
out.println(“</CENTER></I></H2>");
out.println("<HR>");
out.println("</BODY></HTML>");
}
}
Volumen 2: Componentes WEB – I (Servlets)

Contenedores Web


Funcionamiento de los Contenedores Web

Soporta la API Servlet y proporciona un entorno en tiempo de ejecución para
su funcionamiento

Administra el ciclo de vida de los Servlets

Cumple su función de alojamiento de Servlets

Actúa como puente entre el Servidor Web y los Servlets

Implementaciones Disponibles de Contenedores Web

WebSphere Application Server

WebLogic

Open Network Environment

Tomcat Server
Volumen 2: Componentes WEB – I (Servlets)

Interacción con el Contenedor Web


Volumen 2: Componentes WEB – I (Servlets)

Ciclo de Vida del Servlet


El contenedor web
debe localizar el
Servlet y luego
cargar la clase del
El contenedor libera Servlet en la JVM
el Servlet ,
haciéndolo elegible
al recolector de La instanciación del
basura Servlet ocurre
cuando se inicia el
contenedor o
cuando el cliente
hace la primera
solicitud para el
Servlet
El método destroy ()
libera los recursos
utilizados, El Servlet obtiene
acceso a los
recursos que
necesita para dar
servicio a las
solicitudes del
cliente
El método service()
da servicio al pedido
del cliente, genera la
respuesta y envía la
respuesta al
contenedor. El
contenedor pasa la
respuesta al cliente
Volumen 2: Componentes WEB – I (Servlets)

Filtros en Servlet


Funcionamiento de los Filtros en Servlet

Son una clase de Java que pueden interceptar y manipular solicitudes de los
clientes antes de que estas accedan a los recursos de la aplicación

Pueden interceptar y manipular respuestas de los recursos de la aplicación
antes que sean enviadas a los clientes finales.

Son objetos de una clase de java que implementa la interfaz
javax.servlet.Filter

Cuando el contenedor web recibe una petición , verifica si hay un filtro
asociado al recurso solicitado. Si es así, la petición es enviada al filtro

Cuando una petición Servlet llega al servidor se ejecutaran de 0 a N filtros

El orden de ejecución esta determinado por el orden en el que se ubiquen los
filtros en el descriptor de despliegue
Volumen 2: Componentes WEB – I (Servlets)

Filtros en Servlet


Metodos de la interfaz javax.servlet.Filter

init(): Construye el objeto de configuración del filtro

destroy(): Coloca el filtro fuera de servicio

doFilter(): Realiza el trabajo de filtrado sobre la petición o respuesta


Ciclo de Vida de un Filtro

El servidor llama al método init() para inicializar el filtro

Se invoca al método doFilter() para realizar la acción de filtrado

El filtro luego llama a método chain.doFilter() para transferir el control al
nuevo filtro

El servidor llama al método destroy() para indicar que el filtro está fuera de
servicio
Volumen 2: Componentes WEB – I (Servlets)

Jerarquía de Clases del Servlet Especifica los


métodos que
invocara el
contenedor en el
Servlet. Define los
métodos init(),
service() y destroy()

Clase abstracta que


proporciona una
implementación
básica de la interfaz
Servlet

Proporciona
implementación
especifica para
HTTP de la interfaz
Servlet
Volumen 2: Componentes WEB – I (Servlets)

Administración de Sesiones


Técnicas de Administración de Sesiones

Cookies: Es una pieza de informacion textual enviada por el servidor al
cliente, almacenada en el disco duro del cliente y devuelta al cliente en
solicitudes posteriores

Campos Ocultos : El servidor incorpora campos ocultos en cada formulario
HTML presentado al usuario. El cliente no puede ver ni modificar los campos
ocultos

Reescritura de URL : Todos los hiperenlaces proporcionados por el cliente
tienen el sessionID agregado a ellos

Sesiones de Secure Socket Layer (SSL): Protocolo usado para autenticar
el servidor al cliente y viceversa
Volumen 2: Componentes WEB – I (Servlets)

Administración de Sesiones usando el Java Servlet API



Interfaz HttpSesionListener
Los objetos oyentes que implementen esta interfaz son notificados cuando
ocurren cambios sobre la lista de sesiones activas para una aplicación web

Interfaz HttpActivationListener
Los objetos que implementan interfaz son notificados cuando ocurren cambios
de persistencia de sesión dentro de la lista de sesiones activas del
contenedor web

Interfaz HttpSessionBindingListener
Cuando los objetos que implementan esta interfaz son agregados a la sesión,
el contenedor web le notifica al objeto que ha sido enlazado a la sesión

Interfaz HttpSessionAttributeListener
Cuando los objetos que implementan esta interfaz son agregados ,
reemplazados o removidos, el contenedor web notifica al objeto sobre la
situación. Este objeto es manipulado como un atributo de una sesión
Volumen 3: Componentes WEB - II (JSP)

Tecnología JSP (Java Server Page)


Permite los scripts de lado del servidor, donde el contenido estático es
generado usando HTML, mientras que el contenido dinámico es generado
usando código script

La tecnología JSP se extiende desde HTML a código Java embebido de
forma transparente en las páginas HTML

Representa una forma mejorada de escribir los Servlets

Separa la información de la presentación de la lógica de la aplicación
Volumen 3: Componentes WEB - II (JSP)

Arquitectura JSP

1. El motor JSP recibe una


solicitud del servidor web
2. El motor JSP carga el jsp
al sistema de archivos y
traduce el código fuente
jsp a un Servlet.
Posteriormente compila el
código fuente del Servlet
3. El código compilado
procesa cualquier solicitud
del navegador para este
JSP en función de generar
la respuesta respectiva al
cliente
El Servlet generado puede extenderse de las
siguientes clases:

Especificada por el autor

Una clase que implementa la interfaz JspPage
Volumen 3: Componentes WEB - II (JSP)

Etiquetas Básicas JSP


Elemento JSP <% Sintaxis %> Sintaxis XML

Directiva page <%@ page attribute="value" <jsp:directive.page


%> [attribute="value"*] />
Directiva include <%@ include <jsp:directive.include
file="filename" %> file="filename" />
<jsp:declaration>
Declaraciones <%! java declarations %> java declarations
</jsp:declaration>
<jsp:expression>
Expresión <%= expression %> java-expression
</jsp:expression>
<jsp:scriptlet>
Scriptlet <% java-statements %> java-statements
</jsp:scriptlet>
Comentario HTML <!-- JSP comment --> --

Comentario JSP <%-- JSP comment --%> --


Volumen 3: Componentes WEB - II (JSP)

Funcionamiento de la directiva page



Ejemplo 1

<%@ page import=”java.util.Date” session=”true” info=”Example program to demonstrate the use of JSP page directive”
errorPage=”Error.jsp” isErrorPage=”false” isThreadSafe=”false” %>
<HTML>
<HEAD>
<TITLE>Hello World JSP Example with Current Time
</TITLE>
</HEAD>
<BODY>
Hello World. The local server time is <%= new Date() %>.
</BODY>
</HTML>


Ejemplo2
<%@ page isErrorPage="true" %>
<HTML>
<HEAD><TITLE>Error Page </TITLE></HEAD>
<BODY>
<H2>Exception has occurred</H2>
<TABLE border="1">
<TR>
<TH>Exception</TH> <TD><%=exception %></TD>
</TR>
<TR> <TH>Message</TH> <TD><%=exception.getMessage() %></TD>
</TR>
</TABLE>
</BODY>
</HTML>
Volumen 3: Componentes WEB - II (JSP)

Etiquetas de Acción Estándar JSP



Mecanismo de Funcionamiento
El motor JSP al encontrarse en presencia de una etiqueta de acción estándar
durante la traducción de un JSP en un Servlet, lo reemplaza por el código
Java que proporciona la implementación de la etiqueta.

Categorías

1. Etiquetas de Acción Estándar utilizando componentes JavaBeans


<jsp:useBean> ,<jsp:setProperty>, <jsp:getProperty>

2. Etiquetas de Acción Estándar que controlan el incluir y reenviar


solicitudes en tiempo de ejecución
<jsp:include> , <jsp:forward>, <jsp:param>

3. Etiquetas de Acción Estándar que prepara HTML para plug-in Java


Volumen 3: Componentes WEB - II (JSP)

Etiquetas de Acción Estándar JSP



Mecanismo de Funcionamiento
El motor JSP al encontrarse en presencia de una etiqueta de acción estándar
durante la traducción de un JSP en un Servlet, lo reemplaza por el código
Java que proporciona la implementación de la etiqueta.

Categorías

1. Etiquetas de Acción Estándar utilizando componentes JavaBeans


<jsp:useBean> ,<jsp:setProperty>, <jsp:getProperty>

2. Etiquetas de Acción Estándar que controlan el incluir y reenviar


solicitudes en tiempo de ejecución
<jsp:include> , <jsp:forward>, <jsp:param>

3. Etiquetas de Acción Estándar que prepara HTML para plug-in Java


Volumen 3: Componentes WEB - II (JSP)

Etiquetas Personalizadas JSP



Mecanismo de Funcionamiento

Permiten a los desarrolladores definir sus propias extensiones para etiquetas
JSP

Están basadas en etiquetas XML

Permiten que funcionalidades complejas sean encapsuladas dentro de
etiquetas simples

Evitan que enormes bloques de código Java se incluyan en los JSPs

Las etiquetas personalizadas que se relacionan pueden ser clasificadas en
grupos llamados librerías de etiquetas
Volumen 3: Componentes WEB - II (JSP)

Etiquetas Personalizadas JSP


Ejemplo para la implementación de una etiqueta personalizada


Paso 1: Crear el JSP
<%@ page import="java.util.*" %>
<%@ taglib uri="/CustomTags/" prefix="simple" %>
<HTML>
<HEAD><TITLE>Ejemplo de un Simple Custom Tag</TITLE></HEAD>
<BODY>
<%Calendar calendar = Calendar.getInstance();
int hr = calendar.get(Calendar.HOUR_OF_DAY);
int min=calendar.get(Calendar.MINUTE);
int sec=calendar.get(Calendar.SECOND);
%>
<FONT size="5" color="#0065CE">
<simple:greeting/>
La Hora es: <%=hr%>:<%=min%>:<%=sec%>
</FONT>
</BODY>
</HTML>
Volumen 3: Componentes WEB - II (JSP)

Etiquetas Personalizadas JSP


Ejemplo para la implementación de una etiqueta personalizada


Paso 2: Crear la clase Manejadora de la Etiqueta
import javax.servlet.jsp.*;
import java.util.*;
import java.io.*;
import javax.servlet.jsp.tagext.TagSupport;
 
public class GreetingTagHandler extends TagSupport {

public int doStartTag() throws JspTagException {


return EVAL_BODY_INCLUDE;
}
public int doEndTag() throws JspTagException {
Calendar calendar = Calendar.getInstance();
int hr = calendar.get(Calendar.HOUR_OF_DAY);
try {
if (hr < 12)
pageContext.getOut().write("Good Morning.");
Volumen 3: Componentes WEB - II (JSP)

Etiquetas Personalizadas JSP


Ejemplo para la implementación de una etiqueta personalizada


Paso 2: Crear la clase Manejadora de la Etiqueta
else
if (hr < 16)
pageContext.getOut().write("Good Afternoon.");
else
if (hr < 19)
pageContext.getOut().write("Good Evening.");
else
pageContext.getOut().write("Good Night.");
} catch (IOException ex) {
throw new JspTagException("Fatal error:greeting tag could not write to the output stream");
}
return EVAL_PAGE;
}//fin del metodo doEndTag()
}//fin de la Clase
Volumen 3: Componentes WEB - II (JSP)

Etiquetas Personalizadas JSP


Ejemplo para la implementación de una etiqueta personalizada


Paso 3: Crear el Descriptor de Librería de Etiqueta

El Descriptor de Librería de Etiquetas (Tag Library Descriptor-TLD) es un
documento XML con la extensión .tld conforme con el DTD dado por Sun
Microsystems

El TLD corresponderá a la etiqueta personalizada <simple:greeting> con su
clase manejadora GreetingTagHandler.java
Volumen 3: Componentes WEB - II (JSP)

Etiquetas Personalizadas JSP


Ejemplo para la implementación de una etiqueta personalizada


Paso 4: Escribir el TLD

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd>
<taglib>
<tlibversion> 1.0 </tlibversion>
<jspversion> 1.1 </jspversion>
<shortname> simple </shortname>
<info> A sample tag library. </info>
<tag>
<name> greeting </name>
<tagclass>
wsad.volume3.unit7.example1.GreetingTagHandler
</tagclass>
<bodycontent> empty </bodycontent>
<info> Simple tag which displays a greeting </info>
</tag>
</taglib>
Volumen 3: Componentes WEB - II (JSP)

Etiquetas Personalizadas JSP


Ejemplo para la implementación de una etiqueta personalizada


Paso 5: Actualizar el Web.xml

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"


"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app id="WebApp">
<display-name>CustomTags</display-name>
...
<taglib>
<taglib-uri> /CustomTags </taglib-uri>
<taglib-location>
/WEB-INF/tlds/greeting.tld
</taglib-location>
</taglib>
</web-app>

También podría gustarte