Páginas estáticas

El cliente solicita una página que se encuentra en el servidor y el servidor envía al cliente la página tal cual la tiene alojada, sin hacerle ninguna modificación en función de la petición del cliente o de cualquier otro parámetro.

ver diagrama

Contenedor de aplicaciones vs Servidor de aplicaciones

Un Contenedor de aplicaciones sólo alberga Servlets (aplicaciones Java). Un servidor de aplicaciones permite ejecutar aplicaciones con EJB. Un Contenedor de aplicaciones es un software que puede vivir dentro de un contenedor de aplicaciones.

Algunos ejemplos de servidores de aplicaciones

De pago

  • WebLogic (Oracle)
  • JBoss Enterprise Application Platform (Red Hat)
  • WebSphere (IBM)

Gratuitos

  • JOnAS (Object Web)
  • Wildfly (Versión de JBoss por la comunidad)
  • GlassFish (Oracle)
  • Gerónimo y TomEE (Apache)

Cargar apache Tomcat en Eclipse

Descargar el servidor apache tomcat de internet
http://tomcat.apache.org

Cargar un servidor en eclipse
Menú Window → Preferences → Server → Runtime Enviroment → Add → Apache Tomcat v.9 → Next

Browse → Seleccionamos la ubicación del servidor.

JRE → Seleccionamos la ubicación del jdk.

Ejercicio - crear dos páginas estáticas

Crear un proyecto dynamic web project con dos páginas estáticas. Una contiene un enlace, de tal forma que al pulsar sobre el mismo lanzaremos una petición que hará que lleguemos a la otra página.

Peticiones al servidor: GET vs POST

GET: Hey servidor! Mira lo que te mando en la URL y haz algo, quieres?!

POST: Hey servidor! Mira lo que te mando en mi cuerpecito y haz algo quieres?!

  • GET es más rápido que POST.
  • El número de caracteres que puedes enviar utilizando GET es limitado y depende del servidor.
  • La información enviada por GET se puede visualizar en la URL, y por tanto no podríamos enviar información delicada (passwords, etc.)

Servlet

Descargar Workspace

Es una clase Java que se ejecuta en el contexto de un servicio de red y su misión es recibir y responder a las peticiones de uno o más clientes.

El servlet lee cosas del request y escribe cosas en el response.

diagrama 2

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.

Ejercicio: crear el paquete de los servlets

Java resources: src → New package

Por convenio, el paquete suele empezar por el nombre del dominio dado la vuelta.

Ej:
pablomonteserin.com → com.pablomonteserin

Ejercicio: crear un 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:

Nota:
Para ejecutar el servlet:
Btn derecho sobre el código → Run as → Run on server
Alt + shift + x + r

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>

A partir de Java 7, con la especificación de Servlets 3.0, es posible cambiar estas entradas en el fichero web.xml, por anotaciones:

@WebServlet("/saludar")
public class NoSeQueNoSeCuantoServlet extends HttpServlet {
	...

Ejercicio: 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 {
	}

}

Contenedores

Contenedor de servlets
Es un módulo especial del servidor web que está totalmente dedicado al manejo de Servlets.

Contenedor web
contenedor web = contenedor servlet + contenedor jsp
Ejs: Apache Tomcat

Contenedor de aplicaciones

Aparte de un contenedor web, incorpora un contenedor EJB (Enterprise Java Beans),
Ejs: WebLogic, WebSphere, JBoss...

JEE es una especificación que determina las APIs para construir una aplicación corporativa. Por tanto, los diferentes servidores de aplicaciones deberán tener ciertas clases que harán lo que J2E determina, aunque la implementación de sus clases difiera.

JEE nace de la necesidad de tener aplicaciones distribuídas. Una aplicación distribuída es aquella en la que sus componentes (el código que la compone) se ejecuta en varios entornos (ordenadores). Para unir todos esos entornos se utiliza el servidor web.

EJB

EJB - es una API de java que implementa diferentes servicios:

  • permite persistir una jerarquía de clases en una base de datos (igual que Hibernate).
  • facilita la realización de transacciones complejas.
  • facilita la interacción entre diferentes servidores (invocar desde un servidor métodos de otro).
  • facilita la implementación de seguridad en el proyecto.

Desventajas

  • reduce la velocidad de proceso, ya que se hacen más operaciones de las necessarias
  • la curva de aprendizaje es bastante pronunciada

Librerías necesarias

Btn derecho sobre el proyecto → Properties → Java build path → libraries

pantallazo eclipse

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 ciertas librerías.

Servlet's live


public class ServletLive extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	public ServletLive() {
		super();
		System.out.println("Constructor");
	}

	@Override
	public void init() throws ServletException {
		System.out.println("Inicio");
		super.init();
	}

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1)
		throws ServletException, IOException {
		System.out.println("Service");
		super.service(arg0, arg1);
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet");
		destroy();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	@Override
	public void destroy() {
		super.destroy();
		System.out.println("Fin");
	}
}

Salida:
Constructor
Inicio
Service
doGet
Fin

Recuperar parámetros del browser

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("param1");
	response.getWriter().append("Adios " + nombre);
}

Ejercicio

Hacer un servlet que recupere dos números y calcule la suma.

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.

Para ello el servlet llamará a una clase Servicio que realizará las operaciones.

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

Debemos intentar que las excepciones no lleguen a la vista

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.

Ejercicio CRUD (Create, Read, Update, Delete)

Este ejercicio es una ampliación del anterior.

Hacer un servlet que pueda realizar 4 operaciones en función de un parámetro action que le llegue: alta, baja, modificación y consulta.

Estas operaciones serán evaluadas mediante sentencias condicionales if dentro del servlet. Luego llamaremos a un método de la clase Servicio en el que se efectuará la conexión y la correspondiente operación 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 id(int, PK), titulo(String), precio(int).

La operación de consulta devolverá una colección de beans Libro que recorreremos en el servlet.

icono de mandar un mail¡Contacta conmigo!
contacta conmigoPablo Monteserín

¡Hola! ¿En qué puedo ayudarte?