Menú Curso Java Web (JSP's/Servlets) : Código Filtro ImpuestosRegistro.java.

(Anterior) "MVC" ("Model - View - Controller")

Filter.

Para generar un Filtro es necesario que la Clase en cuestión herede ("inherit") el comportamiento de la clase llamada Filter, através de dicha Clase se tiene acceso a los métodos y mecanismos ofrecidos por un filtro. Este procedimiento es muy similar al de un Servlet que hereda ("inherit") su comportamiento de la Clase HttpServlet ( o GenericServlet).Los tres métodos que debe implementar un filtro son:

  • doFilter (Obligatorio): Este método es la parte medular de todo Filtro ya que dentro de él se incluyen las tareas principales de ejecución.

  • init (Opcional) : Es un método ejecutado antes del método doFilter, su labor principal es adquirir/inicializar algún recurso que será empleado por doFilter.

  • destroy (Opcional) : Ejecutado una vez que ha terminado el método doFilter, su labor es liberar los recursos utilizados/adquiridos en el proceso de ejecución los cuales generalmente son aquellos reservados por init.

Código Fuente ImpuestosRegistro.java.

package com.osmosislatina.filtros;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.osmosislatina.beans.*;
import java.util.*;

public class ImpuestosRegistro implements Filter
{

    private FilterConfig config;
    
    public void init(FilterConfig config) throws ServletException {
	this.config = config;
    } 
    
    public void destroy() {
	config = null;
    }
    
    public void doFilter(ServletRequest request, ServletResponse response,
			 FilterChain chain) throws IOException, ServletException {

	chain.doFilter(request, response);		

	// Definir variables para colocar nota de impuestos
	int impuestos = 0;	
	String nota = "";


       	// Extraer si filtro incluye impuestos	
	try { 
	    impuestos = Integer.parseInt(config.getInitParameter("impuestos")); 
	} catch (NumberFormatException exc) { 
	    config.getServletContext().log("No fue posible convertir parámetro de filtro a numero entero", exc);
	}
	
	
	if (impuestos > 0) {
	    // Existe una tarifa de impuestos definida en filtro
	    nota = " Aplica " + impuestos + " % impuestos ";
	}
	
	// Extraer Sesión 
	HttpSession session = ((HttpServletRequest)request).getSession();
	session.setAttribute("impuesto",nota);
      	
	
	// Datos de la Puja 
	Date fecha = new Date();	
	String nombre =  request.getParameter("producto");
	String cantidad = request.getParameter("cantidad");
	String precio  = request.getParameter("precio");

 
	String puja = " * Puja Realizada : " + fecha  + " / Producto : " + nombre + 
	    " / Cantidad : " + cantidad + " / Precio Unitario : $" + precio; 
	
	
	
	config.getServletContext().log("Registro PUJA: " + puja);
    }
}

  • Primeramente se define la librería ("package") a la cual pertenecerá esta Clase, en este caso com.osmosislatina.filtros, para posteriormente declarar la Clase principal ImpuestoRegistro que implementa la Interfase javax.servlet.Filter una característica primordial de todo filtro.

  • Es definido un campo del tipo FilterConfig que contendrá datos de configuración acerca del filtro.

  • Se declara el método init que toma como dato de entrada un objeto de tipo FilterConfig el cual es asignado al campo definido anteriormente. Vale mencionar que dicho dato de entrada proviene de los datos de configuración del filtro según definidos en web.xml.

  • Posteriormente se define el método destroy que asigna un valor nulo (null) al campo config.

  • El método principal doFilter toma como datos de entrada un objeto ServletRequest que representa la requisición, un objeto ServletResponse que contiene el objeto de respuesta, y otro objeto FilterChain que representa una cadena de filtros; la lógica definida en este método se describe a continuación :

    • Como primer paso se invoca el mismo métdo doFilter sobre la cadena de filtros (FilterChain), el cual toma como parámetros la requisición y respuesta proporcionados como datos de entrada. Esta invocación simplemente indica que debe ser aplicado el filtro. NOTA: El grupo de filtros o cadena a la que se refiere FilterChain es definida en el archivo web.xml

    • Se definen dos variables para colocar configuraciones y valores del filtro, seguido se declara un bloque try/catch para extraer el parémetro impuestos definido en la configuración del filtro (definido en web.xml). Nótese que dicho parámetro es extraído através del método getInitParameter del objeto config.

    • En base al valor de configuración se asigna este valor a la variable nota, para posteriormente ser colocado en la sesión del usuario bajo el nombre de impuesto. NOTA: Observe que la sesión del usuario, aunque extraída del objeto request, se realiza através de un cast hacia HttpServletRequest, lo anterior es necesario ya que el objeto request de un filtro proviene de la interfase genérica ServletRequest más no de la sub-interfase HttpServletRequest.

    • Posteriormente se genera un objeto con la fecha del sistema, y a su vez se extraen de la requisición (request) los parámetros producto, cantidad y precio, los cuales son colocados en un String llamado puja.

    • Finalmente, mediante el objeto config se accesa el registro ("Log") del "Servlet Engine" através del método getServletConfig para enviar el valor antes generado (puja) hacia el registro.

En la siguiente sección se describe como es configurado este filtro en el archivo de configuración web.xml.

Terminos Legales de Contenido ©2000-2011 Osmosis Latina

Diseñado bajo estándares : XHTML   CSS  

webmaster@osmosislatina.com