JTagua

Inicio » Servlet

Archivo de la categoría: Servlet

Servlet 06: Bolsa de Madrid.

La bolsa de Madrid ha dedicido incorporar a su sitio web información numérica y gráfica de los valores medios mensuales de determinados valores asociados al IBEX-35 ( Información bursátil de 35 valores del mercado). Para resolver este problema dispone de una base de datos en formato MySQL denominada bolsamadrid2009, esta base de datos tiene una tabla llamada datos2009 con la siguiente descripción:

Image25

Todos los campos son DOUBLE, y salvo los campos día, mes y año que son enteros, los demás deben manejarse con dos decimales.

Image26

La tabla contiene 206 registros similares a los anteriores, y se corresponden a los valores numéricos dia a día (intradía) desde el 2 de Enero de 2009 al 18 de Noviembre de 2009 correspondientes a los días en los que la Bolsa de Madrid ha operado. (Se ha excluido intencionadamente el mes de Febrero).Con estos datos y en la idea de proporcionar a sus visitantes una información resumida tanto numérica como gráfica, se debe diseñar una página jsp tal como la que se muestra mas abajo, y en la que puede verse dos botones radiales que operan conjuntamente denominados “Numérico” (previamente seleccionado) y “Gráfico”. Estos dos botones presentan una primera opción al visitante. En el supuesto caso de que el visitante seleccione el botón Gráfico, operará otro grupo de botones radiales denominados “Sectores” (previamente seleccionado) y “Múltiples barras verticales”.

Image27

Si el usuario selecciona “Numérico” aparecerá

Image28

Si ahora el usuario quisiera ver en delalle un mes cualquiera, por ejemplo el mes de Marzo y selecciona en “detalle” en la fila del mes de Junio y aparecerá:

Image29

Desde aquí podrá volver a la pantalla anterior haciendo “Volver”.

Si por el contrario el usuario pulsa en el botón radial de la pantalla inicial “Grafico”, aparecerá dependiendo de los botones “Sectores” o “Barras Verticales Múltiples”.

Image30

 o

Image31

Se pide:

  1. Resolver el problema en los términos planteados haciendo uso del Modelo Vista Controlador.

  2. Implementar un juego de cookies que recuerde de una vez a otra, las selecciones realizadas por el usuario.

Servlet 01: Autentificación.

Se desea construir una aplicación cuyo objetivo fundamental es la autentificación de un cliente a través de los campos usuario y password, provenientes de un formulario. Se dispone, para dicha autentificación, de una base de datos en MySQL llamada db_user, que contiene una tabla llamada usuarios con dos campos o columnas alfanuméricas denominadas usuario y password.

Para resolver el problema se hace uso de una página index.jsp, que cuando se llama inicialmente produce la siguiente salida:

Image12

Cuando el usuario introduce un Nombre y un Password distintos ambos de nulo o blanco, un servlet con ayuda de un javabean localizan un registro en la tabla coincidente con los valores entrados, y por ello, presentan la siguiente pantalla generada con una nueva página jsp de bienvenida:

Image14

En caso contrario, es decir, cuando no existe una coincidencia exacta de la información entrada en el formulario con la que aparece en la base de datos, el propio servlet tendrá que generar la siguiente salida:

Image16

Este mensaje se presentará durante 5 segundos, transcurridos los cuales si el usuario no pulsa Volver, el servlet devolverá el control de la aplicación a la página de inicio o login.

Si en el formulario de entrada, los dos o uno cualquiera de los campos es nulo o blanco, el servlet presentará la información:

Image18

Este mensaje se presentará durante 5 segundos, transcurridos los cuales si el usuario no pulsa Volver, el servlet devolverá el control de la aplicación a la página de inicio o login.

 Se pide:

  1. Diseñar en MySQL e implementar la base de datos con las tablas y campos necesarios que permitan resolver el problema.

  2. Diseñar las páginas jsp de inicio y bienvenida, el servlet de control que se encargue de la navegación y el Javabean que se encarguen de la entrada de datos, la conexión a la base de datos y aquellas otras operaciones necesarias con dicha base de datos. Es decir, se pretende que se aplique el Modelo Vista Controlador.

 

Servlet 02: EL CORTE INGLÉS.

PROBLEMA PROPUESTO.

La empresa El Corte Inglés, desea para mejorar su portal, diseñar un servlet que maneje una cookie en el equipo de sus clientes visitantes. Este servlet debe guardar un valor que se corresponde a la última página de sección (Moda o Electrónica) visitada por el visitante.

