Java Web

¿Qué son las páginas web dinámicas?


Los sitios web dinámicos son aquellos que permiten crear aplicaciones dentro de la propia web, otorgando una mayor interactividad con el navegante. Aplicaciones dinámicas como encuestas y votaciones, noticiarios, foros de soporte, libros de visita, envío de e-mails inteligentes, reserva de productos, pedidos on-line, atención al cliente personalizada ... donde el administrador dispone la opción de gestionar dichos apartados, agregando, editando o eliminando contenidos.
La gran ventaja de los sitio web dinámicos es la versatilidad, apunta a la personalización de la información mostrada. Permite la toma de decisiones y muestra selectiva de información en función de criterios deseados.
Es útil para mostrar una imagen de empresa más sólida y profesional ya que permite guardar información en la computadora del navegante y mostrar en forma personalizada la página web de la empresa así como la información adecuada al tipo de navegante.


































¿Qué son los servlets?

Los Servlets son módulos escritos en Java que se utilizan en un servidor, que puede ser o no ser servidor web, para extender sus capacidades de respuesta a los clientes al utilizar las potencialidades de Java. Los Servlets son para los servidores lo que los applets para los navegadores, aunque los servlets no tienen una interfaz gráfica.

Los servelts pueden ser incluidos en servidores que soporten la API de Servlet (ver servidores). La API no realiza suposiciones sobre el entorno que se utiliza, como tipo de servidor o plataforma, ni del protocolo a utilizar, aunque existe una API especial para HTTP.

Los Servlets son un reemplazo efectivo para los CGI en los servidores que los soporten ya que proporcionan una forma de generar documentos dinámicos utilizando las ventajas de la programación en Java como conexión a alguna base de datos, manejo de peticiones concurrentes, programación distribuida, etc. Por ejemplo, un servlet podría ser responsable de procesar los datos desde un formulario en HTML como registrar la transacción, actualizar una base de datos, contactar algún sistema remoto y retornar un documento dinámico o redirigir a otro servlet u alguna otra cosa.

¿Cómo es un Servlet?

Un pequeño servlet de ejemplo es el siguiente:
public class SimpleServlet extends HttpServlet {

    // Maneja el método GET de HTPP para 
    // construir una sencilla página Web.

    public void doGet (HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
    PrintWriter out;
    String title = "Simple Servlet Output";

    // primero selecciona el tipo de contenidos y otros campos de cabecera de la respuesta
    response.setContentType("text/html");
    // Luego escribe los datos de la respuesta
    out = response.getWriter();
    out.println("<HTML><HEAD><TITLE>");
    out.println(title);
    out.println("</TITLE></HEAD><BODY>");
    out.println("<H1>" + title + "</H1>");
    out.println("<P>This is output from SimpleServlet.");
    out.println("</BODY></HTML>");
    out.close();
    }
}
En negrita se ha resaltado los detalles importantes que son característicos de un Servlet. Este Servlet puede ser puesto en un servidor web ya que utiliza el protocolo HTTP para comunicarse.




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.



Descripción de las características básicas del uso de servlets y JSP para

HTML del lado del cliente

  • Al estar escritos en java, son independientes de la plataforma
  • consumen menos recursos porque solo son cargados la primera vez que se solicitan sus servicios.(Las sigueintes peticiones crearan hilos de ejecucion)
  • son seguros y portables ya que se ejecutan bajo la misma maquina virtual de java.
  • No requieren soporte para java en el explorador del cliente, ya que operan en el dominio en el servidor y envian los resultados en HTML.
1. Leer cualquier dato enviado por el usuario: los datos normalmente se
introducen por medio de la página Web, pero también pueden obtenerse a
partir de un applet Java.
2. Obtener otra información sobre la petición que se encuentra embebida en la
propia petición HTTP: esta información se refiere por ejemplo a los cookies,
el nombre del host de donde proviene la petición, etc.
3. Generar los resultados: esta parte puede requerir acceder a una base de
datos, ejecutar una llamada RMI o CORBA, invocar a una aplicación o
simplemente computar los datos de entrada.
4. Generar un documento con los resultados: debemos establecer el tipo de
documento que va a ser devuelto (una página HTML, una imagen, un
archivo comprimido, etc.).
5. Establecer los parámetros apropiados para la respuesta.
6. Enviar la respuesta al cliente: una vez que tenemos el formato del
documento que entregaremos como respuesta y tenemos establecidos los
parámetros de la comunicación enviamos la respuesta al cliente.
Cuando un servlet acepta una llamada de un cliente, recibe dos objetos.
Un ServletRequest, que encapsula la comunicación desde el cliente al servidor.
Un ServletResponse, que encapsula la comunicación de vuelta desde el servlet hacia el cliente.
ServletRequest y ServletResponse son interfaces definidos en el paquete javax.servlet.
El Interface ServletResponse le da al servlet los métodos para responder al cliente.
Permite al servlet seleccionar la longitud del contenido y el tipo MIME de la respuesta.
Proporciona un stream de salida, ServletOutputStream, y un Writer a través del cual el servlet puede responder datos.

