Saltar la navegación

Aplicando MVC con JAVA

Ejercicio: Implementación MVC

El objetivo de este ejercicio es llevar a la práctica los conocimientos hasta aquí estudiados. Implementaremos una aplicación que consulta los datos de una persona. Seguiremos el patrón MVC, como lo muestra la figura, ubicando cada uno de los conceptos aprendidos:

  • Servlets como controladores,
  • JSP como vistas y
  • JavaBeans como el modelo.

Para facilidad de entendimiento, en este ejercicio se provee el código de cada punto mencionado.


Instrucciones

  1. Crea un Dynamic Web Project con el nombre: mvc_1_persona
  2. Crea un paquete com.modelo
    1. Crea el Java Bean: Persona, dentro del paquete
  3. Crea un paquete com.controlador
    1. Crea el Servlet: PersonaController, dentro del paquete
  4. En el directorio WebContent, crea un directorio denominado JSPs que contenga:
    1. pagina persona.jsp

Arquitectura MVC ejemplo Persona

Modelo: javabeans

Modelo: Persona (JavaBean)

package ec.edu.epn.modelo;

import java.io.Serializable;

public class Persona implements Serializable{

	private static final long serialVersionUID = 1L;
	private int id;
	private String nombre;
	private String[] idiomas = {"es", "en"};
	
	//Constructor sin parámetros y obligatorio
	public Persona() {}
	public Persona(int id, String nombre) {
		this.setId(id);
		this.setNombre(nombre);
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String[] getIdiomas() {
		return idiomas;
	}
	public void setIdiomas(String[] idiomas) {
		this.idiomas = idiomas;
	}
	

}

Controlador: PersonaController (servlet)

package ec.edu.epn.controlador;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ec.edu.epn.modelo.Persona;

@WebServlet("/PersonaController")
public class PersonaController extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		Persona persona = new Persona();
		String url;
		try {
			persona.setId(Integer.valueOf(req.getParameter("id")));
			persona.setNombre(req.getParameter("nombre"));
			req.setAttribute("persona", persona);
			url = "/JSPs/persona.jsp";
		} catch (Exception e) {
			url = "/JSPs/error.jsp";
		}
		//reenvia datos a persona.jsp
		getServletContext().getRequestDispatcher(url).forward(req, resp);

	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

	}

	private static final long serialVersionUID = 1L;

}



Vista: persona.jsp (JSP + JSTL)

persona.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
	<h1>Uso de JSTLs</h1>
	<h2>Acceso a Objetos</h2>
	<c:set var="p1" value="${requestScope['persona']}" />
	<c:set var="p2" scope="request" value="${persona}" />
	<c:set var="p3" scope="session" value="${persona}" />

	<p>Id: ${p1.id}</p>
	<p>Nombre: ${p1.nombre}</p>

	<h2>Sentencia if</h2>

	<c:if test="${p1.id == 666}">
		<p>Dentro del if: es un demonio</p>
	</c:if>

	<h2>Sentencia Switch</h2>

	<c:choose>
		<c:when test="${p1.id==1}">Es 1</c:when>
		<c:when test="${p1.id==2}">Es 2</c:when>
		<c:otherwise>
			<p>Es mayor que 2</p>
		</c:otherwise>
	</c:choose>

	<h2>Colecciones</h2>
	<p>Idiomas:</p>
	<ul>
		<c:forEach var="idioma" items="${p1.idiomas}">
			<li>${idioma}</li>
		</c:forEach>
	</ul>
</body>
</html>

error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>MVC - java</title>
</head>
<body>
	<h1>Respuesta del controlador</h1>
	<p>Error. Se debe añadir a la URL: ?id=666&nombre=uno</p>
</body>
</html>

Creado con eXeLearning (Ventana nueva)