JAVA WEB



¿ QUE ES UNA PÁGINA WEB ?


Imagen relacionada
Una pagina web también conocida como pagina de Internet, es un documento adaptado para la web y que normalmente forma parte de un sitio web. Su principal característica son los hiperenlaces a otras paginas, siendo esto el fundamento de la Web.

Dentro de una pagina web, como documento que es, podemos encontrar diferentes tipos de contenidos como : textos, imágenes, enlaces, plugins, etc. 

¿ QUE ES UNA WEB DINÁMICA ? 

Las Páginas Web Dinámicas están desbancado a las tradicionales Páginas Web Estáticas. Los sitios web dinámicos son aquellos que nos permiten crear aplicaciones dentro de la propia web, otorgando una mayor interactividad con el navegante.

Imagen relacionadaLa gran ventaja de los sitios web dinámicos es la versatilidad de la personalización de la información mostrada. Esta también nos permite tomar decisiones y muestra selectiva de información en función de criterios deseados.

Su creación es mucho mas compleja, ya que se requiere de conocimientos específicos de lenguajes de programación y gestión de base de datos. Con este tipo de paginas web se puede hacer todo lo que se desee. La web 2.0 es realmente la web dinámica esa en la cual los usuarios puedan interactuar con la información contenida en la web en tiempo real.



¿ MODELO CLIENTE - SERVIDOR ?

Resultado de imagen para modelo cliente-servidorLa arquitectura Cliente-Servidor es un modelo de diseño de Software en el que las tareas se reparten entre los proveedores de recursos o servicios, llamados Servidores y los demandantes, llamados Clientes. Un cliente realiza peticiones a otro programa, el servidor, quien le da respuesta. 

Esta idea también se puede aplicar a programas que se ejecutan sobre una sola computadora, aunque es mas ventajosa en un sistema operativo multiusuario distribuido a través de una rede computadoras.

COMPONENTES

  • Red: una red es un conjunto de clientes, servidores y base de datos unidos de una manera física o no física en el que existen protocolos de trasmisión de información.
  • Cliente : cliente hace referencia a un demandante de servicios, este cliente puede ser un ordenador como también una aplicación de informática, la cual requiere información proveniente de la red para funcionar. 
  • Servidor: el servidor hace referencia a un proveedor de servicios , este servidor a su vez puede ser un ordenador o una aplicación informática la cual envía información a los demás agentes de la red.
  • Protocolo: protocolo es un conjunto de normas o reglas y pasos establecidos de manera clara y concreta el flujo de información en una red estructurada.
  • Servicios:  un servicio es un conjunto de información que busca responder las necesidades de un cliente, donde esta información puede ser mail, música, mensajes simples entre Software, videos, etc.
  • Base de Datos: son bancos de información ordenada, categorizada y clasificada que forman parte de la red.

¿ QUE ES JAVA SERVLETS ?

Resultado de imagen para java servlet
 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.

El servlet es una clase en el lenguaje de programación Java, utilizada para ampliar las capacidades de un servidor. Aunque los servlets pueden responder a cualquier tipo de solicitudes, estos son utilizados comúnmente para extender las aplicaciones alojadas por servidores web, de tal manera que pueden ser vistos como applets de Java que se ejecutan en servidores en vez de navegadores web. Este tipo de servlets son la contra parte Java de otras tecnologías de contenido dinámico Web, como PHP y ASP.NET.

¿ VENTAJAS Y DESVENTAJAS DE LOS SERVLET ?

Las ventajas más destacables son las siguientes:

  • Es integrable con páginas JSP y se pueden usar filtros.
  • Instancia permanentemente cargada en memoria por cada Servlet. Cada petición se ejecuta en un hilo, no en un proceso.
  • Con los Servlets, hay n threads pero sólo una copia de la clase Servlet. Los Servlet también tienen más alternativas que los programas CGI para optimizaciones como mantener abiertas las conexiones de las bases de datos.
  • Los Servlets están escritos en Java y siguen un API bien estandarizado.
  • Puede ser utilizados sobre cualquier SO. y en la mayoría de servidores Web.
  • Por ser Java ofrece: máquina virtual, chequeo de tipos, gestión de memoria, excepciones, seguridad, etc.
  • Actúan como capa intermedia entre la petición que proviene del navegador Web u otro cliente HTTP y Bases de Datos o Aplicaciones en el servidor HTTP.
  • Seguridad:
    • Lenguaje java: máquina virtual, chequeo de tipos, gestión de memoria, excepciones, etc.
    • Gestor de seguridad de Java.
  • Elegancia:
    • Código java: modular, orientado a objetos, limpio y simple.
    • API servlets: potente y fácil de utilizar.
  • Integración:
    • Integración fuerte entre servlets y servidor: permite colaboración entre ambos.
  • Extensibilidad y flexibilidad:
    • API Servlet extensible.
    • Filtros (cadenas de servlets).
    • Integrable con JSP (Java Server Pages).
  • Comunidad grande de desarrolladores.