• GenericServlet: implementa la interfaz Servlet.

• ServletInputStream: se utiliza para acceder a información de las

solicitudes Web.

• ServletOutputStream: se utiliza para enviar la respuesta a un cliente.

• Interfaces:

• Servlet: debe ser implementada por todos los servlets. Se utiliza para

iniciar y detener el servlet.

• ServletRequest: encapsula la solicitud de servicio de un cliente.

• ServletResponse: es utilizada por el servlet para responder a una

solicitud.

• ServletConfig: para que el servlet conozca información del contenedor

servlet.

• ServletContext: define el entorno en el que se ejecuta un servlet.

• SingleThreadModel: se usa para identificar a los servlets que no pueden

ser accedidos por más de un hilo al mismo tiempo.

Java Server Pages (JSP) es una tecnología que nos permite mezclar HTML estático con HTML
generado dinámicamente. Muchas páginas Web que están construidas con programas CGI son casi
estáticas, con la parte dinámica limitada a muy pocas localizaciones. Pero muchas variaciones CGI,
incluyendo los servlets, hacen que generemos la página completa mediante nuestro programa,
incluso aunque la mayoría de ella sea siempre lo mismo.
• Mejoras en el rendimiento:
• Utilización de procesos ligeros (hilos Java) para el manejo de las
peticiones.
• Manejo de múltiples peticiones sobre una página .jsp en un instante
dado.
• El contenedor servlet puede ser ejecutado como parte del servidor Web.
• Facilidad para compartir recursos entre peticiones (hilos con el mismo
padre: servlet container).
  • Un servlet acepta peticiones de un cliente, procesa la informacion relativa a la peticion realizada por el cliente y le devuelve a este los resultados que podran ser mostrados mediante applets, paginas HTML, ETC.
  • JSP,tecnologia que combina codigo html y codigo java en un solo programa o aplicación, cuando al web server le piden un jsp, lo compila, lo convierte a servlet con todas las implicaciones que se mencionarón en el inciso anterior y manda los resultados a la pc remota que lo solicitó.
La especificación de JSP está construida bajo el API( Aplication Programming Interface) de Java Servlet ya que los Servlets proveen la habilidad de construir contenido dinámico para sitios Web usando a Java como lenguaje. Sin embargo JSP trabaja de una manera más limpia o clara la separación de la presentación de la parte lógica y además es simple de escribir.
Ambas tecnologías trabajan mejor en conjunto .Como ya se comentó los JSP son una extensión del API de Servlets. De hecho, las páginas de JSP se compilan en servlets antes de que se utilicen, así que tienen todos las beneficios de los servlets, incluyendo el acceso al API de Java. Debido a que los JSP son generalmente códigode presentación (por ej. HTML) con la lógica de la aplicación incrustada (por ej. Java), sepuede pensar en ellos como en servlets "inside-out". Además facilita el mantenimiento de laaplicación






El Ciclo de Vida

Cada servlet tiene el mismo ciclo de vida:
  • Un servidor carga e inicializa el servlet.
  • El servlet maneja cero o más peticiones de cliente.
  • El servidor elimina el servlet.

Inicializar un Servlet

Cuando un servidor carga un servlet, ejecuta el método init del servlet. La inicialización se completa antes de manejar peticiones de clientes y antes de que el servlet sea destruido.
Aunque muchos servlets se ejecutan en servidores multi-thread, los servlets no tienen problemas de concurrencia durante su inicialización. El servidor llama sólo una vez al método init al crear la instancia del servlet, y no lo llamará de nuevo a menos que vuelva a recargar el servlet. El servidor no puede recargar un servlet sin primero haber destruido el servlet llamando al método destroy.

Interactuar con Clientes

Después de la inicialización, el servlet puede manejar peticiones de clientes. Estas respuestas son manejadas por la misma instancia del servlet por lo que hay que tener cuidado con acceso a variables compartidas por posibles problemas de sincronización entre requerimientos concurrentes.

Destruir un Servlet

