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>