24
May
10

MVC en JSP

(PARA ENTENDER MEJOR EL EJERCICIO REVISAR LAS ENTRADAS ANTERIORES DONDE SE EXPLICA TODO PASO A PASO)
Bueno siguiendo con el ejemplo anterior esta vez explicare mi aplicación del patrón MVC en jsp, no es la intención explicar lo que es MVC.

Esta vez solo se colgará el código la explicación esta en la presentación de arriba.

la estructura dela aplicación seria algo muy parecido a:

el modelo bajo el cual se trabajo es este:

Base de datos

ejercicios.db

# --------------------------------------------------------
# Host:                         localhost
# Database:                     ejercicios
# Server version:               5.1.36-community-log
# Server OS:                    Win32
# HeidiSQL version:             5.0.0.3222
# Date/time:                    2010-05-24 18:09:13
# --------------------------------------------------------

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
# Dumping database structure for ejercicios
CREATE DATABASE IF NOT EXISTS `ejercicios` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `ejercicios`;

# Dumping structure for table ejercicios.departamento
CREATE TABLE IF NOT EXISTS `departamento` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(50) NOT NULL DEFAULT '',
  `descripcion` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=latin1;

# Dumping data for table ejercicios.departamento: 8 rows
/*!40000 ALTER TABLE `departamento` DISABLE KEYS */;
INSERT INTO `departamento` (`id`, `nombre`, `descripcion`) VALUES (1, 'SISTEMAS', 'ENCARGADO DE MANTENER LAS REDES Y DE DESARROLLAR APLICACIONES PARA LA ORGANIZACION'), (2, 'CONTABILIDAD', 'ENCARGADO DE GESTIONAR TODA LA PARTE CONTABLE DE LA ORGANIZACION, LAS ENTRADAS Y SALIDAS DE DINERO Y MUEBLES SE REGISTRAN AQUI'), (3, 'SERVICIOS GENERALES', 'ESTE DEPARTAMENTO ES EL ENCARGADO DE LA ADECUACION Y MANTENIMIENTO DE LA PLANTA FISICA DE LA ORGANIZACION'), (4, 'ADMINISTRACION', 'ESTE DEPARTAMENTO SE ENCARGA DE LA GERENCIA Y TOMA DE DECICIONES DE LA ORGANIZACION'), (5, 'VENTAS', 'ESTE DEPARTAMENTO SE ENCARGA DEL ASESORAMIENTO COMPLETO A CLIENTES, POTENCIALES CLIENTES Y PERSONAS QUE MUESTREN CUALQUIER TIPO DE INTERES O NECESIDAD, SOBRE CUALQUIERA DE LOS SERVICIOS O PRODUCTOS OFRECIDOS POR LA ORGANIZACION'), (6, 'RECURSOS HUMANOS', 'ESTE DEPARTAMENTO SE ENCARGA DE SELECCIONAR Y EVALUAR EL PERSONAL PARA CUMPLIR A CABALIDAD EL OBJETIVO DE NUESTRA ORGANIZACION'), (13, 'ghgh', 'ghghghgh'), (12, 'Pruebe', 'Pruebe');
/*!40000 ALTER TABLE `departamento` ENABLE KEYS */;

# Dumping structure for table ejercicios.empleado
CREATE TABLE IF NOT EXISTS `empleado` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) NOT NULL DEFAULT '',
  `apellido` varchar(100) NOT NULL DEFAULT '',
  `identificacion` int(20) NOT NULL DEFAULT '0',
  `departamento` varchar(100) NOT NULL DEFAULT '',
  `sueldo` double NOT NULL DEFAULT '0',
  `transporte` double NOT NULL DEFAULT '0',
  `fdn` date NOT NULL DEFAULT '2010-01-01',
  `foto` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;

# Dumping data for table ejercicios.empleado: 8 rows
/*!40000 ALTER TABLE `empleado` DISABLE KEYS */;
INSERT INTO `empleado` (`id`, `nombre`, `apellido`, `identificacion`, `departamento`, `sueldo`, `transporte`, `fdn`, `foto`) VALUES (1, 'Mauro Cesar', 'Gomez Mejia', 1047381742, '1', 850000, 50000, '1986-07-12', '1273120244484avartaryahoo.bmp'), (2, 'Sandra Patricia', 'Pinedo Florez', 1562153142, '2', 850000, 50000, '1983-03-02', '1273120579281Dibujo.bmp'), (3, 'Cesar Augusto', 'Anaya Boorguez', 1225456345, '4', 850000, 50000, '1975-08-21', '1273121305343images.jpg'), (4, 'Javier Andres', 'Ibarra Lopez', 1045124563, '1', 950000, 50000, '1979-09-17', '1273206286625F200811201452292577871692.jpg'), (5, 'Esther Patricia', 'Molina Ordoñez', 1234542154, '3', 650000, 50000, '1978-11-30', '1273247967593conserje-scrubs.png'), (6, 'David Eduardo', 'Palomino Castro', 1201212542, '5', 650000, 50000, '1986-06-06', '127334048328125299_381812654054_667059054_3891187_3653774_n.jpg'), (7, '111', '111', 111, '5', 500000, 45000, '2011-11-11', '1274713509828n703517459_2360.jpg'), (8, '222', '222', 222, '1', 222222, 22222, '2002-02-02', '1274714006687n1098644586_9567.jpg');
/*!40000 ALTER TABLE `empleado` ENABLE KEYS */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