Los servlets se ejecutan hasta que el servidor los destruye, por cierre el servidor o bien a petición del administrador del sistema. Cuando un servidor destruye un servlet, ejecuta el método destroy del propio servlet. Este método sólo se ejecuta una vez y puede ser llamado cuando aún queden respuestas en proceso por lo que hay que tener la atención de esperarlas.. El servidor no ejecutará de nuevo el servlet, hasta haberlo cargado e inicializado de nuevo.



 ESTRUCTURA BÁSICA DE UN SERVLET
Aquí tenemos un servlet básico que maneja peticiones GET. Las peticiones GET, para aquellos que no estemos familiarizados con HTTP, son peticiones hechas por el navegador cuando el usuario teclea una URL en la línea de direcciones, sigue un enlace desde una página Web, o rellena un formulario que no especifica un METHOD. Los Servlets también pueden manejar peticiones POST muy fácilmente, que son generadas cuando alguien crea un formulario HTML que especifica METHOD="POST".


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SomeServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

// Use "request" to read incoming HTTP headers (e.g. cookies)
// and HTML form data (e.g. data the user entered and submitted)

// Use "response" to specify the HTTP response line and headers
// (e.g. specifying the content type, setting cookies).

PrintWriter out = response.getWriter();
// Use "out" to send content to browser
}
}

Para ser un servlet, una clase debería extender HttpServlet y sobreescribir doGet o doPost (o ambos), dependiendo de si los datos están siendo enviados mediante GET o POST. Estos métodos toman dos argumentos: un HttpServletRequest y un HttpServletResponse.


Clases principales

Los objetos para la definición de servlets se encuentran divididos en dos paquetes: javax.servlet.*, que proporciona clases necesarias para crear servlets genéricos, independientes del protocolo utilizado, y javax.servlet.http.*, que proporciona las clases que definen un servlet específico para el protocolo HTTP.

  • Servlet define la funcionalidad básica que tiene un servlet como es su ciclo de vida (métodos initdestroy) y procesar requests (método service). Es implementado por la clase GenericServlet.
  • SingleThreadModel es una interfaz utilizada para marcar los servlets que se desea que se ejecuten en forma secuencial por requests simultáneos, evitando posibles problemas de procesamiento paralelo.
  • HttpServlet agrega la funcionalidad para procesar los variados tipos de request HTTP (principalmente los métodos doGetdoPost para procesar formularios GET y POST, respectivamente).
  • HttpServletRequest proporciona información del request del cliente al servlet a través del protocolo HTTP. Se pueden obtener datos como encabezados, cookies y características genéricas como dirección del cliente y parámetros recibidos desde él (getParameter). Permite también asociar objetos (setAttribute) y acceder al objeto HttpSession.
  • HttpServletResponse asiste a un servlet para enviar una respuesta al cliente a través de un canal de comunicación binario o de texto (getWriter). Provee también funcionalidad específica para respuestas HTTP como enviar encabezados, cookies (addCookie) y errores con códigos numéricos como 403 (sendError).
  • HttpSession permite identificar un usuario a través de más de una página, para esto se le asigna un identificador único que se mantiene mientras el usuario navega en el sitio (getId). Permite asignar un tiempo máximo de inactividad y se le pueden asociar objetos para compartir entre servlets (setAttribute y getAttribute).






El modelo cliente - servidor















TCP es un protocolo orientado a conexión. No hay relaciones maestro/esclavo. Las aplicaciones, sin embargo, utilizan un modelo cliente/servidor en las comunicaciones.Un servidor es una aplicación que ofrece un servicio a usuarios de Internet; un cliente es el que pide ese servicio. Una aplicación consta de una parte de servidor y una de cliente, que se pueden ejecutar en el mismo o en diferentes sistemas.
Los usuarios invocan la parte cliente de la aplicación, que construye una solicitud para ese servicio y se la envía al servidor de la aplicación que usa TCP/IP como transporte.
El servidor es un programa que recibe una solicitud, realiza el servicio requerido y devuelve los resultados en forma de una respuesta. Generalmente un servidor puede tratar múltiples peticiones(múltiples clientes) al mismo tiempo.

Figura: El modelo de aplicación cliente/servidor
Algunos servidores esperan las solicitudes en puertos bien conocidos de modo que sus clientes saben a que zócalo IP deben dirigir sus peticiones. El cliente emplea un puerto arbitrario para comunicarse. Los clientes que se quieren comunicar con un servidor que no usa un puerto bien conocido tienen otro mecanismo para saber a qué puerto dirigirse. Este mecanismo podría usar un servicio de registro como Portmap, que utiliza un puerto bien conocido.

No hay comentarios.:

Publicar un comentario

SCRUM

Qué es SCRUM Scrum es un proceso en el que se aplican de manera regular  un conjunto de buenas prácticas  para  trabajar colaborativ...