Está en la página 1de 31

Servlet

Se ejecutan del lado del servidor.

Un servidor debe procesar las peticiones del


cliente (request) y darles una respuesta
(response).

El servlet lee cosas del request y escribe cosas


en el response.

pablomonteserin.com
J2EE y JEE (Java Enterprise
Edition)
La JVM no tiene todo lo necesario para arrancar una aplicación corporativa
(web).

La aplicación java no se va a ejecutar directamente por la JVM, sino por un


servidor de aplicaciones (TOMCAT, WEBSHPHERE, JBOSS, etc.), que tendrá
todo lo necesario para ejecutar una aplicación corporativa.

El servidor de aplicaciones es el que si que se ejecutará directamente en la


JVM.

Un servidor de aplicaciones es una aplicación JAVA que puede contener otras


aplicaciones y les proporciona servicios.

J2EE es una especificación que determina las APIs para contruir una aplicación
corporativa. Por tanto, los diferentes servidores de aplicaciones deberán tener
ciertas clases que harán lo que J2EE indica,, aunque la implementación de sus
clases difiera.
JBOSS, WEBSHPERE, WEBLOGIC

Son contenedores de aplicaciones con una parte


adicional (el contenedor de EJBs) que no vamos
a usar.

Lo que sí usaremos será un contenedor de


Servlets.

Un contenedor de Servlets es una parte del


servidor de aplicaciones con las APIs y servicios
necesarios para procesar servlets.
Para poder trabajar con las funcionalidades que
ofrece J2EE habrá que tener instalada una IDE
con soporte para esta tecnología.

Podemos utilizar Eclipse Helios(recomendado)


descargándolo de:

http://www.eclipse.org/downloads/

Si utilizamos la versión Galileo, habrá que instalar


los plugins de J2EE:
Help -> install new software ->
Work with: Galileo update site -> Web, XML, and
Java EE Develop
Descargar el servidor apache
tomcat de internet

http://www.oracle.com/technetwork/java/javase/downloads/index.html

pablomonteserin.com
Cargar un servidor en eclipse

Menú Window → Preferences → Server → Runtime Enviroment


→ Add → Apache Tomcat v.6 Next

Browse → Seleccionamos la ubicación del servidor.

JRE → Seleccionamos la ubicación del jdk.

pablomonteserin.com
Librerías necesarias
Btn derecho sobre el proyecto → Properties →
Java build path → libraries

Librerías del
servidor

Add JARs → añade un jar a partir de nuestra carpeta de proyecto.

Add External JARs → añade un jar ubicado en una carpeta de nuestro equipo.

Add Library → añade una librería a partir de las que se encuentren disponibles. Ya que nuestro
propio servidor TomCat cuenta con librerías para desplegar las aplicaciones, dependiendo del
servidor al que hayamos vinculado eclipse, podremos añadir o no cieras librerías.
pablomonteserin.com
Web App Libraries

Contiene las librerías almacenadas en la carpeta


lib de nuestro proyecto web.

pablomonteserin.com
Creación de un dynamic proyect

Nota:

Lo que está dentro de la carpeta WEB-INF, no es


visible por el cliente.

pablomonteserin.com
Fichero web xml, dentro de la
carpeta WEB-INF

Contiene información sobre la configuración de


nuestro proyecto web.

Inicialmente contiene una <welcome-file-list>, que


indica el fichero que se va a ir a buscar al acceder
al servidor.

pablomonteserin.com
Crearemos los servlets en un
paquete

Java resources: src → New package

Por convenio, el paquete suele empezar por el


nombre del dominio dado la vuelta.

Ej:
pablomonteserin.com → com.pablomonteserin

pablomonteserin.com
Nuevo servlet
Selecciono el paquete → Botón derecho → new → Servlet

Al hacer esto se crea una referencia al servlet en el web.xml que debemos


actualizar si renombramos el servlet. De lo contrario obtendríamos un error 404
al ejecutar el servlet:

pablomonteserin.com
Para cada servlet...
Al hacer una petición, esta busca en los servlet-mapping un url-pattern que
coincida con la misma. Si encuentra coincidencia buscará el servlet-class a
partir del servlet-name recién obtenido.

<servlet-mapping>
<servlet-name>A_HolaMundo</servlet-name>
<url-pattern>/A_HolaMundo</url-pattern>
</servlet-mapping>

<servlet>
<description>
</description>
<display-name>A_HolaMundo</display-name>
<servlet-name>A_HolaMundo</servlet-name>
<servlet-class>
com.pablomonteserin.servlets.A_HolaMundo</servlet-class>
</servlet>
Error

Este es un error de enlace de eclipse con el