LAS JAVA

Beans

Departamento.java

package org;
import java.io.Serializable;
import java.lang.Comparable;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Departamento implements Serializable,Comparable{

	private Integer id = 0;
	private String nombre = "";
	private String descripcion = "";

	public Departamento(){
		 super();
	}

	public Departamento(Integer id, String nombre,String descripcion){
		this.id = id;
		this.nombre = nombre;
		this.descripcion = descripcion;
	}

	public Departamento(Departamento d){
		this.id = d.getId();
		this.nombre = d.getNombre();
		this.descripcion = d.getDescripcion();
	}

	public Integer getId(){
		return id;
	}
	public String getNombre(){
		return nombre;
	}
	public String getDescripcion(){
		return descripcion;
	}

	public void setId(Integer id ){
		 this.id=id;
	}
	public void setNombre(String nombre ){
		 this.nombre=nombre;
	}
	public void setDescripcion(String descripcion ){
		 this.descripcion=descripcion;
	}

	public String toString(){
		return(
		"DATOS:::DEPARTAMENTO:::...\n"+
		"ID             : "+id+"\n"+
		"NOMBRE         : "+nombre+"\n"+
		"DESCRIPCION    : "+descripcion+"\n"+
		"");
	}

	public static Departamento load(ResultSet rs) throws SQLException {
		Departamento departamento = new Departamento();
		departamento.setId(rs.getInt("ID"));
		departamento.setNombre(rs.getString("NOMBRE"));
		departamento.setDescripcion(rs.getString("DESCRIPCION"));
		return departamento;
	}

	public int compareTo(Object departamento){
		return (this.nombre).compareTo(((Departamento)departamento).getNombre());
	}
}

Empleado.java

package org;
import java.io.Serializable;
import java.lang.Comparable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Date;

public class Empleado implements Serializable,Comparable{

	private Integer id = 0;
	private String nombre = "";
	private String  apellido = "";
	private Integer identificacion = 0;
	private String departamento = "";
	private Double sueldo = 0.0;
	private Double transporte = 0.0;
	private Date fdn = new Date(new java.util.Date().getDate());
	private String foto="sinfoto.jpg";

	public Empleado(){
		 super();
	}

	public Empleado(Integer id, String nombre, String  apellido, Integer identificacion, String departamento, Double sueldo, Double transporte, Date fdn,String foto){
		this.id = id;
		this.nombre = nombre;
		this.apellido = apellido;
		this.identificacion = identificacion;
		this.departamento = departamento;
		this.sueldo = sueldo;
		this.transporte = transporte;
		this.fdn = fdn;
		this.foto = foto;
	}

	public Empleado(Integer id, String nombre, String  apellido, Integer identificacion, String departamento, Double sueldo, Double transporte, java.util.Date fdn,String foto){
		this.id = id;
		this.nombre = nombre;
		this.apellido = apellido;
		this.identificacion = identificacion;
		this.departamento = departamento;
		this.sueldo = sueldo;
		this.transporte = transporte;
		this.fdn = new Date(fdn.getTime());
		this.foto = foto;
	}

	public Empleado(Empleado e){
		this.id = e.getId();
		this.nombre = e.getNombre();
		this.apellido = e.getApellido();
		this.identificacion = e.getIdentificacion();
		this.departamento = e.getDepartamento();
		this.sueldo = e.getSueldo();
		this.transporte = e.getTransporte();
		this.fdn = e.getFdn();
		this.foto = e.getFoto();
	}

	public Integer getId(){
		return id;
	}
	public String getNombre(){
		return nombre;
	}
	public String  getApellido(){
		return apellido;
	}
	public Integer getIdentificacion(){
		return identificacion;
	}
	public String getDepartamento(){
		return departamento;
	}
	public Double getSueldo(){
		return sueldo;
	}
	public Double getTransporte(){
		return transporte;
	}
	public Date getFdn(){
		return fdn;
	}
	public String getFoto(){
		return foto;
	}

	public void setId(Integer id ){
		 this.id=id;
	}
	public void setNombre(String nombre ){
		 this.nombre=nombre;
	}
	public void setApellido(String  apellido ){
		 this.apellido=apellido;
	}
	public void setIdentificacion(Integer identificacion ){
		 this.identificacion=identificacion;
	}
	public void setDepartamento(String departamento ){
		 this.departamento=departamento;
	}
	public void setSueldo(Double sueldo ){
		 this.sueldo=sueldo;
	}
	public void setTransporte(Double transporte ){
		 this.transporte=transporte;
	}
	public void setFdn(Date fdn ){
		 this.fdn=fdn;
	}
	public void setFdn(java.util.Date fdn ){
		 this.fdn=new Date(fdn.getTime());
	}
	public void setFoto(String foto ){
		 this.foto=foto;
	}

