domingo, 9 de diciembre de 2018

Sesión 2

Agenda 

  • Arquitectura de una aplicación web
            - Definición de aplicación web
            - Ventajas y desventajas de aplicaciones web
            - Aplicaciones cliente servidor
            - Principios de diseño en la construcción de aplicaciones web 
  • Componentes para la construcción de aplicaciones web usando Java
             - Concepto de servlet, HttpSession, Java Server Pages (JSP´s)
             - Diferencias de JSP´s con HTML.
             - Scriplets de código en JSP (código, expersión y declaración)
             - Directivas (page, include, taglib)
  • Referencias

Arquitectura de una aplicación web


¿Qué es una aplicación WEB?



Una aplicación web se accede por parte de los usuarios de internet que utilizan un navegador como cliente. La aplicación web se compone de una colección de programas del lado del cliente y del servidor entre ellos, páginas HTML y otros recursos, que pueden extenderse a través de múltiples servidores, o en toda la World Wide Web (web).

Ventajas y desventajas de las aplicaciones web



Concepto de aplicación tipo cliente-servidor

Se refiere a un modelo de comunicación que vincula a varios dispositivos informáticos a través de una red. El cliente, en este ámbito, realiza peticiones de servicios al servidor, que se encarga de satisfacer dichos requerimientos.


Este es el modelo básico para para describir cómo los programas cooperativos funcionan en el entorno de red. La arquitectura del cliente-servidor, consta de dos partes:

El servidor: escucha las peticiones y proporciona servicios de acuerdo con estas solicitudes.

El cliente: establece una conexión con el servidor, el cual hace la solicitud y luego recibe recursos del servidor


Este tipo de modelo permite repartir la capacidad de procesamiento, donde el servidor puede ejecutarse sobre más de un equipo. Cabe agregar que gran parte de los servicios de internet obedecen a la arquitectura cliente servidor.
El objetivo será expandir el lado del servidor, y mostrar las complejidades adicionales que son parte de una aplicación web.
En el lado de cliente, tradicionalmente las aplicaciones cliente-servidor, el cliente no hace mucho.
La red gestiona y controla la transferencia de datos (el círculo petición respuestas) a través del Protocolo de Transferencia de Hipertexto, o HTTP.

Principios de diseño en la construcción de aplicaciones WEB

Los patrones de diseño proporcionan abstracciones útiles para la construcción de sistemas de software. Es una solución reutilizable para un problema de diseño que implica un conjunto de componentes que interactúan con el fin de resolver un problema de diseño general con cualquier contexto particular. Las aplicaciones web modernas implican una cantidad significativa de complejidad, sobre todo, en el lado servidor. Pero incluso lo que está sucediendo en el lado cliente, en el navegador, se complica con el tiempo. Una aplicación web típica involucra numerosos protocolos, lenguajes de programación y tecnología a través de toda la pila web. De esta manera hace que el desarrollo, mantenimiento y ampliación de aplicaciones web complejas sea extremadamente difícil.

Hay que usar una base de principios de diseños sólidos con el fin de simplificar el desarrollo y mantenimiento de aplicaciones web.

Los ingenieros de software utilizan la abstracción para gestionar la complejidad. No se pueden mantener todos los detalles asociados con un sistema de software grande en la cabeza del ingeniero. La abstracción representa características esenciales de un componente de diseño de software sin incluir los detalles de fondo. Se extrae la complejidad del diseño a través de la representación de los elementos más importantes de este diseño.

El modelo cliente-servidor es un modelo de patrón de diseño. Es una plantilla reutilizable que se puede aplicar en el problema de la comunicación a través de Internet, durante el uso de la World Wide Web que es nuestro contexto de interés.



El punto central de la arquitectura cliente-servidor, es distribuir los componentes de una aplicación entre cliente y servidor de alguna manera. En nuestro caso estamos distribuyendo el navegador para el cliente y el servidor web, para el servidor con el fin de poder construir aplicaciones web complejas.