servidor. Eliminamos el servidor desde eclipse.
Crear un Servlet hola mundo
package com.pablomonteserin.servlets;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class A_HolaMundo extends HttpServlet {


private static final long serialVersionUID = 1L;

public A_HolaMundo() {
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws


ServletException, IOException {
System.out.println("Hola mundo!");
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws


ServletException, IOException {
}

pablomonteserin.com
Ejecutar el servlet anterior

Btn derecho sobre el código → Run as → Run on server

Alt + shift + x + r

pablomonteserin.com
Hacer que la el código de la página de respuesta sea
interpretado como html:

response.setContentType("text/html");

pablomonteserin.com
Rehacer el programa anterior
escribiendo en una página html en
vez de en las trazas

Con el programa anterior generamos una traza. Si queremos


mostrar código html, lo lógico es pensar que el objeto response
sea el que contiene el código necesario.

PrintWriter writer = response.getWriter();


writer.println(”hola!”);

pablomonteserin.com
Recuperar parámetros del broswer
Pondremos el parámetro en el propio broswer:
http://localhost/proyecto/servlet?param1=valor1&param2=valor2

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws


ServletException, IOException {
String nombre = request.getParameter("nombre");
response.getWriter().write("Adios " + nombre);
}

pablomonteserin.com
Ejercicio

Hacer un servlet que recupere dos números y


calcule la suma.

pablomonteserin.com
Ejercicio - Calculadora

Hacer un servlet que detecte la operación (suma,


resta, multiplicación, división), opere en
consecuencia y muestre el resultado en una
página web.

Nota:
Para evitar problemas, mejor usar la palabra
”sumar” en vez del símbolo +, etc...

pablomonteserin.com
Capturaremos las excepciones de
un servlet usando Throwable
Esto es debido a que pueden llegar muchas
excepciones y errores de diferentes tipos y de
esta forma te aseguras de que los vas a capturar.

También podemos capturar excepciones en el


modelo, pero normalmente se las arrojaremos al
controlador.

Una excepción arrojada por el servlet es recogida


por el servidor (Tomcat) y transformada en un
error 500 de una página web.
pablomonteserin.com
Por definición, un servlet no puede
arrojar excepciones diferentes de
las que arroja por defecto

protected void doGet(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException, ServletSQLException {

pablomonteserin.com
… Si queremos capturar un
excepción distinta

pablomonteserin.com
Ejercicio – Consulta I

Hacer un único servlet que haga una consulta en


una tabla libro de la base de datos y muestre los
resultados en una página html. Dicha tabla tiene
tres campos (isbn, titulo, precio).

pablomonteserin.com
Ejercicio – Consulta II

Hacer un servlet que haga una consulta en una


tabla libro de la base de datos y muestre los
resultados en una página html. Dicha tabla tiene
tres campos (isbn, titulo, precio).

La conexión a la base datos viene dada por un


método estático definido por nosotros, llamado
getConnection(), de una clase Java llamada
Conexion.

pablomonteserin.com
Ejercicio Consulta III

Hacer un servlet que haga una consulta en una tabla libro de la


base de datos y muestre los resultados en una página html. Dicha
tabla tiene tres campos (isbn(varchar), titulo(varchar), precio(int)).

La conexión a la base datos viene dada por un método estático


definido por nosotros, llamado getConnection(), de una clase Java
llamada Conexion que nosotros crearemos.

La consulta sólo debe efectuarse sobre un registro cuyo campo


isbn que tenga un valor concreto que habremos pasado como
parámetro.

pablomonteserin.com
Ejercicio Consulta IV
Hacer un servlet que pueda realizar 4 operaciones en funcion de un parámetro action
que le llegue: alta, baja, modificacion y consulta.

Estas operaciones serán evaluados mediante sentencias condicionales if dentro del


servlet. Además será dentro de cada sentencia condicional donde se efectuará la
conexión y las correspondiente operaciones sobre la base de datos

Para la conexión a la base de datos usaremos un método estático definido por nosotros,
llamado getConnection(), de una clase Java llamada Conexion que nosotros crearemos.

La tabla sobre la que opera el servlet tiene tres campos (isbn(varchar), titulo(varchar),
precio(int)).

La operación de consulta devolverá el registro cuyo campo isbn tenga un valor concreto
que habremos pasado como parámetro.

Ver el ejercicio resuelto en youtube

pablomonteserin.com
Ejercicio Consulta V

Este ejercicio es igual al anterior, pero ahora las


operaciones con la base de datos (alta, baja,
consulta y modificación) serán efecutadas
mediante llamadas a métodos estáticos de una
clase llamada ”Servicio”.

La conexión con la base de datos se realizará


dentro de cada uno de estos métodos estáticos.

pablomonteserin.com
Ejercicio Consulta VI

Este ejercicio es igual que el anterior, pero ahora la


información que devuelve la consulta que hace el
servlet será almacenada en un bean llamado Libro.

Cuando imprimamos en una página html los valores


recuperados de la base de datos, lo haremos a paritr
de este bean y no directamente al recorrer el
ResultSet devuelto por la consulta.

pablomonteserin.com
Consulta VII

Modificar la aplicación anterior para que la


consulta no devuelva un solo registro, sino todos
los registros que hay en la tabla. Dichos registros
serán almacenados en un objeto de tipo collection
dentro del método estático de la clase Servicio.

Luego, en el servlet, dentro del condicional if


correspondiente se recorrerá dicha collection
imprimiendo su contenido.

pablomonteserin.com

También podría gustarte