	public String toString(){
		return(
		"DATOS:::EMPLEADO:::...\n"+
		"ID             : "+id+"\n"+
		"NOMBRE         : "+nombre+"\n"+
		"APELLIDO       : "+apellido+"\n"+
		"IDENTIFICACION : "+identificacion+"\n"+
		"DEPARTAMENTO   : "+departamento+"\n"+
		"SUELDO         : "+sueldo+"\n"+
		"TRANSPORTE     : "+transporte+"\n"+
		"FDN            : "+fdn+"\n"+
		"FOTO           : "+foto+"\n"+
		"");
	}

	public static Empleado load(ResultSet rs) throws SQLException {
		Empleado empleado = new Empleado();
		empleado.setId(rs.getInt("ID"));
		empleado.setNombre(rs.getString("NOMBRE"));
		empleado.setApellido(rs.getString("APELLIDO"));
		empleado.setIdentificacion(rs.getInt("IDENTIFICACION"));
		empleado.setDepartamento(rs.getString("DEPARTAMENTO"));
		empleado.setSueldo(rs.getDouble("SUELDO"));
		empleado.setTransporte(rs.getDouble("TRANSPORTE"));
		empleado.setFdn(rs.getDate("FDN"));
		empleado.setFoto(rs.getString("FOTO"));
		return empleado;
	}

	public int compareTo(Object empleado){
		return (this.apellido).compareTo(((Empleado)empleado).getApellido());
	}
}

Models

Model.java

package org;
import java.util.ArrayList;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.DriverManager;

public class Model{

	private transient Connection co;
	private String driver = "com.mysql.jdbc.Driver";
	private String url = "jdbc:mysql://localhost:3306/ejercicios";
	private String nombre = "root";
	private String clave = "";
	private PreparedStatement pstmt = null;
	private ResultSet rs = null;

	public Model(){
		try {
			conectar();
		} catch (Exception ex){}
	}

	public void setDriver(String a) {
		driver = a;
	}

	public void setUrl(String a) {
		url = a;
	}

	public void setNombre(String a) {
		nombre = a;
	}
	public void setClave(String a) {
		clave = a;
	}

	public String getDriver() {
		return driver;
	}

	public String getUrl() {
		return url;
	}

	public String getNombre(){
		return nombre;
	}

	public String getClave(){
		return clave;
	}

	public void conectar() throws SQLException {
		if (driver == null) {
			throw new SQLException("Driver no cargado");
		}
		if (url == null) {
			throw new SQLException("URL invalida");
		}
		try {
			Class.forName(this.driver);
		} catch (ClassNotFoundException ex){
			desconectar();
			throw new SQLException("Error en la conexion, No cargo el Driver ");
		}
		co = DriverManager.getConnection(url,nombre,clave);
	}

	public void desconectar() {
		try {
			if (co != null) {
				co.close();
			}
			if (pstmt != null) {
				pstmt.close();
			}
			if (rs != null) {
				rs.close();
			}
		} catch (Exception ignorar) {}
	}

	public boolean estaConectado() {
			return (co != null);
	}

	public void agregarDepartamento(Departamento departamento) throws SQLException {
		pstmt = co.prepareStatement("insert into Departamento (nombre,descripcion) values (?,?)");
		pstmt.setString(1,departamento.getNombre());
		pstmt.setString(2,departamento.getDescripcion());
		pstmt.executeUpdate();
	}