Un importante patrón de diseño en aplicaciones web es la arquitectura N-Capas. En un patrón N-capas, la función delgada de aplicación se divide entre el cliente y el servidor en niveles que son responsables de la presentación.


El procesamiento de la aplicación y la gestión de datos, si se diseñan adecuadamente, soportan un importante principio de diseño, conocido como separación de ocupaciones.

Separación de ocupaciones


Cada nivel está destinado a tratar una ocupación por separado, que se encapsula en un interfaz bien definida. Por lo tanto para tener acceso al nivel, debe hacerlo a través de la interfaz que esto proporciona. Esto permite que cada nivel se desarrolle y modifique sin afectar a otros niveles.
Cada nivel tiene únicamente acceso a sus niveles adyacentes a través de los interfaces que proporciona. Este enfoque de funcionalidad encapsulada simplifica en gran medida el desarrollo y mantenimiento de sistemas de software. Un nivel puede ser cambiado por completo siempre y cuando respete las interfaces de los niveles a cada lado del mismo.

Arquitectura 3 capas


Este es un método muy sencillo que sólo asigna un nivel a cada una de las funciones que se han descrito anteriormente.
  • Nivel de presentación: sólo el interfaz de usuario. (navegador web del usuario)
  • Nivel de datos: el almacenamiento persistente de los datos asociados con la aplicación. (base de datos relacional u otra).
  • Nivel de lógica de aplicación: Es el responsable de mediar entre los otros dos niveles porque recupera, modifica o elimina los datos en el nivel de datos, y envía los resultados a la capa de presentación de manera que el usuario puede verlos. También es el responsable del procesamiento de los datos en sí. (El servidor Web y la lógica asociada con el contenido dinámico que se le entrega al navegador Web del usuario)




Arquitectura 6-Tier

El nivel de presentación es usualmente subdividido en dos niveles:
  • Nivel cliente: componentes de interfaz del lado del cliente
  • Nivel de lógica de presentación: Programas del lado del servidor para generar páginas web.
El nivel de aplicación es usualmente dividido en dos niveles :
  • Nivel de lógica de negocio: Modela los objetos de negocio con la aplicación.
  • Nivel de Web: El servidor web
El nivel de datos es a menudo subdividido en dos niveles:
  • Nivel de datos: Los datos usados por la aplicación, algún tipo de almacenamiento de datos persiste.
  • Nivel de acceso de datos: Responsable del acceso a datos desde el nivel de datos y de pasarlos al nivel de lógica de negocio.


Construcción de aplicaciones web usando Java

Servlet

Un servlet es una clase que se ejecuta en el contexto de un servidor web y el resultado de ejecución viaja por internet para ser visualizado en un navegador web (normalmente un servlet genera un HTML, pero puede generar otros formatos de archivos).

Ciclo de vida de un servlet

Cada servlet tiene el mismo ciclo de vida.


  • Un servidor carga e inicializa el servlet
  • El servlet maneja una o más peticiones del cliente
  • El servidor elimina el servlet.(Algunos servidores sólo cumplen este paso cuando se desconectan)


Métodos básicos del servlet

  • Init(): El código de este método se ejecuta solamente cuando se carga el servlet, es decir, se ejecuta una sola vez independientemente del número de veces que llamemos al servlet.
  • Service(): El código se ejecuta en respuesta a las peticiones del cliente (GET, POST, PUT, DELETE,...)
  • Destroy(): Cuando el servlet es "desmontado" se invoca este método. Es utilizado para hacer limpieza.
  • DoGet() y doPost(): Son métodos idénticos excepto que uno atiende las peticiones GET y el otro las POST. Son refinamientos del método service() en los HttpServlets.

Estructura del servlet


Manejo del objeto HTTPSession

Sirve para almacenar información entre diferentes peticiones HTTP ya que este protocolo es stateless(sin estado). Así en muchas ocasiones nos encontraremos con el problema de compartir datos de usuario entre un conjunto amplio de páginas de nuestra aplicación.



La clase HttpSession tiene una estructura de Hashmap(Diccionario) y permite almacenar cualquier tipo de objeto en ella de tal forma que pueda ser compartido por las diferentes páginas que como usuarios utilizamos.