En el supuesto caso de que sea la primera vez que el cliente accede a dicha página, y por tanto no exista la cookie en el cliente, se requiere crear dicha cookie con el valor de la sección “Moda” , e inmediatamente se mostrará la página de dicha sección.

Por el contrario, en el caso de que ya exista la cookie, el servlet controlará la carga de la página moda.jsp o electronica.jsp según el valor de dicha cookie.

Finalmente, desde cada una de las páginas anteriores se podrá volver a las secciones sin más que hacer clic en un enlace que cargue la página secciones.jsp. Esta página se encargará de actualizar la cookie según sea la sección última visitada.

Es decir, la primera vez cuando no existe cookie:

Image19

En este momento ya tiene que existir un valor de “Moda” en la cookie. (Puede comprobarse en el navegador).

Si en esta página se hace clic en “secciones” aparecerá:

Image21

Desde esta pantalla podemos ir por ejemplo a la sección de Electrónica, es decir:

Image24

Y ahora la cookie debe tener un valor asociado de “Electrónica”.

Si se conectara en cualquier otro momento por parte del cliente al portal, el servlet en lugar de cargar la página de la sección de Moda, deberá cargar la página de la sección de “Electrónica”.

 Se pide desarrollar las páginas jsp y el servlet que permita la funcionalidad descrita para un periodo de tres mese.

Servlet 04: Detalle Fármacos.

PROBLEMA PROPUESTO.

Se desea incorporar a una aplicación web un generador de informes con los datos en forma tabular y en forma gráfica a través de diagramas de barras verticales de los consumidores y consumidoras de los distintos tipos de medicamentos por sexo y por segmento de edad para un año dado.

 Para resolver el problema anterior, se ha diseñado una primera página index.jsp tal como la que se muestra mas abajo,

Image7

Esta interfaz contiene:

  •  Dos cajas de selección, sexo y tramo de edad.
    • Sexo: En esta caja sólo existen dos valores, Hombres (valor por defecto) y Mujeres.

    • Tramos de edad: En esta caja existen 5 opciones, De 0 a 15 años, De 16 a 24 años, De 25 a 44 años (valor por defecto), De 45 a 64 años y Mayores de 65 años.

  • Un botón para someter el formulario a un servlet, y éste a su vez controlará una clase que le sirva de modelo (MVC) para controlar la apertura, accesos y cierre de la base de datos.

El funcionamiento de la interfaz es el siguiente,

 Primera parte: Esta función se ejecutará tan pronto se seleccione el botón “Someter”, como es obvio el servlet que recibe esta acción tendrá en consideración cualquiera de las dos

selecciones: Sexo y tramo de edad. Y así por ejemplo, si se selecciona Mujeres de 16 a 24 años, aparecerá;

Image8

Donde puede verse que que los datos se corresponden a lo solicitado: Número (en miles) de Hombres de 25 a 44 años que tomaron los tipos de farmacos: Anticatarrales, Analgésicos, Antipiréticos, Reconstituyentes, Lasantes, Antibióticos, Tranquilizantes, Alergia, Reuma, Corazón, Tensión arterial, Estómago, Antidepresivos, Anticonceptivos, Menopausia, Colesterol y Antidiabéticos. (Este informe es el mismo que para Hombres, aunque obviamente con distintos datos). Como es natural, con las dos selecciones (sexo y tramo de edad) existen diez posibilidades, cinco para cada sexo.

 Segunda Parte: Si en la pantalla anterior se selecciona “Detalle” aparecerá el número de Hombres/Mujeres (en este caso Hombres) que consumieron el tipo de fármaco dependiendo de la línea pulsada por tramos de eedad. Esto es:

Image9

Como vemos tenemos una tabla del número de miles de hombres que tomaron farmacos (Lasantes) por grupos de edad.

Vemos igualmente un enlace para volver (Inicio) y otro para ir a la tercera parte del problema.

 Tercera Parte: Si en la pantalla anterior se selecciona “Gráfico” aparecerá el gráfico de la tabla anterior en un diagrama de columnas. Esto es:

Image10

La base de datos del problema se llama farmacos (MySQL), y coincide con la del problema propuesto anterior.

Tenga presente que los informes del INE (Instituto Nacional de Estadística) referido a este estudio jamás ha cambiado los 17 tipos de fármacos, así como los tramos de edad desde que está entregando dicha información. Esto significa que existe una posible simplificación de programación, que aunque menos elegante, es igualmente operativa y es considerar un array interno tanto los tramos como los farmacos.