	public Departamento buscarDepartamento(Integer id) throws SQLException {
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			pstmt = co.prepareStatement("Select id,nombre,descripcion from Departamento where id=?");
			pstmt.setInt(1, id);
			rs=pstmt.executeQuery();
			if (rs.next()) {
				return(Departamento.load(rs));
			}
		} finally {
			if (rs != null) {
				rs.close();
			}
			if (pstmt != null){
				pstmt.close();
			}
		}
		return null;
	}

	public boolean eliminarDepartamento( Integer id)throws SQLException{
		PreparedStatement pstmt = null;
		boolean sw=false;
		if (this.buscarDepartamento(id)==null)
			throw new SQLException("Registro de Departamento identificado con: "+id+", no encontrado");
		try{
			pstmt= co.prepareStatement("delete from Departamento where id=?");
			pstmt.setInt(1,id);
			int r=pstmt.executeUpdate();
			if ( r!=0)
				sw=true;
		}finally{
			if(pstmt!= null)
				pstmt.close();
		}
		return sw;
	}

	public boolean existeDepartamento(Integer id)throws SQLException{
		return (buscarDepartamento(id)!=null);
	}

	public ArrayList listaDepartamento() throws SQLException {
		ArrayList lista = new ArrayList();
		try {
			pstmt = co.prepareStatement("select id,nombre,descripcion from Departamento ");
			rs=pstmt.executeQuery();
			while(rs.next()){
				lista.add(Departamento.load(rs));
			}
		}finally{
			if (rs != null){
				rs.close();
			}
			if (pstmt != null) {
				pstmt.close();
			}
		}
		return lista;
	}

	public void agregarEmpleado(Empleado empleado) throws SQLException {
		pstmt = co.prepareStatement("insert into Empleado (nombre,apellido,identificacion,departamento,sueldo,transporte,fdn,foto) values (?,?,?,?,?,?,?,?)");
		pstmt.setString(1,empleado.getNombre());
		pstmt.setObject(2,empleado.getApellido());
		pstmt.setInt(3,empleado.getIdentificacion());
		pstmt.setString(4,empleado.getDepartamento());
		pstmt.setDouble(5,empleado.getSueldo());
		pstmt.setDouble(6,empleado.getTransporte());
		pstmt.setDate(7,empleado.getFdn());
		pstmt.setString(8,empleado.getFoto() );
		pstmt.executeUpdate();
	}

	public Empleado buscarEmpleado(Integer id) throws SQLException {
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			pstmt = co.prepareStatement("Select id,nombre,apellido,identificacion,departamento,sueldo,transporte,fdn,foto from Empleado where id=?");
			pstmt.setInt(1, id);
			rs=pstmt.executeQuery();
			if (rs.next()) {
				return(Empleado.load(rs));
			}
		} finally {
			if (rs != null) {
				rs.close();
			}
			if (pstmt != null){
				pstmt.close();
			}
		}
		return null;
	}

	public boolean eliminarEmpleado( Integer id)throws SQLException{
		PreparedStatement pstmt = null;
		boolean sw=false;
		if (this.buscarEmpleado(id)==null)
			throw new SQLException("Registro de Empleado identificado con: "+id+", no encontrado");
		try{
			pstmt= co.prepareStatement("delete from Empleado where id=?");
			pstmt.setInt(1,id);
			int r=pstmt.executeUpdate();
			if ( r!=0)
				sw=true;
		}finally{
			if(pstmt!= null)
				pstmt.close();
		}
		return sw;
	}

	public boolean existeEmpleado(Integer id)throws SQLException{
		return (buscarEmpleado(id)!=null);
	}

	public ArrayList listaEmpleado() throws SQLException {
		ArrayList lista = new ArrayList();
		try {
			pstmt = co.prepareStatement("select id,nombre,apellido,identificacion,departamento,sueldo,transporte,fdn,foto from Empleado ");
			rs=pstmt.executeQuery();
			while(rs.next()){
				lista.add(Empleado.load(rs));
			}
		}finally{
			if (rs != null){
				rs.close();
			}
			if (pstmt != null) {
				pstmt.close();
			}
		}
		return lista;
	}

}

WebModel.java

package org;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import java.sql.SQLException;

public class WebModel extends Model implements HttpSessionBindingListener {

	//al iniciar esta pagina que pasa
	public void init(ServletContext context)throws ServletException{
		//traemos los parametors del XML
		String driver=context.getInitParameter("jdbcDriver");
		String url=context.getInitParameter("databaseURL");
		String user=context.getInitParameter("databaseUser");
		String key=context.getInitParameter("databaseKey");

		if(driver==null){
			throw new ServletException("Driver no especificado");
		}
		if(url==null){
        	throw new ServletException("URL no especificada");
        }
        //los seteamos
		setDriver(driver);
		setUrl(url);
		setNombre(user);
		setClave(key);
		//nos conectamos
		try {
			conectar();
		}catch(SQLException ex) {
			throw new ServletException(ex.getMessage());
		}
	}

    public void valueBound(HttpSessionBindingEvent event) {}

    //si algo ocurre nos desconectamos
    public void valueUnbound(HttpSessionBindingEvent event) {
        desconectar();
    }

}

Actions

Action

package org;

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

public abstract class Action {
	protected HttpServletRequest request;
	protected HttpServletResponse response;
	protected ServletContext application;
	protected Model model;

	/*Este metodo todas las acciones que hereden deberan adaptarlo*/
	/*a la necesidad, (sobre-escribirlo)*/
	public abstract void run()throws ServletException, IOException;

	public void setRequest(HttpServletRequest request){
		this.request=request;
	}

	public void setResponse(HttpServletResponse response){
		this.response=response;
	}

	public void setApplication(ServletContext application){
		this.application=application;
	}

	public void setModel(Model model){
		this.model=model;
	}
}

AgregarDepartamento.java

package org;

//clases para que sea servlet
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;

public class AgregarDepartamento extends Action {
	//funcionalidad de este servlet
	public void run()throws ServletException, IOException{
		try {
			Departamento departamento=new Departamento();

			departamento.setNombre(request.getParameter("nombre"));
			departamento.setDescripcion(request.getParameter("descripcion"));

			model.agregarDepartamento(departamento);
		}catch (Exception ex) {
			throw new ServletException(ex.getMessage());
		}
		RequestDispatcher rd=application.getRequestDispatcher("/index.jsp?pagina=gd");
		if(rd==null){
			throw new ServletException("pagina no encontrada");
		}
		rd.forward(request,response);
	}

}

AgregarEmpleado.java

package org;

//calses para que sea servlet
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;

//clases para el tratamiento de archivos
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import java.io.File;