Manejo del HTTPSession


  • El seguimiento de sesión es un mecanismo que los servlets utilizan para mantener el estado sobre la serie de peticiones desde un mismo usuario (esto es, peticiones originadas desde el mismo navegador) durante un periodo de tiempo.
  • Las sesiones son compartidas por los servlets a los que accede el cliente.
  • Para utilizar el seguimiento de sesión se debe:

                      - Obtener una sesión (un objeto HttpSession) para un usuario.
                      - Almacenar u obtener datos desde el objeto HttpSession.
                      - Invalidar la sesión (opcional).

                                           Obtener una sesión

Almacenar y recuperar la sesión

Invalidar una sesión

Características de Java Server Pages (JSP´s)


  • Varias de las principales características de los JSP son:
  • Están basados en la tecnología de servlets
  • Permiten separar la parte dinámica de nuestras páginas Web del
  • HTML estático.
  • Fácil creación de página.
  • Por medio de compilación se convierten en Servlets.
  • Utilizan tags XML, para una mayor gestión.
  • Invocación de JavaBeans, EJB’s, XML


Ciclo de vida de una JSP

Java Server Pages (JSP´s) y su diferencia con HTML


La principal diferencia es que las Java server pages agregan el contenido dinámico a un archivo HTML estático de esta forma se potencia la funcionalidad de una página web. Para ello usa los Scriplets de código que veremos a continuación:

Elementos Script en JSP


Los elementos de script permiten insertar código Java dentro del servlet que se generará desde la página JSP. Hay tres formas de hacer esto:

  • Mediante expresiones de la forma <%= expresión %>: son evaluadas e insertadas en la salida.
  • Mediante scriptlets de la forma <% código %> : se insertan dentro del método service del servlet.
  • Mediante declaraciones de la forma <%! código %> : se insertan en el cuerpo de la clase del servlet, fuera de cualquier método existente.


Expresiones en JSP



Una expresión JSP se usa para insertar valores Java directamente en la salida y tiene la siguiente forma:

<% expresión Java %>

Se debe tener presente que no se coloca el punto y coma(;) al final de la instrucción que se desea imprimir
Ejemplo:
Fecha Actual: <%= new java.util.Date() %>

En XML, se puede usar una sintaxis alternativa para las expresiones JSP:
<jsp:expression>Expresión Java</jsp:expression>


  • Si se desea realizar algo más complejo que insertar una simple expresión, losscriptlets JSP nos permiten insertar código arbitrario dentro de la estructura de las páginas jsp´s.

  • Los Scriptlets tienen la siguiente forma: <% Código Java %>