Notas:

Se entrega para resolver el problema,

 

  • Imágenes farmacia.jpg, infgrafico.jpg, inftabular.jpg
  • Script backup necesario denominado Backup_Farmacos.sql necesario para montar la base de datos del problema
  • Componentes de la librería gráfica JfreeChart (jcommon-1.0.15.jar y jfreechart-1.0.12.jar)

 

SE REQUIERE OBLIGATORIAMENTE RESOLVER EL PROBLEMA DE ACUERDO AL MODELO VISTA CONTROLADOR.(MVC)

Servlet 03: Fármacos.

PROBLEMA PROPUESTO:

Se desea incorporar a una aplicación web un generador de informes con los datos en forma tabular y en forma gráfica a través de diagramas de barras verticales de los consumidores y consumidoras de los distintos tipos de medicamentos por sexo y por segmento de edad para un año dado.

 Para resolver el problema anterior, se ha diseñado una primera página index.jsp tal como la que se muestra mas abajo,

Image1

Esta interfaz contiene:

  • Un botón radial que puede tomar dos opciones, Informe Tabular (valor por defecto) e Informe Gráfico.

  • Dos cajas de selección, sexo y tramo de edad.

    • Sexo: En esta caja sólo existen dos valores, Hombres (valor por defecto) y Mujeres.

    • Tramos de edad: En esta caja existen 5 opciones, De 0 a 15 años, De 16 a 24 años, De 25 a 44 años (valor por defecto), De 45 a 64 años y Mayores de 65 años.

  • Un botón para someter el formulario a un servlet, y éste a su vez controlará una clase que le sirva de modelo (MVC) para controlar la apertura, accesos y cierre de la base de datos.

El funcionamiento de la interfaz es el siguiente,

Modo tabular: El modo tabular operará sólo si está seleccionado el botón radial Informe Tabular y se tomará en consideración cualquiera de las dos selecciones: Sexo y tramo de edad. Y así por ejemplo, si se selecciona Mujeres de 16 a 24 años.

Image2

Donde puede verse que que los datos se corresponden a lo solicitado: Número (en miles) de Mujeres de 16 a 24 años que tomaron los tipos de farmacos: Anticatarrales, Analgésicos, Antipiréticos, Reconstituyentes, Lasantes, Antibióticos, Tranquilizantes, Alergia, Reuma, Corazón, Tensión arterial, Estómago, Antidepresivos, Anticonceptivos, Menopausia, Colesterol y Antidiabéticos. (Este informe es el mismo que para Hombres, aunque obviamente con distintos datos). Como es natural, con las dos selecciones (sexo y tramo de edad) existen diez posibilidades, cinco para cada sexo.

 Modo gráfico: El modo gráfico operará sólo si está seleccionado el botón radial Informe Grafico y sólo tomará en consideración la selección del sexo, lo que quiere decir que tendrán que acumularse los datos cualquiera que sea la edad y para un sexo dado. Y así por ejemplo, si se selecciona Hombres, aparecerá el siguiente diagrama,

Image3

La base de datos del problema se llama farmacos (MySQL), y está constituida por tres tablas:

farmacos (17 Tipos de fármacos o medicamentos que toma la población), gruposedad (cinco tramos de edad en las que se divide la población para su estudio) y consumo (número, en miles de personas, que por sexo y tramo de edad han consumido cada uno de los 17 tipos de fármacos)

Tenga presente que los informes del INE (Instituto Nacional de Estadística) referido a este estudio jamás ha cambiado los 17 tipos de fármacos, así como los tramos de edad desde que está entregando dicha información.

Finalmente, la tabla consumo, está definida en la forma,

Image6

Donde el comando SQL, SELECT * FROM farmacos.consumo where consumo.sexo = ‘M’; produce el siguiente resultado:

Image5

Y este otro, SELECT * FROM farmacos.consumo where consumo.sexo = ‘V’;.

Image4

Notas:

Se entrega para resolver el problema,

  • Imágenes farmacia.jpg, infgrafico.jpg, inftabular.jpg
  • Script backup necesario denominado Backup_Farmacos.sql necesario para montar la base de datos del problema
  • Componentes de la librería gráfica JfreeChart (jcommon-1.0.15.jar y jfreechart-1.0.12.jar).

SE REQUIERE OBLIGATORIAMENTE UTILIZAR EL MODELO VISTA CONTROLADOR.(MVC)