//clases para el tratamiento de los datos
import java.util.List;
import java.util.HashMap;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class AgregarEmpleado extends Action {

	public void run()throws ServletException, IOException{
		try {
			String IMGSFOLDER=(String)application.getAttribute("IMGSFOLDER");
    		FileItemFactory file_factory = new DiskFileItemFactory();
    		ServletFileUpload servlet_up = new ServletFileUpload(file_factory);
			List items = servlet_up.parseRequest(request);
			HashMap<String,String> parametros=new HashMap<String,String>();

    		for(int i=0;i<items.size();i++){
				FileItem item = (FileItem) items.get(i);
				String valor="";
        		if (item.isFormField()){
					valor=item.getString();
        		}else{
					valor=(new Date().getTime())+item.getName();
					File archivo_server = new File(IMGSFOLDER+valor);
					item.write(archivo_server);
				}
				parametros.put(item.getFieldName().toLowerCase(),valor);
			}
			DateFormat formato_fecha = new SimpleDateFormat("dd/MM/yyyy");

			Empleado empleado=new Empleado();

			empleado.setNombre(parametros.get("nombre"));
			empleado.setApellido(parametros.get("apellido"));
			empleado.setIdentificacion(Integer.parseInt(parametros.get("identificacion")));
			empleado.setDepartamento(parametros.get("departamento"));
			empleado.setSueldo(Double.parseDouble(parametros.get("sueldo")) );
			empleado.setTransporte(Double.parseDouble(parametros.get("transporte")));
			empleado.setFdn(formato_fecha.parse(parametros.get("fdn")));
			empleado.setFoto(parametros.get("foto"));
			model.agregarEmpleado(empleado);
		}catch (Exception ex) {
			throw new ServletException(ex.getMessage());
		}
		RequestDispatcher rd=application.getRequestDispatcher("/index.jsp?pagina=ge");
		if(rd==null){
			throw new ServletException("pagina no encontrada");
		}
		rd.forward(request,response);
	}

}

Controlador

Controller.java

package org;