Ejemplo:
<% String queryData = request.getQueryString();
out.println(“Adjuntando GET data: " + queryData); %>
(En este caso se debe incluir el punto y como ya que estamos haciendo uso de código Java)



  • Si queremos usar los caracteres "%>" dentro de un scriptlet, debemos poner "%\>".
  • El equivalente XML de <% Código Java %> es: <jsp:scriptlet>Código</jsp:scriptlet>

Declaraciones en JSP




Una declaración JSP nos permite definir métodos o campos que serán insertados dentro del cuerpo principal de la clase servlet (fuera del método service que procesa la petición). Tienen la siguiente forma:

<%! Código Java %>

Ejemplo:

<%! private int accesos = 0; %>

Cantidad de Accesos:

<%= ++ accesos %>


Como con los scriptlet, si queremos usar los caracteres "%>", ponemos "%\>". Finalmente, se puede observar que el equivalente XML de <%! Código %> es:

<jsp:declaration>Código</jsp:declaration>


Directivas en JSP


  • Habilita la declaración de Variables globales.
  • Empieza con la secuencia <%@
  • Termina con la secuencia %>
  • Existen los siguientes tipos:
                        - Directiva page
                        - Directiva include
                        - Directiva taglib



Directiva Page

La directiva page nos permite definir uno o más de los siguientes atributos sensibles a las mayúsculas:

Directiva Page Import

Esta instrucción permite especificar los paquetes que deberían ser importados.
Su estructura es la siguiente:
import="package.class" o
import="package.class1,...,package.classN"

Por ejemplo: <%@ pageimport="java.util.*"%>
El atributo import es el único que puede aparecer múltiples veces.

Directiva Page Session

Su estructura es la siguiente: session="true|false".
  • Un valor de true (por defecto) indica que la variable predefinida session (del tipo HttpSession) debería unirse a la sesión existente si existe una, y si no existe, se debería crear una nueva sesión para unirla.
  • Un valor de false indica que no se usarán sesiones y los intentos de acceder a la variable session provocarán errores en el momento en que la página JSP sea traducida a un servlet.

Directiva Page Info

Su estructura es la siguiente: info="message".

Define un string que puede usarse para ser recuperado mediante el método getServletInfo(), desde un servlet u otra JSP.

Directiva Page ErrorPage

Su estructura es la siguiente: errorPage="url".

Específica la página JSP que se debería procesar si se lanzará cualquier Throwable en la página actual.

Directiva Page IsErrorPage


Su estructura es la siguiente: isErrorPage="true|false".

Indica si la página actual actúa o no como página de error de otra página JSP. El valor por defecto es false.

Directiva Include


  • Esta directiva nos permite incluir ficheros en el momento en que la página JSP es traducida a un servlet.

<%@ include file="url relativa" %>
  • La URL especificada normalmente se interpreta como relativa a la página JSP a la que se refiere, pero, al igual que las URLs relativas en general, podemos decirle al sistema que interprete la URL relativa al directorio home del servidor Web, empezando con una barra invertida.
  • Los contenidos del fichero incluido son analizados como texto normal JSP, y así pueden incluir HTML estático, elementos de script, directivas y acciones.

Ejemplo de una directiva Include


Directiva Taglib

Indica al motor JSP que la página va a utilizar "tag libraries". Estas bibliotecas contienen etiquetas creadas por el propio programador con sus correspondientes atributos que encapsulan determinada funcionalidad.

Su estructura es la siguiente:

   <%@taglib uri=". . . " prefix = ". . ."%>

Donde el atributo uri permite localizar el fichero descriptor de la biblioteca de extensión tdl.
Y el atributo prefix especifica el identificador que todas las etiquetas de la biblioteca deben incorporar y que no puede coincidir con las palabras reservadas jsp,jspx, java, javax, servlet, sun y sunw

Ejemplo:



Acciones



  • Las acciones JSP usan construcciones de sintaxis XML para controlar el comportamiento del motor de Servlets.


  • Se pueden utilizar para:

-Insertar un fichero dinámicamente
-Reutilizar componentes JavaBeans
-Reenviar al usuario a otra página o generar HTML para el plug-in Java.

Acción JSP: Include



Esta acción nos permite insertar ficheros en una página que está siendo generada.

La sintaxis es la siguiente: <jsp:include page="relative URL" flush="true"/>

Ejemplo Acción JSP:Include



Acción JSP:UseBean


Esta acción nos permite cargar y utilizar un JavaBean en la página JSP. Esta es una capacidad muy útil porque permite practicar la reusabilidad de las clases Java. La sintaxis más simple para especificar que se debe usar un Bean es:

<jsp:useBean id="name" class="package.class" />



Atributos de JSP:UseBean



Acción JSP:Forward


  • Esta acción permite reenviar la petición a otra página. Tiene un sólo atributo, page, que debería consistir en una URL relativa.
  • Éste podría ser un valor estático o podría ser calculado en el momento de la petición. Aquí se muestran dos ejemplos:
  • <jsp:forward page="/utils/errorReporter.jsp" />
  • <jsp:forward page="<%= someJavaExpression %>" />



Acción JSP:Param


Cuando se invoca un elemento include o forward, el objeto request original
es enviado a la página de destino. Aquí se muestran un ejemplo:



Referencias

Materia del curso: contiene presentaciones y ejemplo de una aplicación que usa servlets y JSP´s




No hay comentarios:

Publicar un comentario