Tutorial de Servlet (1): Introducción, Ciclo de Vida y Ejemplo básico.

¿Qué son los Servlets de Java?

Los Servlets son programas escritos en Java y que dan una respuesta alternativa a la programación Web con CGI , ampliando su funcionalidad. Se ejecutan en un servidor Web dentro de un contenedor de servlets (por ejemplo Apache Tomcat) y construyen páginas Web.

Algunas de las ventajas de los Servlet frente a los CGI podrían ser:

  • Más Eficiencia. Con CGI tradicional, se arranca un nuevo proceso para cada solicitud HTTP. Con los Servlets, cada petición es manejada por un hilo y no un proceso del sistema operativo. De forma similar, en CGI tradicional, si hay N peticiones simultáneas para el mismo programa CGI, el código de este problema se cargará N veces en memoria. Sin embargo, con los Servlets, hay N hilos pero sólo una copia de la clase Servlet.
  • Más Potencia. Los Servlets Java nos permiten fácilmente hacer muchas tareas que son difíciles con un CGI normal. Esto simplifica las operaciones que se necesitan para buscar imágenes y otros datos almacenados en situaciones estándards. Los Servlets también pueden compartir los datos entre ellos, también pueden mantener información de solicitud en solicitud, simplificando el seguimiento de sesiones,manejas cookies y cabeceras. La razón básica de esta potencia es la propia potencia de Java.
  • Más Portablilidad. Los Servlets están escritos en Java y siguen un API bien estandarizado y por tanto, están soportados directamente en la mayoría de los servidores Web.
  • Más Barato. Hay un número de servidores Web gratuitos o muy baratos que son buenos para el uso “personal” y la mayoría de instalaciones empresariales y este es el caso de Apache Tomcat.

El API Servlets y el ciclo de vida.

Los servlets usan clases e interfaces de dos paquetes:

  1. javax.servlet que contiene clases para servlets genéricos (independientes del protocolo que usen) y,
  2. javax.servlet.http (que añade funcionalidad particular de http). El nombre javax indica que los servlets son una extensión.

Los servlets no tienen el método main() como los programas Java, sino que se invocan unos métodos cuando se reciben peticiones. A esta metodología se le llama ciclo de vida de un servlet y viene dado por tres métodos: init, service, destroy:

INICIALIZACIÓN: Una única llamada al método “init” por parte del servlet. Incluso se pueden recoger unos parámetros concretos con “getInitParameter” de “ServletConfig” inicialales y que operarán a lo largo de toda la vida del servlet.
SERVICIO: una llamada a service() por cada invocación al servlet para procesar las peticiones de los clientes web.
DESTRUCCIÓN: Cuando todas las llamadas desde el cliente cesen o un temporizador del servidor así lo indique o el propio administrador así lo decida se destruye el servlet. Se usa el método “destroy” para eliminar al servlet y para “recoger sus restos” (garbage collection).

Cada vez que el servidor pasa una petición (distinta a la primera) a un servlet se invoca el método service(), este método habrá que sobreescribirlo (override). Este método acepta dos parámetros: un objeto petición (request) y un objeto respuesta. Los servlets http, que son los que vamos a usar, tienen ya definido un método service() que llama a doXxx(), con Xxx el nombre de la orden que viene en la petición al servidor web. Estos dos métodos son doGet() y doPost() y nos sirven para atender las peticiones específicamente provinientes de métodos GET o POST respectivamente,

De esta manera, una vez se carga el servlet, es muy eficiente, pues sólo hay una copia cargada en memoria (se ejecutan uno o varios hilos), no hay que crear nuevos objetos (un solo objeto servlet), y tiene persistencia: puede guardar información entre peticiones, como contadores o conexiones a una base de datos. Esto último puede ser muchísimo más eficiente hacerlo en el método init que abrir y cerrar la conexión con la base de datos en cada petición.

Métodos GET y POST

GET: Paso de parámetros en la propia URL de acceso al servicio/recurso del servidor.
Método asociado del servlet “doGet
GET /query.html?keyword=’diego’ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: es,eu;q=0.7,en-gb;q=0.3
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
Host: localhost:9999
Connection: Keep-Alive
 

POST: Lo mismo que GET pero los parámetros van en línea aparte dentro del cuerpo de la petición.
Método asociado del servlet “doPost”.

POST /cgi-bin/search.sh HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: es,eu;q=0.7,en-gb;q=0.3
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
Host: localhost:9999
Content-Length: 13
Connection: Keep-Alive
Cache-Control: no-cache
keyword=diego