import java.io.IOException;
import java.util.Map;
import java.util.HashMap;
import java.util.StringTokenizer;
import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Controller extends HttpServlet{

	public void doGet(HttpServletRequest rq, HttpServletResponse rp)throws IOException, ServletException{
		ejecutar(rq, rp);
	}

	public void doPost(HttpServletRequest rq, HttpServletResponse rp)throws IOException, ServletException{
		ejecutar(rq, rp);
	}

	private void ejecutar(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{
		//*llamamos a la session*/
		HttpSession session=request.getSession();
		//*sacamos el mapa de acciones de la session*/
        Map mapaAcciones = (Map) session.getAttribute("mapaAcciones");
        //*si aun no exite*/
        if(mapaAcciones==null){
        	//*lo inicializamos*/
            mapaAcciones=new HashMap();
        }
        //*ServletContext contexto de la aplicacion*/
        ServletContext context=getServletContext();
        try {
        	//*ruta (Accion) a ejecutar*/
            String infoRuta = request.getPathInfo();
            //*si la ruta es null*/
            if(infoRuta==null){
            	//*lanzamos una exception*/
            	throw new ServletException("RUTA DESCONOCIDA");
            }
            //*declaramos una accion, y la cargamos de mapa de acciones*/
            Action accion= (Action) mapaAcciones.get(infoRuta);
            //*si la accion no se encuentra en el mapa*/
            if(accion==null){
            	//* la ruta viene en el formato "Accion/Bean" */
            	//* la ruta viene en el formato "Palabra1/Palabra2" */
            	//*dividimos la ruta en 2 justo por el caracter '/' */
            	StringTokenizer st = new StringTokenizer(infoRuta,"/");
            	//*si el numero de partes es diferente de 2 hubo algun error */
                if(st.countTokens()!=2){
                	//*lanzamos una excepcion*/
                	throw new ServletException("estado interno invalido- no hay informacion de ruta["+infoRuta+"]");
                }
                //*Parte uno de la Accion */
                String evento = st.nextToken();
                //*Parte dos de la Accion */
                String bean = st.nextToken();
                //*nombre de la clase de la Accion*/
                String servlet="org."+ evento + bean;
                try {
                	//*Cargamos la clase*/
                    Class claseAccion = Class.forName(servlet);
                    //*la instanciamos */
                    accion = (Action) claseAccion.newInstance();
                    //*la guardamos en el mapa de acciones*/
                    mapaAcciones.put(infoRuta,accion);
                    //*guardamos el mapa de acciones en la session*/
                    session.setAttribute("mapaAcciones",mapaAcciones);
                }catch (ClassNotFoundException ex){
                	//*no se encontro la clase*/
                    throw new ServletException("No se pudo cargar la clase "+servlet+": "+ex.getMessage());
                }catch (InstantiationException ex){
                	//*no se pudo instansiar la clase*/
                    throw new ServletException("No se pudo instanciar un objeto de la clase "+servlet+": "+ex.getMessage());
                }catch (IllegalAccessException ex){
                	//*acceso no autorizado*/
                    throw new ServletException(servlet+": "+ex.getMessage());
                }
            }
            //*sacamos el model de la session*/
            Model model=(Model)session.getAttribute("model");
            //*si el model == null*/
			if(model==null){
				//*lanza una excepcion*/
				throw new ServletException("MODELO DE CONEXION A BD NULO, IMPOSIBLE CONTINUAR CON LA OPERACION");
			}
			//*seteamos los parametros de la accion*/
            accion.setRequest(request);
            accion.setModel(model);
            accion.setResponse(response);
            accion.setApplication(context);
            //*y la ejecutamos*/
            accion.run();

            //*atrapamos cualquier excepcion */
        } catch (Exception e) {
        	//*Pasamos el mensaje a una ServletException*/
            throw new ServletException("Error... \n"+e);
        }
	}

    public String getServletInfo() {
        return "CONTROLADOR DE ACCIONES Y REDIRECCIONAMIENTO (SIN MI NO HAY COMUNICACION ENTRE LO QUE VES Y LO QUE NO VES);";
    }
}

LAS JSP

index.jsp

<%@ include file="WEB-INF/InitModel.jsp"%>
<html>
	<head>

		<title>MVC</title>
		<style type="text/css"><%@ include file="estilo.css"%></style>
		<!--En este ejercicio repasaremos por todas las funciones vistas anteriormente -->
	</head>

	<body>
		<table width="100%" border="0" cellspacing="0" cellpadding="5">
			<tr>
    			<td colspan="2" valign="top" align="right">
				  <div id="titulo" align="right">
				  	<img src="<%=application.getAttribute("ABSOLUTEURL")%>logo.png" width="282" height="95">
				</div>
			    </td>
		  	</tr>
  			<tr>
    			<td valign="top">
				<ul>
				<li><a href="<%=application.getAttribute("ABSOLUTEURL")%>index.jsp">MENU</a></li>
    			  <li><a href="<%=application.getAttribute("ABSOLUTEURL")%>index.jsp?pagina=gd">Departamentos</a></li>
  			      <li><a href="<%=application.getAttribute("ABSOLUTEURL")%>index.jsp?pagina=ge">Empleados</a></li>
    			</ul>
				</td>
    			<td>
					<%String pagina=request.getParameter("pagina");%>
					<%if(pagina==null){
						pagina="";
					}%>
					<%if(pagina.matches("gd")){%>
						<%@ include file="gestion_departamento.jsp"%>
					<%}%>
					<%if(pagina.matches("ge")){%>
						<%@ include file="gestion_empleado.jsp"%>
					<%}%>
				</td>
		  </tr>
		</table>
	</body>
</html>

gestion_departamento.jsp

<table width="100%" border="0" cellspacing="0" cellpadding="5">
  	<tr>
    	<td valign="top">
			<jsp:include page="registro_departamento.jsp"/>
		</td>
    	<td>
			<div style="height:650px; overflow:scroll;">
				<jsp:include page="listar_departamento.jsp"/>
			</div>
		</td>
  	</tr>
</table>

registro_departamento.jsp

<form action="<%=application.getAttribute("CONTROLLER").toString()%>/Agregar/Departamento" method="post" enctype="application/x-www-form-urlencoded">
	<table id="registro" width="110" border="0" cellspacing="0" cellpadding="5">
		<tr align="center">
			<td colspan="2" align="center">DATOS DEPARTAMENTO</td>
		</tr>
		<tr>
			<td>NOMBRE</td>
			<td><input name="nombre" type="text"> </td>
		</tr>
		<tr>
			<td>DESCRIPCION</td>
			<td><textarea name="descripcion" cols="20" rows="5"></textarea></td>
		</tr>
  		<tr align="center">
    		<td colspan="2" align="center"><input type="submit" value="Guargar"></td>
  		</tr>
	</table>
</form>

listar_departamento.jsp

<%@ page import="java.util.List"%>
<%@ page import="org.Departamento"%>
<%@ page import="org.Model"%>
	<%
		Model model=(Model)session.getAttribute("model");
		List lista_departamento=model.listaDepartamento();
	 %>
		<table border="1" cellspacing="0" cellpadding="5">
			<tr><td colspan="3" align="center" >LISTA DE DEPARTAMENTOS </td></tr>
			<tr><td calign="center" >ID</td><td calign="center" >NOMBRE</td><td calign="center" >DESCRIPCION</td></tr>
  				<%for(int i=0;i<lista_departamento.size();i++){
					Departamento departamento=(Departamento)lista_departamento.get(i);
					out.print("<tr>");
					out.print("<td>"+departamento.getId()+"</td>");
					out.print("<td>"+departamento.getNombre()+"</td>");
					out.print("<td>"+departamento.getDescripcion()+"</td>");
					out.print("</tr>");
				}%>
		</table>
	</body>
</html>

gestion_empleado.jsp

<table width="100%" border="0" cellspacing="0" cellpadding="5">
  	<tr>
    	<td valign="top">
			<jsp:include page="registro_empleado.jsp"/>
		</td>
    	<td>
			<div style="height:650px; overflow:scroll;">
				<jsp:include page="listar_empleado.jsp"/>
			</div>
		</td>
  	</tr>
</table>

registro_empleado.jsp

<%@ page import="java.util.List"%>
<%@ page import="org.Departamento"%>
<%@ page import="org.Model"%>
<form action="<%=application.getAttribute("CONTROLLER").toString()%>/Agregar/Empleado" method="post" enctype="multipart/mixed">
	<table id="registro" width="110" border="0" cellspacing="0" cellpadding="5">
		<tr align="center">
			<td colspan="2" align="center">DATOS EMPLEADO</td>
		</tr>
		<tr>
			<td>Nombre</td>
			<td><input name="nombre" type="text"> </td>
		</tr>
		<tr>
			<td>Apellido</td>
			<td><input name="apellido" type="text"></td>
		</tr>
		<tr>
			<td>Identificacion</td>
			<td><input name="identificacion" type="text"></td>
		</tr>
		<tr>
			<td>Fecha de nacimiento</td>
    		<td><input name="fdn" type="text" value="dd/MM/yyyy"></td>
  		</tr>
  		<tr>
    		<td valign="top">Departamento</td>
    		<td>
				<select name="departamento">
				<%
				Model model=(Model)session.getAttribute("model");
				List lista_departamento=model.listaDepartamento();
				for(int i=0;i<lista_departamento.size();i++){
					Departamento departamento=(Departamento)lista_departamento.get(i);
					out.print("<option value='"+departamento.getId()+"'>"+departamento.getNombre()+"</option>");
				}%>
				</select>
	    	</td>
  		</tr>
  		<tr>
    		<td>Sueldo</td>
    		<td><input name="sueldo" type="text"></td>
  		</tr>
  		<tr>
    		<td>Auxilio de transporte</td>
    		<td><input name="transporte" type="text"></td>
  		</tr>
  		<tr>
    		<td>Foto</td>
    		<td><input name="foto" type="file"></td>
  		</tr>
  		<tr align="center">
    		<td colspan="2" align="center"><input type="submit" value="Guargar"></td>
  		</tr>
	</table>
</form>

listar_empleado.jsp

<%@ page import="java.util.List"%>

<%@ page import="org.Empleado"%>
<%@ page import="org.Model"%>
	<%
		Model model=(Model)session.getAttribute("model");
		List lista_empleado=model.listaEmpleado();
		Double total_sueldo=0.0;
		Double total_auxili=0.0;
	 %>
		<table border="1" cellspacing="0" cellpadding="5">
			<tr><td colspan="2" align="center" >DATOS NOMINA </td></tr>
  				<%for(int i=0;i<lista_empleado.size();i++){
					Empleado empleado=(Empleado)lista_empleado.get(i);

					total_sueldo=total_sueldo+empleado.getSueldo();
					total_auxili=total_auxili+empleado.getTransporte();
					session.setAttribute("empleado",empleado);
			%>
			<tr>
				<jsp:include page="ver_empleado.jsp"/>
			</tr>
		<%}%>
			<tr><td>TOTAL SUELDO</td> <td><%=total_sueldo%></td> </tr>
			<tr><td>TOTAL AUXILIO</td> <td><%=total_auxili%></td> </tr>
			<tr><td>TOTAL NOMINA</td> <td><%=total_sueldo+total_auxili%></td> </tr>
		</table>
	</body>
</html>

ver_empleado.jsp

<%@ page import="org.Empleado"%>
<%@ page import="org.Departamento"%>
<%@ page import="org.Model"%>
<%@ page import="java.util.Date"%>

<%
Empleado empleado=(Empleado)session.getAttribute("empleado");
Model model= (Model)session.getAttribute("model");
Departamento departamento=model.buscarDepartamento(Integer.parseInt(empleado.getDepartamento()));
Date hoy=new Date();
int edad= (hoy.getYear()*365+hoy.getMonth()*30+hoy.getDate());
edad=edad-(empleado.getFdn().getYear()*365+empleado.getFdn().getMonth()*30+empleado.getFdn().getDate());
edad=edad/365;

%>
<td>
	<img  width="150" height="200" src="<%=application.getAttribute("ABSOLUTEURL")%>subidos/<%=empleado.getFoto()%>"/> <br/>
	<%=edad%>&nbsp;A&ntilde;os
</td>
<td>
	<table width="100%" border="0" cellspacing="0" cellpadding="1">
		<tr><td>ID</td><td><%=empleado.getId()%></td></tr>
		<tr>
  			<td>NOMBRE</td><td><%=empleado.getNombre()+" "+empleado.getApellido()%></td>
		</tr>
		<tr>
  			<td>IDENTIFICACION</td><td><%=empleado.getIdentificacion()%></td>
		</tr>
		<tr>
   			<td>DEPARTAMENTO</td><td><%=departamento.getNombre()%></td>
		</tr>
		<tr>
    		<td>SUELDO</td><td><%=empleado.getSueldo()%></td>
  		</tr>
		<tr>
    		<td>AUXILIO</td><td><%=empleado.getTransporte()%></td>
  		</tr>
		<tr>
    		<td>TOTAL DEVENGADO</td><td><%=empleado.getTransporte()+empleado.getSueldo()%></td>
  		</tr>
	</table>
</td>

CONFIGURACIÓN

InitModel.jsp

<jsp:useBean id="model" scope="session" class="org.WebModel">
	<%model.init(application);%>
</jsp:useBean>

<%
String BASEURL=request.getContextPath();
String CONTROLLER=BASEURL+"/servlet";
String ABSOLUTEURL=application.getInitParameter("ABSOLUTEURL");
String IMGSFOLDER=application.getInitParameter("IMGSFOLDER");

application.setAttribute("CONTROLLER",CONTROLLER);
application.setAttribute("BASEURL",BASEURL);
application.setAttribute("ABSOLUTEURL",ABSOLUTEURL);
application.setAttribute("IMGSFOLDER",IMGSFOLDER);
%>

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

	<display-name>EJERCICIO 13 MODELO-VISTA-CONTROLADOR</display-name>
  	<description> XML de configuracion para aplicar el patron MVC en jsp</description>

	<context-param>
        <param-name>jdbcDriver</param-name>
        <param-value>com.mysql.jdbc.Driver</param-value>
    </context-param>

    <context-param>
        <param-name>databaseURL</param-name>
        <param-value>jdbc:mysql://localhost:3306/ejercicios</param-value>
    </context-param>

	 <context-param>
        <param-name>databaseUser</param-name>
        <param-value>root</param-value>
    </context-param>

	 <context-param>
        <param-name>databaseKey</param-name>
        <param-value></param-value>
    </context-param>

	<context-param>
        <param-name>ABSOLUTEURL</param-name>
        <param-value>http://localhost:8181/ejercicio13/</param-value>
    </context-param>

    <context-param>
        <param-name>IMGSFOLDER</param-name>
        <param-value>c:/Archivos de programa/Apache Software Foundation/Apache Tomcat 6.0.24(stand)/webapps/ejercicio13/subidos/</param-value>
    </context-param>

    <servlet>
        <servlet-name>controlador</servlet-name>
        <servlet-class>org.Controller</servlet-class>
	</servlet>

    <servlet-mapping>
        <servlet-name>controlador</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>

</web-app>

estilo.css

*{color:#CC0000;}
body{background-color: #F0F0F0;}
table#registro{font-weight:bold;}
div#titulo{
	background-color: #B00000;
	color: #B00000;
	background:#B00000;

}
recursos usados

commons.fileupload
commons.io
conector sql


13 Responses to “MVC en JSP”


  1. 1 Sebastian
    octubre 28, 2010 a las 4:53 pm

    Muy completo el articulo, muchas gracias por compartirlo, Ojala te animes a realizar algo utilizando MVC con algun Framework.

    Saludos, gracias

    • octubre 29, 2010 a las 9:05 pm

      Sebastian estos comentarios son los que motivan ha hacer cada día mas y mejores contenidos, he pasado algún tiempo fuera del blog por cuestiones de trabajo y no tenia pc personal pero estaré sacandole el tiempo al blog… gracias

  2. 3 Felipe
    septiembre 12, 2011 a las 8:07 pm

    Hombre excelente trabajo, pero quede con una duda, de donde obtuvo el “mapaAcciones”? no vi a que horas se creo, o es un elemento propio de la Clase?

    • septiembre 13, 2011 a las 8:32 am

      En la clase Controller.java

      Map mapaAcciones = (Map) session.getAttribute(“mapaAcciones”);
      if(mapaAcciones==null){
      mapaAcciones=new HashMap();
      }

      lo declaro y lo inicializo con los datos que esten en la session, si no esta en la session el valor será null, y como es null lo inicializo con un mapa vacio.

      y se comienza a llenar con las acciones que se vallan cargando.

  3. diciembre 29, 2011 a las 11:32 pm

    Yo tengo una aplicacion en JSP con base datos en PostgreSQL la cual esta hecha con el IDE NetBeans … y queria saber que parte del Proyecto es lo que debo publicar o mejor dicho que carpetas exactamnet debo subir al hosting Tomcat. Espero me puedas dar una respuesta a esta duda.

    Por ahi se me paso a la mente que lo que debo usar es lo que contiene la carpeta “build” que se genera al dar “BUIL PROJECT”.
    De ser asi … solo eso debo hacer? o hay algo más que debo saber.

    Quisiera tener claro ese tema para poder solicitar los servicios de un hosting.

    De antemano muchas gracias.

    • diciembre 30, 2011 a las 10:04 am

      lo que debes subir es un archivo war que te genera el mismo netbeans

  4. 7 juernes
    julio 4, 2012 a las 11:09 pm

    man que buen post… me gustaria saber si puedo hacer un menu con css… en un lado e invocarlo en las demas paginas, para que cuando modifique un link se modifiquen en todas las demas….

    gracias…

  5. 8 Ricardo
    octubre 22, 2012 a las 11:29 pm

    Ojalá pudieras resubirlo si es posible!

    Atte. Ricardo.

    • noviembre 21, 2012 a las 3:46 pm

      el enlace de descarga ha sido reactivado

  6. abril 12, 2013 a las 2:24 am

    Reblogged this on djtorresh.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


I+Ds

Dudas consultas
Facebook
Twiter
Google +

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevas publicaciones por correo.

Únete a otros 348 seguidores

Ingenio DS en Facebook

Redes Sociales y Archivos

Entradas

mayo 2010
L M X J V S D
« Abr   Jun »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

IngenioDS en twiter


A %d blogueros les gusta esto: