https://veerasundar.com/blog/2010/12/changing-eclipse-default-encoding-to-utf-8-for-jsp-files/
Categoría: Java
Ejercicio JSTL
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); } }
JSTL Más ejemplos
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}" />
JSTL
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>
Login con servlet
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); } }
Ejemplos Servlet
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>
Ejercicio Servlet
Vamos a capturar la url ‘/ofertas’. Esto nos llevará a un Servlet que nos cargará directamente en dos atributos lo siguiente:
‘ofertones’: ‘<h3>Memoria ram 12€</h3><h3>Placa base 14€</h3>’
‘outlet’:'<h3>Dell 16Gb 540€</h3><h3>Pavillion 270€</h3>’
Pasará esos atributos a una página que tendrá bootstrap, una imagen de cabecera y dos secciones ‘ofertones’ y ‘outlet’ que nos mostrarán los atributos que nos pasan desde el servlet.
Añadiremos estilo de sombra al H3 de los textos de las ofertas.
Servlets
MVC páginas y ejemplos
Ejercicio variables de sesion
Vamos a cambiar el login para que nos acepte cualquier usuario siempre que ponga un nombre y la contraseña sea ‘admin’.
El nombre del usuario lo vamos a guardar en una variable de sesión y lo vamos a mostrar en todas las páginas.
Si no hay nombre cuando accedo a una página, me redirige al login.
Vamos a añadir la variable de sesión ‘intentos’ con un valor de 10 y cada vez que hagamos algo (ver el número mayor, tabla de multiplicar o palindromo) le restamos uno. Si llegamos a cero que nos redirija a la página de login.