¿ CARACTERÍSTICAS DE JAVA- SERVLET ?

  • Son independientes del servidor utilizado y de su sistema operativo, lo que quiere decir que a pesar de estar escritos en Java, el servidor puede estar escrito en cualquier lenguaje de programación.
  • Los servlets pueden llamar a otros servlets, e incluso a métodos concretos (en la misma máquina o en una máquina remota)
  • Los servlets pueden obtener fácilmente información acerca del cliente,  tal como su dirección IP, el puerto que se utiliza en la llamada, el método utilizado (GET, POST), etc.
  • Permiten además la utilización de cookies y sesiones, unas en el lado del cliente y otras del lado del servidor.
  • Pueden actuar como enlace entre el cliente y una o varias bases de datos en arquitecturas cliente-servidor.
  • Asimismo, pueden realizar tareas de proxy para un applet.
  • Permiten la generación dinámica de código HTML, lo que se puede utilizar para la creación de contadores, banners, etc.

¿ CICLO DE VIDA DE JAVA-SERVLET ?

1. Inicializar el servlet
Cuando un servidor carga un servlet, ejecuta el método init del servlet. El proceso de inicialización debe completarse antes de poder manejar peticiones de los 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.
2. Interactuar con los clientes
Después de la inicialización, el servlet puede dar servicio a las peticiones de los clientes. Estas peticiones serán atendidas por la misma instancia del servlet, por lo que hay que tener cuidado al acceder a variables compartidas, ya que podrían darse problemas de sincronización entre requerimientos simultáneos.
3. Destruir el servlet
Los servlets se ejecutan hasta que el servidor los destruye, por cierre del 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 ?

       Resultado de imagen para estructura basica de un servlet  
Resultado de imagen para estructura basica de un servlet



¿ QUE ES UN CLASE GENERIC-SERVLET ?

Servlet genéricoUn servlet genérico es un servlet independiente del protocolo que siempre debe anular el método service () para manejar la solicitud del cliente. El método service () acepta dos argumentos: el objeto ServletRequest y el objeto ServletResponse. El objeto de solicitud le informa al servlet sobre la solicitud realizada por el cliente, mientras que el objeto de respuesta se usa para devolver una respuesta al cliente.



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).


Métodos de la clase GenericServlet:

Aquí está la lista de todos los métodos de la clase GenericServlet. 
1. public void init () : es un método conveniente. Este método se puede anular para que no sea necesario llamar a super.init (config).

2. public void init (ServletConfig config) : Llamado por el contenedor del servlet para indicar que el servlet se está poniendo en servicio, este método se usa para inicializar el servlet.
3. public String getInitParameter (nombre de la cadena) : devuelve una cadena que contiene el valor del parámetro de inicialización dado, o nulo si el parámetro no existe.
4. Enumeración pública getInitParameterNames () : devuelve los nombres de todos los parámetros definidos en el archivo web.xml o nulo si web.xml no tiene ningún parámetro.
5. servicio vacío abstracto público (solicitud ServletRequest, respuesta ServletResponse) : Llamado por el contenedor Servlet para permitir que el servlet responda a las solicitudes realizadas por el cliente.
6. void destroy () público : es llamado por el contenedor de servlets una vez al final del ciclo de vida del servlet para indicar que el servlet está siendo destruido.
7. public ServletConfig getServletConfig () : devuelve el objeto ServletConfig que inicializó este servlet
8. public String getServletInfo () : devuelve información sobre el servlet.
9. public ServletContext getServletContext () : Devuelve el objeto ServletContext, pasado a este servlet por el método init
10. public String getServletName () : devuelve el nombre de la instancia del servlet.
11. registro de anulación público (String msg) : escribe el mensaje dado en el archivo de registro del servlet.
12. registro de anulación público (String msg, Throwable t) : escribe el mensaje explicativo en el archivo de registro del servlet que incluye una cadena que describe el error o la excepción.

¿ METODOS PRINCIPALES DE JAVA-SERVLET ?

