En el github:
https://github.com/juanpablofuentes/JavaNetmind/tree/main/mantenimientoWeb
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Mantenimiento web</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <link rel="preconnect" href="https://fonts.gstatic.com"> <link href="https://fonts.googleapis.com/css2?family=Patrick+Hand&display=swap" rel="stylesheet"> <link href="css/estilo.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="jumbotron"> <h1>Mantenimiento web</h1> <p>Página de ejemplo de todo el contenido del curso </div> <a href="categorias">Mantenimiento de categorías</a> </div> </body> </html>
categoria_nueva.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Mantenimiento web</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <link rel="preconnect" href="https://fonts.gstatic.com"> <link href="https://fonts.googleapis.com/css2?family=Patrick+Hand&display=swap" rel="stylesheet"> <link href="css/estilo.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="jumbotron"> <h1>Nueva categoría</h1> <p>Introduzca los datos de la categoría</p> </div> <form action="./categorias?accion=insertar" method="post"> <div class="form-group"> <label for="nombre">Nombre:</label> <input type="text" class="form-control" placeholder="Introduzca el nombre" name="nombre"> </div> <button type="submit" class="btn btn-primary">Enviar</button> </form> </div> </body> </html>
categoria_editar.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Mantenimiento web</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <link rel="preconnect" href="https://fonts.gstatic.com"> <link href="https://fonts.googleapis.com/css2?family=Patrick+Hand&display=swap" rel="stylesheet"> <link href="css/estilo.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="jumbotron"> <h1>Editar categoría</h1> <p>Introduzca los datos de la categoría</p> </div> <form action="./categorias?accion=actualizar" method="post"> <div class="form-group"> <label for="nombre">Id:</label> <input type="text" class="form-control" readonly placeholder="Introduzca el nombre" name="id" value="${categoria.category_id }"> </div> <div class="form-group"> <label for="nombre">Nombre:</label> <input type="text" class="form-control" placeholder="Introduzca el nombre" name="nombre" value="${categoria.name }"> </div> <button type="submit" class="btn btn-primary">Enviar</button> </form> </div> </body> </html>
catgorias.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Mantenimiento web</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <link rel="preconnect" href="https://fonts.gstatic.com"> <link href="https://fonts.googleapis.com/css2?family=Patrick+Hand&display=swap" rel="stylesheet"> <link href="css/estilo.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="jumbotron"> <h1>Mantenimiento de Categorías</h1> <p>Aquí podrá usted hacer el mantenimiento de todas las categorías</p> </div> <a href="categorias?accion=nueva">Añadir una categoría</a> <table class="table table-striped"> <thead> <tr> <th>Id</th> <th>Nombre</th> <th>Fecha</th> <th>Acciones</th> </tr> </thead> <tbody> <c:forEach var="categoria" items="${categorias}"> <tr> <td><c:out value="${categoria.category_id}"/></td> <td><c:out value="${categoria.name}"/></td> <td><c:out value="${categoria.last_update}"/></td> <td><a href="categorias?accion=borrar&id=<c:out value="${categoria.category_id}"/>">Eliminar</a> | <a href="categorias?accion=editar&id=<c:out value="${categoria.category_id}"/>">Editar</a></td> </tr> </c:forEach> </tbody> </table> </div> </body> </html>
package com.mantenimiento.controller; import java.io.IOException; import java.util.List; import javax.servlet.RequestDispatcher; 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 com.mantenimiento.dao.Categoria; import com.mantenimiento.dao.CategoriaDAO; /** * Servlet implementation class Categorias */ @WebServlet("/categorias") public class Categorias extends HttpServlet { private static final long serialVersionUID = 1L; CategoriaDAO modelo; /** * @see HttpServlet#HttpServlet() */ public Categorias() { super(); modelo = new CategoriaDAO(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Tendré que tener una serie de urls para el mantenimiento CRUD // Cuando me pongan esa url tendré que hacer lo que haga falta // EJemplo: si yo quiero añadir una categoría tendré dos 'pantallas' // 1) Un formulario que nos pida los datos de la categoría: accion=nueva // 2) Una acción que recupere esos datos y dé de alta la categoría // accion=insertar String accion = request.getParameter("accion"); if (accion == null) { accion = ""; } Integer id; switch (accion) { case "nueva": response.sendRedirect("categoria_nueva.jsp"); break; case "insertar": System.out.println("Insertar"); String nombre = request.getParameter("nombre"); System.out.println(nombre); modelo.addCategoria(nombre); response.sendRedirect("categorias"); break; case "editar": id = Integer.parseInt(request.getParameter("id")); if (id != null) { Categoria cat = modelo.getCategoria(id); request.setAttribute("categoria", cat); RequestDispatcher dispatcher = request.getRequestDispatcher("categoria_editar.jsp"); dispatcher.forward(request, response); } break; case "actualizar": System.out.println("Actualizar"); String nombre2 = request.getParameter("nombre"); id = Integer.parseInt(request.getParameter("id")); Categoria cat = new Categoria(id, nombre2); System.out.println(nombre2); modelo.updateCategoria(cat); response.sendRedirect("categorias"); break; case "borrar": System.out.println("Eliminar"); id = Integer.parseInt(request.getParameter("id")); if (id != null) { modelo.deleteCategoria(id); } response.sendRedirect("categorias"); break; default: List<Categoria> categorias = modelo.getCategorias(); request.setAttribute("categorias", categorias); RequestDispatcher dispatcher = request.getRequestDispatcher("categorias.jsp"); dispatcher.forward(request, response); break; } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
POJO categorías:
package com.mantenimiento.dao; import java.sql.Date; //Esto es un POJO que representa a los registros de la tabla category public class Categoria { // Los campos los llamamos igual que en la base de datos private int category_id; private String name; private Date last_update; // Creamos un constructor para crear fácilmente objetos public Categoria(int category_id, String name) { super(); this.category_id = category_id; this.name = name; } public Categoria(int category_id, String name, Date last_update) { this(category_id,name); this.last_update= last_update; } // Getters y setters que son imprescindibles /** * @return the category_id */ public int getCategory_id() { return category_id; } /** * @param category_id the category_id to set */ public void setCategory_id(int category_id) { this.category_id = category_id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the last_update */ public Date getLast_update() { return last_update; } /** * @param last_update the last_update to set */ public void setLast_update(Date last_update) { this.last_update = last_update; } @Override public String toString() { return "Categoria [category_id=" + category_id + ", name=" + name + ", last_update=" + last_update + "]"; } }
Acceso a datos (DAO):
package com.mantenimiento.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class CategoriaDAO { // Tengo que crear una conexión a la base de datos private Connection con; private int max_records = 1000; public CategoriaDAO() { try { // Me conecto a la base de datos. Si no da error todo OK Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "root", ""); } catch (Exception ex) { System.out.println(ex); } } // Tengo que implementar todas las opciones del CRUD // Obtener una categoría public Categoria getCategoria(int id) { try { String sql = "select * from category where category_id=?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); if (rs.next()) { Categoria categoria=new Categoria(rs.getInt("category_id"),rs.getString("name"),rs.getDate("last_update")); return categoria; }else { return null; } } catch (Exception ex) { System.out.println(ex); return null; } } // Obtener todas las categorías public List<Categoria> getCategorias() { try { // Consulta sql para obtener todas las categorías String sql = "select * from category limit ?"; PreparedStatement stmt = con.prepareStatement(sql); // Con la salvedad de que ponemos un límite de 1000 registros por si acaso stmt.setInt(1, max_records); // Obtenemos el puntero a los resultados ResultSet rs = stmt.executeQuery(); // Yo necesito almacenar todos los registros que voy obteniendo // ¿Dónde? En un ArrayList del tipo Categoria List<Categoria> categorias=new ArrayList<Categoria>(); // MIentras haya registros en la base de datos while (rs.next()) { // Creame un objeto categoría con los datos de la base de datos Categoria categoria=new Categoria(rs.getInt("category_id"),rs.getString("name"),rs.getDate("last_update")); // Lo añadimos al arraylist categorias.add(categoria); } // Devolvemos la lista con todas las categorías que hemos creado // A partir de los registros de la base de datos return categorias; } catch (Exception ex) { System.out.println(ex); return null; } } // Crear una categoría public int addCategoria(Categoria categoria) { return addCategoria(categoria.getName()); } // Crear una categoría public int addCategoria(String name) { try { String sql = "insert into category (name) values (?)"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setString(1, name); int res = stmt.executeUpdate(); return res; } catch (Exception ex) { System.out.println(ex); return -1; } } // Eliminar categoría public int deleteCategoria(Categoria categoria) { return deleteCategoria(categoria.getCategory_id()); } // Eliminar categoría public int deleteCategoria(int id) { try { String sql = "delete from category where category_id=?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setInt(1, id); int res = stmt.executeUpdate(); return res; } catch (Exception ex) { System.out.println(ex); return -1; } } // Modificar categoría public int updateCategoria(Categoria categoria) { try { String sql = "update category set name=? where category_id=?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setString(1, categoria.getName()); stmt.setInt(2, categoria.getCategory_id()); int res = stmt.executeUpdate(); return res; } catch (Exception ex) { System.out.println(ex); return -1; } } }
Por si lo queremos probar:
package com.mantenimiento.dao; import java.util.List; public class TestDao { public static void main(String[] args) { Categoria drama=new Categoria(1,"Terrorífica"); System.out.println(drama); System.out.println(drama.getName()); CategoriaDAO modelo=new CategoriaDAO(); System.out.println(modelo.getCategorias()); List<Categoria> categorias=modelo.getCategorias(); for(Categoria categoria:categorias) { System.out.println(categoria.getName()); } } }
Vamos a crear un servlet que nos muestre datos de una factura (lo podemos llamar Factura).
Se pasan a la página los siguientes datos:
nombre: Nombre del cliente: ‘Supermercados Pérez’
fecha: Fecha de hoy
productos: Una lista con los siguientes productos: ‘pera’,’higo’,’patata’
precio: Una lista con los siguientes precios: 10,30,5
Esto lo envía todo a una página factura.jsp que nos mostrará una factura lo más bonita posible en la que se muestren los datos. En el ejemplo sería:
Factura a Supermercados Pérez
Fecha: 22/4/2021
Producto Precio
pera 10
higo 30
patata 5
total: 45
iva: 9,45
Ejemplo con POJO
package ejercicioJstl; import java.io.IOException; import java.time.LocalDate; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Factura */ @WebServlet("/factura") public class Factura extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Factura() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Pojo_factura Perez = new Pojo_factura("Supermercados Perez",LocalDate.now()); Perez.agregar("pera",10); Perez.agregar("higo",30); Perez.agregar("patata",5); request.setAttribute("perez", Perez); RequestDispatcher dispatcher = request.getRequestDispatcher("factura.jsp"); dispatcher.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Insert title here</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> </head> <body> <c:forEach var="producto" items="${perez.productos}"> <c:set value="${res=res+producto.value}" var="sumaProductos" /> </c:forEach> <c:set value="${sumaProductos*.21 }" var="iva" /> <div class="container"> <div class="row"> <div class="col-md-6"> <img alt="" src=""> <h2> <c:out value="${perez.nombre}" /> </h2> </div> <div class="col-md-6 text-right"> <h2>FACTURA</h2> <h3>Factura #001</h3> <p> <c:out value="${perez.fecha}" /> </p> </div> </div> <div class="row justify-content-center"> <div class="col-md-10 "> <div class="border-bottom border-dark"> <h5>Listado productos</h5> </div> <div class="mb-2"> <c:forEach var="producto" items="${perez.productos}"> <c:out value="${producto.key}" /> <c:out value="${producto.value}" /> <br> </c:forEach> </div> <div> <p> Total: <c:out value="${sumaProductos}"></c:out> € </p> <p> IVA: <c:out value="${iva}"></c:out> € </p> </div> </div> </div> </div> </body> </html>
package ejercicioJstl; import java.time.LocalDate; import java.util.*; public class Pojo_factura { private String nombre; private LocalDate fecha; private Map<String, Integer> productos; public Pojo_factura(String nombre, LocalDate fecha) { super(); this.nombre = nombre; this.fecha = fecha; productos = new HashMap<String, Integer>(); } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public LocalDate getFecha() { return fecha; } public void setFecha(LocalDate fecha) { this.fecha = fecha; } public Map<String, Integer> getProductos() { return productos; } public void setProductos(Map<String, Integer> productos) { this.productos = productos; } public void agregar(String nombre, int precio) { productos.put(nombre,precio); } }
package com.trifulcas.dao; // POJO: Plain Old Java Object public class Autor { private String nombre; private String apellido; public Autor(String nombre, String apellido) { super(); this.nombre = nombre; this.apellido = apellido; } /** * @return the nombre */ public String getNombre() { return nombre; } /** * @param nombre the nombre to set */ public void setNombre(String nombre) { this.nombre = nombre; } /** * @return the apellido */ public String getApellido() { return apellido; } /** * @param apellido the apellido to set */ public void setApellido(String apellido) { this.apellido = apellido; } }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("importe", 500); request.setAttribute("cantidad", 7); request.setAttribute("cantidad", 17); request.setAttribute("producto", "Madalenas (muy buenas)"); // Pasamos una lista List<String> alumnos=new ArrayList<String>(); alumnos.add("Eva"); alumnos.add("Ana"); alumnos.add("Juan"); request.setAttribute("alumnos", alumnos); //Pasamos un array int[] notas= {1,4,2,7}; request.setAttribute("notas", notas); //Pasamos un objeto Autor pepe=new Autor("Pepe","Pi"); request.setAttribute("autor", pepe); RequestDispatcher dispatcher = request.getRequestDispatcher("jstl.jsp"); dispatcher.forward(request, response); }
<c:out value="hola que tal" /> <!-- importe es un atributo que viene del servlet --> <c:out value="${importe}" /> <c:out value="${cantidad}" /> <c:out value="${producto}" /> <!-- String nomobre="Eva pi" --> <c:set value="Eva pi" var="nombre" /> <!-- nombre="Juan" --> <c:set value="Juan" var="nombre" /> <c:out value="${nombre}" /> <!-- int iva=importe*.21 --> <c:set value="${importe*.21}" var="iva" /> <c:out value="${iva}" /> <c:if test="${iva > 100}"> <p>¡Que caro!</p> </c:if> <c:choose> <c:when test="${iva < 100}"> <c:out value="${iva} menor de 100" /> </c:when> <c:when test="${iva < 200}"> <c:out value="${iva} menor de 200" /> </c:when> <c:otherwise> <c:out value="${iva} mayor de 200" /> </c:otherwise> </c:choose> <c:forEach var="i" items="1,4,5,6,7,8,9"> Item <c:out value="Nº ${i}" /> <p> </c:forEach> <c:forEach var="alumno" items="${alumnos}"> <p> Alumno <c:out value="${alumno}" /> </p> </c:forEach> <c:forEach var="i" items="${notas }"> <p> Notas <c:out value="${i}" /> </p> </c:forEach> <c:out value="${autor}" /> <!-- Al acceder a la propiedad nombre la librería busca si ese objeto tiene un método getNombre si lo tiene bien y si no error --> <c:out value="${autor.nombre}" /> <c:out value="${autor.apellido}" />
Descargar la librería y situarla en webapp/WEB_INF/lib:
https://github.com/juanpablofuentes/JavaNetmind/tree/main/webHolaMundo/src/main/webapp/WEB-INF/lib
https://github.com/juanpablofuentes/JavaNetmind/blob/main/jakarta.servlet.jsp.jstl-2.0.0.jar
https://help.hcltechsw.com/commerce/9.1.0/admin/refs/rsdjspbpjstl_dup.html
http://www.jtech.ua.es/j2ee/restringido/cw/sesion08-apuntes.html
https://www.javatpoint.com/jstl
Para utilizar esta librería en mis jsp añado la siguiente línea a la cabecera:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
o esta:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Ejemplos:
Esto va en el servlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("importe", 500); RequestDispatcher dispatcher = request.getRequestDispatcher("jstl.jsp"); dispatcher.forward(request, response); }
<c:out value="hola que tal" /> <!-- importe es un atributo que viene del servlet --> <c:out value="${importe}" /> <c:set value="Eva pi" var="nombre" /> <c:out value="${nombre}" /> <!-- int iva=importe*.21 --> <c:set value="${importe*.21}" var="iva" /> <c:out value="${iva}" /> <c:if test="${iva > 100}"> <p>¡Que caro!</p> </c:if> <c:choose> <c:when test="${iva < 100}"> <c:out value="${iva} menor de 100" /> </c:when> <c:when test="${iva < 200}"> <c:out value="${iva} menor de 200" /> </c:when> <c:otherwise> <c:out value="${iva} mayor de 200" /> </c:otherwise> </c:choose> <c:forEach var="i" items="1,4,5,6,7,8,9"> Item <c:out value="Nº ${i}" /> <p> </c:forEach>
Vamos a hacer un proyecto nuevo. En el construiremos un Servlet cuya url será la raíz.
En el doGet vamos a comprobar si tenemos como parámetros un nombre y un password. Si no los tenemos, cargamos la página login.jsp
Si los tenemos crearemos una función validar a la que le pasamos el nombre y la contraseña y nos devuelve true si es un usuario válido y false en caso contrario.
En esa función tenemos una lista de usuarios que es la siguiente:
‘eva’,’1234′
‘ana’,’5678′
‘juan’,’0123′
Os dejo a vuestro libre albedrío (si es que tal cosa existe) la manera de almacenar esta información.
Si el usuario y la pass que nos han pasado está en la lsita devolvemos true y en caso contrario devolvemos false
Si en el doGet nos han pasado un nombre y una contraseña llamamos a la función validar. Si nos devuelve false volvemos a cargar la página login.jsp. Si nos devuelve true cargamos una página ‘panel.jsp’ que, de momento, tenga unas palabras de bienvenida y nada más.
<form method="post"> <div class="form-group"> <label for="nombre">Nombre:</label> <input type="text" class="form-control" placeholder="Introduce nombre" name="nombre" id="nombre"> </div> <div class="form-group"> <label for="pwd">Password:</label> <input type="password" class="form-control" placeholder="Introduce contraseña" name="password"> </div> <button type="submit" class="btn btn-primary">Enviar</button> </form>
package com.trifulcas.controlador; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Login */ @WebServlet("/") public class Login extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Login() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("GET"); String nombre = request.getParameter("nombre"); String password = request.getParameter("password"); if (nombre == null || password == null || !validar(nombre, password)) { RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp"); dispatcher.forward(request, response); } else { // Ponemos la variable de sesión nombre // para ello recuperamos la sesión con el método getSession de request HttpSession sesion=request.getSession(); sesion.setAttribute("nombre", nombre); RequestDispatcher dispatcher = request.getRequestDispatcher("panel.jsp"); dispatcher.forward(request, response); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("POST"); doGet(request, response); } boolean validar(String nombre, String password) { Map<String, String> usuarios = new HashMap<String, String>(); usuarios.put("eva", "1234"); usuarios.put("ana", "5678"); usuarios.put("juan", "0123"); return usuarios.containsKey(nombre) && usuarios.get(nombre).equals(password); } }
package com.trifulcas.controlador; import java.io.IOException; import javax.servlet.RequestDispatcher; 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 com.trifulcas.utils.Sucesiones; /** * Servlet implementation class Fibonacci */ @WebServlet("/fibonacci") public class Fibonacci extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Fibonacci() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String terminos = request.getParameter("terminos"); int term=0; if (terminos != null && terminos.chars().allMatch(Character::isDigit)) { term=Integer.parseInt(terminos); } else { term = 20; } request.setAttribute("sucesion", Sucesiones.fibonacci(term)); request.setAttribute("terminos", term); RequestDispatcher dispatcher = request.getRequestDispatcher("fibonacci.jsp"); dispatcher.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Fibonacci</title> </head> <body> <h1>Sucesión de fibonacci</h1> <p> Aquí vas a ver los <%=request.getAttribute("terminos")%> primeros términos de la sucesión de fibonacci </p> <h2><%=request.getAttribute("sucesion")%></h2> <form action="./fibonacci"> <p>¿Cuantos términos quieres?</p> <input type="text" name="terminos"> <input type="submit"> </form> </body> </html>