Ejemplo1:

Veamos la estructura básica de un servlet con un ejemplo.

Para entender cómo funciona un servlet vamos a diseñar uno muy básico y que a modo de plantilla nos sirva para construir otros, para hacer esto, iniciamos una sesión del IDE de NetBeans. Hacemos proyecto Web nuevo al que llamaremos “Ejem0Servlet”, una vez tengamos la plantilla de la página index.jsp vamos a hacer que ésta llame a un servlet a través de un enlace href, es decir, el código de index.jsp será:

Ahora vamos a añadir un paquete al que llamaremos “paquete0”, para hacer esto, bastaría situarse con el botón derecho sobre el nombre del proyecto y seleccionar Nuevo Paquete. Cuando tengamos el paquete, nos situamos en él y con el botón derecho seleccionamos Nuevo Servlet, llamamos al nuevo servlet “Servlet0” y aparecerá la siguiente plantilla,

donde hemos “descomentado” las instrucciones de processRequest . Como vemos en este servlet elemental, comienza con una cabecera donde se indica el paquete que lo contiene y seis importaciones de paquetes que son necesarios para su correcta ejecución,

luego vemos que la clase que define el servlet es una clase pública extendida o derivada de HttpServlet. Esta clase, naturalmente es pública para poder ser “vista” desde cualquier otro servlet o jsp del proyecto, es decir,

La contiene varios métodos, a saber:

1.- Método  protected void processRequest(HttpServletRequest request, HttpServletResponse response)

Como0 vemos este método se ejecuta tanto si la petición se realiza a través de GET como si es a través de POST y lo único que hace es devolver un texto. Merece especial consideración las instrucciones:

  1. response.setContentType(“text/html;charset=UTF-8”); Esta instrucción fija el tipo de contenido que será devuelto al peticionario, al cliente.
  2. PrintWriter out = response.getWriter(); Esta instrucción crea el objeto “out” que permitirá escribir la salida. Este objeto es distinto al objeto out implícito de los jsp.
  3. request.getContextPath; , contiene el path desde donde se ha reaklizado la petición.

2.-Método protected void doGet(HttpServletRequest request, HttpServletResponse response)

Este método llama al método processRequest, se prejuzga que las tareas a ejecutar son las mismas con una llamada GET que con una llamara POST. En caso de error se lanza la excepción ServletException.

3.-Método protected void doPost(HttpServletRequest request, HttpServletResponse response)

Este método llama al método processRequest, se prejuzga que las tareas a ejecutar son las mismas con una llamada GET que con una llamara POST. En caso de error se lanza la excepción ServletException.

4.-Método public String getServletInfo()

Podemos observar que la clase no tiene ni método init() ni método destroy. No son necesarios, ni obligatorios.

Si ejecutamos,

EJEMPLO2.

En el ejemplo anterior no queda claro quien atiende específicamente la petición, si doGet() o doPOst(). En realidad queda claro, pero de manera implícita, ya que cuando no existe un atributo “method”  en una etiqueta form de HTML que especifique el método GET o POST, el servlet SIEMPRE, por defecto, responde con el método doGet(). Vamos a modificar el programa anterior y construiremos otro al que llamaremos ejem1Servlet (la mejor idea es copiarlo con el IDE de Netbeans).

Modificaremos el Servlet0 de manera que no exista el método processRequest. Esta vez haremos que cada uno de los métodos doGet() y doPOst() responda cada uno por sí sólo.

He aquí los métodos:

y

Si ejecutamos el programa

como vemos, el servlet ha respondido con el método doGet(), que es el que utiliza por defecto cuando no se explicita el método de llamada.

Descriptor de despliegue:

El archivo web.xml se denomina descriptor de despliegue y es necesario cuando se utilizan servlet, porque con él se define su nombre y se identifica al paquete y clase que lo contiene, entre otras cuestiones. Mas adelante en este tutorial se analizarán otros usos, tales como los filtros, los parametros de contexto, los parametros iniciales, etc…En NetBeans se encuentra en la carpeta WEB-INF.

Conviene recordar:

El ciclo de vida de un servlet.

Los distintos métodos fundamentales de un servlet: init, service, doGet, doPost, destroy.

Relación entre los métodos GET y POST de un formulario, llamadas desde la etiqueta

Cuando utilizar GET y POST en función de la seguridad.

El uso de web.xml o descriptor de despliegue.