public abstract interface Servlet: Todos los servlets implementan este interfaz directamente o extendiendo una clase que lo implemente como HttpServlet. Entre sus métodos están:
  • init(ServletConfig config): Es el método utilizado para crear una nueva instancia del servlet (análogo al constructor). Ver el ciclo de vida. Este método puede ser sobreescrito para realizar tareas como crear una conexión a una BD que se mantendrá mientras el servlet se mantenga cargado y puede ser utilizada por cada petición. ServletConfig contiene los parámetros de inicialización que entrega el servidor al servlet.
  • getServletConfig(): Retorna la configuración dada para la inicialización del servlet.
  • service(ServletRequest req, ServletResponse res): Este método es el que se llama cuando se recibe una petición de un cliente y en su implementación normal para HTTP verifica el tipo de solicitud GET, POST, etc. y la redirige a los métodos respectivos. En general no es necesario reimplementar este método.
  • destroy(): Este método es llamado por el servidor para indicar que el servlet será destruido. Es llamado sólo una vez y uno debe encargarse de esperar por posibles peticiones en curso. Ver el ciclo de vida.

public abstract interface ServletConfig: Contiene los parámetros que entrega el servidor al servlet para ser inicializado que pueden ser dados por el administrador a través de un archivo de configuración. Entre sus métodos están:
  • getInitParameter(String name): Que retorna el valor del parámetro dado en name.
  • getServletContext(): Que retorna un objeto ServletContext que guarda la información referente al servidor.

public abstract interface ServletContext: Contiene métodos que sirven para comunicar un servlet con el servidor que lo contiene.
  • getMimeType(String file): Retorna el tipo MIME definido en el servidor para el archivo dado.

public abstract class GenericServlet implements Servlet, ServletConfig: Define un servlet genérico independiente del protocolo. Además de implementar alguno de los métodos de las interfaz crea otros:
  • log(String msg): Escribe en la consola del servidor el mensaje junto con el nombre del servlet.

public abstract class HttpServlet extends GenericServlet: Es la clase de la cual se debe extender para crear un servlet HTTP. De la clase que extiende obtiene los métodos ya definidos además de los cuales define:
  • doGet(HttpServletRequest req, HttpServletResponse resp): Es el método llamado para procesar información que haya sido enviado con el método GET. Este método es llamado concurrentemente para cada cliente por lo que hay que estar atento por posibles variables compartidas que causen problemas.
  • doPost(HttpServletRequest req, HttpServletResponse resp): Ídem al anterior pero para el método POST, en general se implementa sólo un método y el otro lo referencia.

public abstract interface ServletRequest: Permite obtener información del cliente que no depende del protocolo, por ejemplo:
  • getRemoteAddr(): Retorna la IP del cliente.
  • getParameter(String name): Retorna el valor del parámetro name dado por el cliente.
  • getInputStream(): Sirve para crear un canal de comunicación para obtener dados binarios.

public abstract interface HttpServletRequest extends ServletRequest: Permite obtener del cliente la información que es dependiente del protocolo, en este caso HTTP. Entre sus métodos están:
  • getHeader(String name): Permite obtener el valor de los Headers de HTTP con que fue llamado el servlet.
  • getCookies(): Retorna un arreglo que contiene todas las cookies que el cliente envía al servlet.
  • getSession(): Retorna la sesión en la cual se encuentra el cliente.

public abstract interface HttpSession: Permite identificar al mismo usuario a través de distintos servlets.En general se implementa guardando una cookie en el cliente la cual es recuperada por el servidor para reasignar su sesión.
  • setAttribute(String name, Object value): Permite compartir un objeto cualquiera entre distintos servlets para el mismo usuario. Para obtener el objeto se utiliza setAttribute(name).
  • setMaxInactiveInterval(int interval): Permite definir un tiempo máximo para el cual la sesión será válida. Si transcurre ese tiempo y el usuario no ha dado respuesta el servidor borrará la sesión del usuario el cual se convertirá en un cliente recién ingresado.

public abstract interface ServletResponse: Define un objeto para permitir a un servlet enviar una respuesta al cliente.
  • setContentType(String type): Permite definir el tipo de respuesta que se le dará al cliente. Si se retornará una página web deberá ser text/html.
  • getWriter(): Retorna un objeto Writer para poder enviar respuestas de texto.
  • getOutputStream(): Retorna un objeto ServletOutputStream que permite enviar respuestas binarias al cliente.

public abstract interface HttpServletResponse extends ServletResponse: Permite enviar al cliente respuestas específicas del protocolo HTTP.
  • addCookie(Cookie cookie): Para definir nuevas cookies en el cliente.
  • setHeader(String name, String value): Para definir un header HTTP a enviar al cliente.
  • sendRedirect(String location): Envía un mensaje al cliente para redireccionar la respuesta a la dirección señalada.

public abstract interface SingleThreadModel: Esta interfaz no tiene métodos ya que sólo se utiliza para señalar al servidor que el servlet manejará sólo un requerimiento a la vez. Cualquier otra petición concurrente queda encolada. Es la solución simple y poco óptima para eliminar los problemas de concurrencia.