MANUAL JAVA
Variables.
Escribiremos los nombres de variables en formato lowerCamelCase. La
primera letra se escribe en minúscula y, a continuación, si se utiliza más
de una palabra, cada una de ellas empezaría con mayúscula.
No se debe poner una letra mayúscula al comienzo del nombre de una
variable para no confundirla con una clase (los nombres de las clases
comienzan por mayúscula).
Nombres de variables Los nombres de las variables deben ser
significativos, es decir, deben indicar perfectamente qué información
contienen.
Variables numéricas:
Enteros (int y long) Las variables que van a contener números enteros
se declaran con int., Si pretendemos almacenar valores muy grandes en
una variable, usaremos el tipo long en lugar de int.
Números decimales (double y float) Usamos los tipos double o float
cuando queremos (o esperamos) almacenar números con decimales en
las variables. La diferencia está en la precisión, las variables de tipo
double tienen mayor precisión que las de tipo float.
Cadenas de caracteres (String) Las cadenas de caracteres se utilizan
para almacenar palabras y frases. Todas las cadenas de caracteres
deben ir entrecomilladas mediante el símbolo de comillas dobles (“).
Ejemplo:
String miPalabra = "cerveza";
Caracteres (char) Un carácter suelto como una letra o un signo de
puntuación se puede almacenar en una variable de tipo char. El carácter
debe ir entrecomillado utilizando las comillas simples (‘).
Hay que tener en cuenta que no es lo mismo "a" que 'a'. Aunque el
contenido en ambos casos es la letra “a”, lo primero es una cadena de
caracteres y lo segundo es un carácter. En algunos lenguajes de
programación se pueden usar indistintamente las comillas simples y las
dobles pero en Java tinen un significado muy distinto.
Ejemplo
public static void main(String[] args) { char letra1 = 'a';
char letra2 = 'b';
[Link](letra1);
[Link](letra2);
[Link](letra1 + letra2);
[Link](letra1 + "" + letra2);
El resultado del programa anterior se muestra a continuación.
a
195 ab
char letra1 = 'c'; le asignamos a "letra1" el valor de "c"
[Link](" ") para imprimir en pantalla con salto de linea
[Link](" ") para imprimir en pantalla sin salto de linea
Las variables del tipo float o double (coma flotante) se usan para
guardar números en memoria que tienen parte entera y parte decimal
double baseImponible = 22.75; o float baseImponible = 22.75; estamos
diciendo que la variable "baseimponible" tiene 2 decimales
[Link]("x / y = " + ((float)x / (float)y)); comando para
imprimir en ànmtalla la division de x entre y con decimales
[Link]("Una palabra que uso con frecuencia: " + miPalabra);
comando para imprimir en pantralla
Como crear una variable de texto;
String nombre = “Pablo”;
Para imprimir una variable:
[Link](variable )
Para imprimir un texto:
[Link](" texto ")
3. System..out. Print f
[Link]("IVA %8.2f\n", (baseImponible * 0.21));
[Link]: dar formato de salida cuando queremos mostrar un
número de tipo float o double con un número determinado de decimales
/n : mueve el cursor hacia la proxima linea
%8: espacio de 8 caracteres
2f: dos decimales
Si queremos mostrar el número 12.3698 de tipo double con dos
decimales:
[Link]("%.2f %n", 12.3698);
El primer % indica que en esa posición se va a escribir un valor. El valor a
escribir se encuentra a continuación de las comillas.
.2 indica el número de decimales.
La f indica que el número es de tipo float o double. En la tabla que
aparece más adelante podeis ver todos los carateres de conversión para
todos los tipos de datos.
%n indica un salto de línea. Equivale a \n. Con printf podemos usar
ambos para hacer un salto de línea.
La salida por pantalla es:
12,37
Para mostrar el signo + en un número positivo:
double n = 1.25036;
[Link]("%+.3f %n", n);
Salida:
+1.250
i el número a mostrar es un entero se utiliza el caracter d:
Int x = 10;
[Link]("%d %n", x);
Salida:
10
Para mostrar varias variables pondremos tantos % como valores vamos
a mostrar. Las variables se escriben a continuación de las comillas
separadas por comas:
double n = 1.25036;
Int x = 10;
[Link]("n = %.2f x = %d %n", n, x);
Salida:
n = 1,25 x = 10
Printf permite mostrar valores con un ancho de campo determinado. Por
ejemplo, si queremos mostrar el contenido de n en un ancho de campo
de 10 caracteres escribimos:
double n = 1.25036;
[Link]("%+10.2f %n", n);
Salida:
bbbbb+1.25
Donde cada b indica un espacio en blanco.
l 10 indica el tamaño en caracteres que ocupará el número en pantalla.
Se cuentan además de las cifras del número el punto decimal y el signo
si lo lleva. En este caso el número ocupa un espacio de 5 caracteres (3
cifras, un punto y el signo) por lo tanto se añaden 5 espacios en blanco
al principio para completar el tamaño de 10.
Más ejemplos de printf:
Mostrar el número 1.22 en un ancho de campo de 10 caracteres y con
dos decimales.
double precio = 1.22;
[Link]("%10.2f", precio);
Salida:
bbbbb1.22
el carácter b indica un espacio en blanco)
l número ocupa un espacio total de 10 caracteres incluyendo el punto y
los dos decimales.
Variable para almacenar verdadero o falso:
boolean decision = true;
COMO CREAR UN MENU CON
JOptionPane
import [Link];
import [Link];
import [Link];
public class Main {
public static void main(String[] args) {
int opcionIndice = 0;
do {
// los Map (o mapas) los veremos mas adelante en el curso en
profundidad
// pero son como un arreglo asociativo, asocia un nombre (o
indice) a un valor
// también se les conoce como diccionarios para almacenar
datos en base a un nombre.
Map<String, Integer> opciones = new HashMap<>();
[Link]("Actualizar", 1);
[Link]("Eliminar", 2);
[Link]("Agregar", 3);
[Link]("Listar", 4);
[Link]("Salir", 5);
Object[] opArreglo = [Link]().toArray();
Object opcion = [Link](null,
"Seleccione un Operación", "Mantenedor de Usuario",
JOptionPane.INFORMATION_MESSAGE, null, opArreglo, opArreglo[0]);
if (opcion == null) {
[Link](null, "Debe seleccionar una
operación");
} else {
opcionIndice = [Link]([Link]());
String mensaje = null;
switch (opcionIndice) {
case 1 -> {
mensaje = "Usuario actualizado correctamente";
[Link](null, mensaje);
[Link](mensaje);
case 2 -> {
mensaje = "Usuario eliminado correctamente";
[Link](null, mensaje);
[Link](mensaje);
case 3 -> {
mensaje = "Usuario agregado correctamente";
[Link](null, mensaje);
[Link](mensaje);
case 4 -> {
mensaje = "Listando a los usuarios";
[Link](null, mensaje);
[Link](mensaje);
}
}
} while (opcionIndice != 5);
[Link](null, "Haz salido con exito!");
COMO TRABAJAR CON ARGUMENTOS
VARIABLES
private static void imprimirNumeros(int... numeros){
for (int i = 0; i < [Link]; i++) {
[Link]("elemento:" + numeros[i]);
Este metodo puede recibir un numero indetermiado de argumentos,
luego los convierte en un arreglo
los valores se pasan asi al metodo;
public static <String> void main(String[] args) {
imprimirNumeros(3, 4, 5);
imprimirNumeros(1,2);
variosParametros("Juan", 8, 9 , 10);
separados por coma
si se pasan varios argumentos, el argumento variable debe ser el utlimo
ejemplo
private static void variosParametros(String nombre, int... numeros){
[Link]("nombre = " + nombre);
imprimirNumeros(numeros);
ejemplo de todo lo anterior
package test;
public class TestArgumentosVariables {
public static void main(String[] args) {
imprimirNumeros(3, 4, 5);
imprimirNumeros(1,2);
variosParametros("Juan", 8, 9 , 10);
private static void variosParametros(String nombre, int... numeros){
[Link]("nombre = " + nombre);
imprimirNumeros(numeros);
private static void imprimirNumeros(int... numeros){
for (int i = 0; i < [Link]; i++) {
[Link]("elemento:" + numeros[i]);
Condicionales
If
Else
Ejemplo
If (condición) {
else {
}
Para comparar cadena;:
if ([Link]("si"){
Ejemplo
Programa que realiza un cuestionario
int puntuacion=0;
Scanner s = new Scanner([Link]);
[Link]("CUESTIONARIO CURSO DE JAVA ");
[Link]("JAVA ES UN PROGRAMA
ORIENTADO A OBJETO?");
String respuesta = [Link]();
if ([Link]("si")){
puntuacion++;
[Link]("UN PAQUETE ES UNA CARPETA
?");
respuesta = [Link]();
if ([Link]("si")){
puntuacion++;
[Link]("EN JAVA ES NECESARIO
INICIALZAR LAS VAEIABLES ?");
respuesta = [Link]();
if ([Link]("si")){
puntuacion++;
}
[Link]("TU PUTUACIONN ES " +
puntuacion);
}.
CODIGO DONDE INTRODUCIMOS
NOMBRE Y APELLIDO Y NOS DICE CUAL
ES EL NOMBRE MAS LARGO
import [Link].*;
// Press Shift twice to open the Search Everywhere
dialog and type show whitespaces,
// then press Enter. You can now see whitespace
characters in your code.
public class Main {
public static void main(String[] args) {
String mayor =" ";
String nombre1 =
[Link](null, "Ingrese el Primer
Nombre");
String nombre2 =
[Link](null, "Ingrese el
Segundo Nombre");
String nombre3 =
[Link](null, "Ingrese el Tercer
vNombre");
String nombreLargo[];
String[] parts1 = [Link](" ");
String[] parts2 = [Link](" ");
String[] parts3 = [Link](" ");
mayor = (parts1[0].length() > parts2[0].length()?
parts1[0]: parts2[0]);
mayor = ([Link]() > parts3[0].length()?
mayor: parts3[0]);
[Link](null," El
nombre es "+ mayor );
COMO SALTAR UNA
ITERACIÓN
Si por ejemplo queremos omitir los nombres Andrés
y Pepa en un ciclo for, podemos hacerlo usando
continue
Ejemplo:
String[] nombres = {"Andres", "Pepe", "Maria", "Paco",
"Lalo", "Bea", "Pato", "Pepa"};
int count = [Link];
for(int i = 0; i < count; i++){
if(nombres[i].toLowerCase().contains("ANDRES".toLo
werCase()) ||
nombres[i].toLowerCase().contains("pePa".toLowerC
ase())){
continue;
[Link]( i + ".- " + nombres[i]);
Con esa línea de código el sistema no imprime los
nombres Andrés ni Pepa
Comandos para ejecutar
loops
1. While
. 1 while (condición para parar) {
ejecución}
Ejemplo
Programa Java que pida por teclado el valor de un número N y muestre
por pantalla todos los números desde 1 hasta N.
[Link]("Introduce un número entero: ");
n = [Link]();
[Link]("Numeros del 1 al " + n + ": ");
int i = 1;
while (i <= n) {
[Link](i);
i++;
}
.2 do while
do {
[Link](i);
i++;
} while (i <= n);
Ejemplo
Programa Java que pida por teclado el valor de un número N y muestre
por pantalla todos los números desde 1 hasta N.
Scanner sc = new Scanner([Link]);
int n;
[Link]("Introduce un número entero: ");
n = [Link]();
[Link]("Numeros del 1 al " + n + ": ");
i = 1;
do {
[Link](i);
i++;
} while (i <= n);
Ejemplo
int i = 1;
o{
[Link](i);
i++;
while (i <= 10);
tro ejemplo
String password = "";
o{
[Link]("Ingrese su contraseña: ");
password = [Link]();
while ();
. 3 FOR
Comando for
for (valor-para - empezar;
condición-para-parar;
Código-procedimiento) {instrucciones
para repetir durante el loop
Ejemplo
En este ejemplo veremos un ejercicio
* de ejemplo con un bucle for en el que
* vamos a mostrar por consola
* los números del 1 al 100*/
for(int x=0;x<=100;x++) {
/* Para num=0 ; mientras num sea menor que 100
* incrementamos la variable num en 1
* Mostramos un mensaje por consola*/
[Link]("El número es " + x);
}
tro ejemplo
for(int i=500;i<=1000;i+=2)
//Notemos que escribir i+=2 es similar a escribir i = i + 2
[Link](i);
Programa Java que pida por teclado el valor de un número N y muestre
por pantalla todos los números desde 1 hasta N.
usando for
Scanner sc = new Scanner([Link]);
int n;
[Link]("Introduce un número entero: ");
n = [Link]();
[Link]("\nNumeros del 1 al " + n + ": ");
for (i = 1; i <= n; i++) {
[Link](i);
}9
una frase + una variable
A Pablo Vodafone:
COMO ROMPER UN CICLO FOR USANDO
BREAK CUANDO ENCUENTRA EL ELEMENTO
QUE ESTAMOS BUSCANDO
String[] nombres = {"Andres", "Pepe", "Maria", "Paco", "Lalo", "Bea", "Pato",
"Pepa"};
int count = [Link];
String buscar = [Link]("Ingrese un nombre,
ejemplo \"Pepe\" o \"Maria\":");
[Link]("buscar = " + buscar);
boolean encontrado = false;
for(int i = 0; i < count; i++){
if(nombres[i].equalsIgnoreCase(buscar)){
encontrado = true;
break;
[Link]("nombres = " + nombres[i]);
if(encontrado){
[Link](null, buscar + " fue
encontrado!");
} else {
[Link](null, buscar + " no existe en el
sistema!");
usando el break rompemos el ciclo
COMO capturar la entrada
de datos procedente del
usuario POR TECLADO
: añadir la siguiente línea al comienzo de nuestro programa, JUSTO
DEBAJO DEL NOMBRE DE LA CLASE:
Import [Link];
.crear la variable Scanner como una variable de clase y crear el objeto
Scanner como se muestra el la siguiente
línea: Scanner s = new Scanner([Link]);:
.Declarar el objeto e inicializar con
el objeto de entrada estándar predefinido EJEMPLO:
PARA TEXTO PARA INTRODUCIR POR EJEMP NOMBRE:
String name =[Link]();
PARA UN CARATER POR EJEMÑPLO GENERO :char gender =
[Link]().charAt(0);
PARA VALOR NUMERICO: int age = [Link]();
long mobileNo = [Link]();
double average = [Link]();
Operadores de comparacion
>= Mayor o igual que
<= Menor o igual que
== Igual que
!= Diferente que
Lista de tipos de datos primitivos en JAVA
Tipo Tamaño Valor mínimo Valor máximo
Byte 8 bits -128 127
Short 16 bits -32768 32767
Int 32 bits -2147483648 2147483647
Long 64 bits -9223372036854775808 9223372036854775807
Float 32 bits -3.402823e38 3.402823e38
Double 64 bits -1.79769313486232e308
1.79769313486232e308
Chart 16 bits '\u000' '\ufff'
Operadores aritmeticos
Operador Descripción
Operador de Suma. Concatena cadenas para la suma de String
Operador de Resta
Operador de Multiplicación
Operador de División
Operador de Resto
OPERADORES LÓGICOS
PARA PASAR UNA VARIABLE STRING A MINUSCULA
Variable día
dia = [Link]();
Todo lo que introducimos lo pasa a minuscula
SWITCH CASE
Sintaxis switch case default
Después de cada case va break
Ejemplo
Programa para decir a que signo pertenece a partir de la fecha de
nacimiento
Public static void main(String[] args) {
Scanner s = new Scanner([Link]);
int dia;
String mes;
[Link]("Introduce el día del mes que naciste (1-31): ");
dia = [Link]();
if (dia >= 1 && dia <= 31){
[Link]("Introduce el mes en el que naciste (Enero a
Diciembre): ");
mes = [Link]();
mes = [Link]();
switch (mes){
case "enero":
if(dia>=20)
[Link]("Tu signo es Acuario\n ");
else
[Link]("Tu signo es Capricornio\n ");
break;
case "febrero":
if(dia>=19)
[Link]("Tu signo es Piscis\n ");
else
[Link]("Tu signo es Acuario\n ");
break;
case "marzo":
if(dia>=21)
[Link]("Tu signo es Aries\n ");
else
[Link]("Tu signo es Piscis\n ");
break;
case "abril":
if(dia>=20)
[Link]("Tu signo es Tauro\n ");
else
[Link]("Tu signo es Aries\n ");
break;
case "mayo":
if(dia>=21)
[Link]("Tu signo es Géminis\n ");
else
[Link]("Tu signo es Tauro\n ");
break;
case "junio":
if(dia>=21)
[Link]("Tu signo es Cáncer\n ");
else
[Link]("Tu signo es Géminis\n ");
break;
case "julio":
if(dia>=23)
[Link]("Tu signo es Leo\n ");
else
[Link]("Tu signo es Cáncer\n ");
break;
case "agosto":
if(dia>=23)
[Link]("Tu signo es Virgo\n ");
else
[Link]("Tu signo es Leo\n ");
break;
case "septiembre":
if(dia>=23)
[Link]("Tu signo es Libra\n ");
else
[Link]("Tu signo es Virgo\n ");
break;
case "octubre":
if(dia>=23)
[Link]("Tu signo es Escorpio\n ");
else
[Link]("Tu signo es Libra\n ");
break;
case "noviembre":
if(dia>=22)
[Link]("Tu signo es Sagitario\n ");
else
[Link]("Tu signo es Escorpio\n ");
break;
case "diciembre":
if(dia>=22)
[Link]("Tu signo es Capricornio\n ");
else
[Link]("Tu signo es Sagitario\n ");
break;
default:
[Link]("Mes inexistente.\n ");
break;
else
[Link]("El día del mes ha de estar entre 1 y 31\n ");
Otro ejemplo con do while
Int opcion;
o{
// Mostrar menú de opciones
opcion = [Link]();
switch (opcion) {
case 1:
// Opción 1
break;
case 2:
// Opción 2
break;
case 3:
// Opción 3
break;
default:
[Link]("Opción inválida, intente de nuevo.");
while (opcion != 0);
Números aleatorios
Los números aleatorios se utilizan con frecuencia en programación para
emular el
Comportamiento de algún fenómeno natural, el resultado de un juego de
azar o, en
General, para generar cualquier valor impredecible a priori.
Por ejemplo, se pueden utilizar números aleatorios para generar tiradas
de dados de
Tal forma que, de antemano, no se puede saber el resultado. Antes de
tirar un dado no
Sabemos si saldrá un 3 o un 5; se tratará pues de un número
impredecible; lo que sí
Sabemos es que saldrá un número entre el 1 y el 6, es decir, podemos
acotar el rango
De los valores que vamos a obtener de forma aleatoria.
Ejemplo:
. codigo para generar 10 numeros aleatorios entre 0 y 1
[Link]("Diez números aleatorios:\n");
or (int i = 1; i < 11; i++) {
[Link]([Link]());
.20 números aleatorios entre 0 y 10"
[Link]("20 números aleatorios entre 0 y 10");
[Link](" sin llegar a 10 (con decimales):");
or (int i = 1; i <= 20; i++) {
[Link]( [Link]()*10 + " ");
l programa anterior genera una salida como ésta:
Números aleatorios 92
.07637674702636321
.025787417143682
.854993461897163
.690351111720931
.82310645589797
.518007662236258
.23529380254256
.9201032643833376
.836554253122096
.224559064261578
.652976185871555
.9922807025365135
.498156441347868
.743251697509109
.727764845406675
.929766691797686
.05801413446517634
.1575652936687284
i queremos generar números enteros en lugar de números con
decimales, basta con
Hacer un casting para convertir los números de tipo double en números
de tipo int.
Recuerda que (int)x transforma x en una variable de tipo entero; si x era
de tipo float
double, perdería todos los decimale
[Link]("20 números aleatorios entre 0 y 9 (sin decimales):");
or (int i = 1; i <= 20; i++) {
[Link]((int)([Link]()*10) + " ");
[Link]();
La salida del programa debe ser algo muy parecido a esto:
10 números aleatorios entre 0 y 9 (sin decimales):
8038873208212906454
El siguiente codigo imprime un numero aleatorio
[Link]([Link]());
Entre 0 y 1
Para generar un numero aleatorio entre 0 y 10:
[Link]( [Link]()*10 + " ");
Para generar un numero aleatorio entre 0m y 10 que se entero:
[Link]((int)([Link]()*10) + " ");
Para generar un numero aleatorio entre 1 y 10 que se entero:
[Link]( (int)([Link]()*10 + 1) + " ");
Para generar un numero aleatorio entre 50 y 60 que se entero:
[Link](((int)([Link]()*11) + 50 ) + " ");
.2 Generación dee palabras de forma aleatoria de
un conjunto dado
Hemos visto cómo generar números aleatorios con y sin decimales y en
diferentes
intervalos. Vamos a producir ahora de forma aleatoria una palabra -
piedra, papel o
tijera - generando primero un número entero entre 0 y 2 y posteriormente
haciendo
corresponder una palabra a cada número
como asignar un numero aleatorio a una variable;
int mano = (int)([Link]()*3);
int mano = (int)([Link]()*3);
switch (mano){
case 0:
[Link]("PIEDRA");
break;
case 1:
[Link]("PAPEL");
break;
case 2:
[Link]("TIJERA");
break;
como asignarle a una variable un numero aleatorio entre 1 y 7:
int dia = (int)([Link]()*7) + 1;
codigo que Muestra un día de la semana al azar:
[Link]("Muestra un día de la semana al azar:");
int dia = (int)([Link]()*7) + 1; // genera un número aleatorio
// entre el 1 y el 7
switch(dia) {
case 1:
[Link]("lunes");
break;
case 2:
[Link]("martes");
break;
case 3:
[Link]("miércoles"); break;
case 4:
[Link]("jueves");
break;
case 5:
[Link]("viernes");
break;
case 6:
[Link]("sábado");
break;
case 7:
[Link]("domingo");
break;
default:
Escribe un programa que muestre la tirada de tres dados.
* Se debe mostrar también la suma total (los puntos que suman
* entre los tres dados)
int tirada;
int suma = 0;
[Link]("Tirada de tres dados: ");
for(int i = 0; i < 3; i++) {
tirada = (int)([Link]() * 6) + 1;
[Link](tirada + " ");
suma += tirada;
[Link]("\nSuma: " + suma);
suma += tirada;
suma va acumulando los resultados aleatorios de "tirada"
Ejercicio página 502
20 numeros aleatorios separados por esapacio
int i =1;
int cont=0;
for(i=1;cont<20;cont++){
int nume = (int)([Link]()*10);
[Link](nume+" ");
Ejercicio 6 Escribe un programa que piense un número al azar entre 0 y
100. El usuario debe
adivinarlo y tiene para ello 5 oportunidades. Después de cada intento
fallido, el programa dirá
cuántas oportunidades quedan y si el número introducido es menor o
mayor que el número
secreto
int n;
int numero;
int seguir;
int i=4;
Scanner sc = new Scanner([Link]);
n = (int)([Link]()*100);
// [Link](n);
[Link]("Adivina el numero al azar ENTRE EL 0 Y EL 100,
TIENES 5 OPORTUNIDADES");
numero = [Link]();
if (numero==n){
[Link]("HAS ACERTADO..... HAS ADIVINADO EL
NUMERO ...HAS GANADO EL JUEGO");
seguir=2;}
else {for (seguir =1;i!=0;){
[Link]("NO HAS ACERTADO, TE QUEDA " + i +"
intento");
numero = [Link]();
if (numero==n){
[Link]("HAS ACERTADO..... HAS ADIVINADO
EL NUMERO ...HAS GANADO EL JUEGO");
i=0;}
else {i--;}}
if (numero!=n){
[Link](" HAS AGOTADO LOS INTENTOS,el numero al
azar era el "+n +" EL JUEGO HA TERMINADO");}}}
PARA GENERAR NUMEROS ALETORIOS PARES
n = (int)([Link]()*50)*2;
Realiza un programa que vaya generando números aleatorios pares
* entre 0 y 100 y que no termine hasta que no saque el número 24. El
* programa deberá decir al final cuántos números se han generado
int n=0;
int total;
int cont=0;
int i=4;
while(n!=24){
n = (int)([Link]()*51)*2;
cont++;
[Link](n);
[Link]("se han generado "+cont+ " numeros");}
10. Realiza un programa que pinte por pantalla diez líneas formadas por
caracteres.
* El carácter con el que se pinta cada línea se elige de forma aleatoria
entre
* uno de los siguientes: *, -, =, ., |, @. Las líneas deben tener una longitud
* aleatoria entre 1 y 40 caracteres.
int n=0;
int cont=0;
int linea =1;
int i=1;
while(cont!=11){
cont++;
n = (int)([Link]()*10+1);
switch (n){
case 1:
linea = (int)([Link]()*40+1);
for (i=1;linea<40;linea++){
[Link]("*");}
break;
case 2:
linea = (int)([Link]()*40+1);
for (i=1;linea<40;linea++){
[Link]("-");
break;}
case 3:
linea = (int)([Link]()*40+1);
for (i=1;linea<40;linea++){
[Link]("=");
break;}
case 4:
linea = (int)([Link]()*40+1);
for (i=1;linea<40;linea++){
[Link](".");
break;}
case 5:
linea = (int)([Link]()*40+1);
for (i=1;linea<40;linea++){
[Link]("|");
break;}
case 6:
linea = (int)([Link]()*40+1);
for (i=1;linea<40;linea++){
[Link]("@");
break;}
case 7:
linea = (int)([Link]()*40+1);
for (i=1;linea<40;linea++){
[Link](".");
break;}
case 8:
linea = (int)([Link]()*40+1);
for (i=1;linea<40;linea++){
[Link](",");
break;}
case 9:
linea = (int)([Link]()*40+1);
for (i=1;linea<40;linea++){
[Link](".");
break;}
case 10:
linea = (int)([Link]()*40+1);
for (i=1;linea<40;linea++){
[Link]("*");
break;}
[Link]("");
}}
}
}
CLASE MATH
1. PARA SABER EL VALOR ABSOLUCTO DE UN NUMERO
int absoluto = [Link](-3);
[Link]("absoluto = " + absoluto);
RUN;
absoluto = 3
2. PARA SABER EL MAXIMO ENTRE 2 NUMEROS DOUBLES
double max = [Link](3.5, 1.2);
[Link]("max = " + max);
RUN
max = 3.5
3. PARA SABEER EL MINIMO ENTRE 2 NUMEROS DOUBLES
double min = [Link](3.5, 1.2);
[Link]("min = " + min);
RUN
min = 1.2
4. PARA REDONDEAR HACIA ARRIBA
double techo = [Link](3.5);
[Link]("techo = " + techo);
RUN
techo = 4.0
[Link] REDONDEAR HACIA ABAJO
double piso = [Link](3.5);
[Link]("piso = " + piso);
RUN
piso = 3.0
6. PARA REDONDEAR UN DECIMAL
long entero = [Link](3.4);
[Link]("entero = " + entero);
RUN
entero = 3
7. POTENCIA DE UN NUMERO POR EJEMPLO 10 ELEVADO A LA 3
double potencia = [Link](10, 3);
[Link]("potencia = " + potencia);
RUN;
RUN;
potencia = 1000.0
8. RAIZ CUADRADA DE 5
double raiz = [Link](5);
[Link]("raiz = " + raiz);
RUN;
raiz = 2.23606797749979
COMO GENERAR NUMEROS
ALEATORIOS CON LA CLASE RANDOM
Por ejemplo xcomo generar n umeros aleatorios del 0 hasta el 7 ( el 7 es
excluyente)
import [Link];
public class Main {
public static void main(String[] args) {
Random randomObj = new Random();
int randomInt = [Link](7);
[Link]("randomInt = " + randomInt);
}
run
randomInt = 3
si queremos incluir el 7 seria:
import [Link];
public class Main {
public static void main(String[] args) {
Random randomObj = new Random();
int randomInt = [Link](7+1);
[Link]("randomInt = " + randomInt);
para generar numeros aleatorios desde 15 hasta 25( el 25 es excluyente
Random randomObj = new Random();
int randomInt = 15 + [Link](25-15);
[Link]("randomInt = " + randomInt);
si quefremos incluir el 25 seria
Random randomObj = new Random();
int randomInt = 15 + [Link](25-15+1);
[Link]("randomInt = " + randomInt);
NUMEROS ALEATORIOS DE
UN ARREGLO
import [Link];
public class Main {
public static void main(String[] args) {
String[] colores = {"azul", "amarillo", "rojo", "verde", "blanco", "negro"};
Random randomObj = new Random();
int randomInt = [Link]([Link]);
[Link]("randomInt = " + randomInt);
[Link]("colores = " + colores[randomInt]);
}
}
codigo para calcuylar el area de un circulo pidiendo como dato el radio
import [Link];
public class Main {
public static void main(String[] args) {
Scanner sc= new Scanner([Link]);
[Link]("ESTE PROGRAMA LE PERMITE CALCULAR EL
AREA DE UN CIRCULO A PARTIR DEL RADIO");
[Link]("Introduzca el area del Circulo");
double radio= [Link]();
[Link](" El area del circulo es " + (([Link])*
[Link](radio, 2)));
11. Escribe un programa que muestre 20 notas generadas al azar. Las
notas deben aparecer de\
la
* forma: suspenso, suficiente, bien, notable o sobresaliente. Al final
aparecerá el númer\
o de
* suspensos, el número de suficientes, el número de bienes, etc.
* @author Luis José Sánchez
int nota=0;
int cont=0;
int susp=0;
int suf=0;
int not=0;
int sobre=0;
for (cont=0;cont<20;nota = (int)([Link]()*10+1)){
if (nota<5){
[Link]("has sacado " + nota +" suspenso");
susp++;}
if (nota==5){
[Link]("has sacado " + nota +" suficiente");
suf++;}
if (nota>5&¬a<=8){
[Link]("has sacado " + nota +" notable");
not++;}
if (nota>=9){
[Link]("has sacado " + nota +" sobreasaliente");
sobre++;}
cont++;}
[Link]("en total han sido " + susp + " suspensos, "+ suf+
" suficiente "+ not+" notables y " + sobre+ " sobresalientes");
Ejemplos
12. Realiza un programa que llene la pantalla de caracteres aleatorios (a
lo Matrix) con el
* código ascii entre el 32 y el 126. Puedes hacer casting con (char) para
convertir un
* entero en un carácter
int n;
int i=0;
int cont=0;
while (cont<70){
cont++;
for (i=0;i<126;){
n = (int)([Link]()*126+33);
[Link]((char)n);
i++;}
[Link]("");
para imprimir caracteres ascui entre 32 y 126
[Link]((char)([Link]() * (126 - 32 + 1) + 32));
para interrumpir una ejecucion durante 50 milisegundos
[Link](50);
para generar mnumeros aleatorios entre 32 y 126
n = (int)([Link]()*(126 - 32 + 1) + 32);
para generar numeros aleatorios entre 10 y 30
n = (int)([Link]()*(30 - 10 + 1) + 10);
para generar numero aleratorios entyre 1 y 6
dado1 = (int)([Link]()*6)+1;
Escribe un programa que simule la tirada de dos dados. El programa
deberá
* continuar tirando los dados una y otra vez hasta que en alguna tirada
los
* dos dados tengan el mismo valor.
int dado1=0;
int dado2=1;
while (dado1!=dado2){
dado1 = (int)([Link]()*6)+1;
dado1 = (int)([Link]()*6)+1;}
[Link](" el valor del dado 1 es " + dado1+ " y el valor del
dado 2 es "+ dado2);
int n;
int numero;
int seguir;
int i=4;
Scanner sc = new Scanner([Link]);
n = (int)([Link]()*100);
[Link](n);
[Link]("Adivina el numero al azar ENTRE EL 0 Y EL 100,
TIENES 5 OPORTUNIDADES");
numero = [Link]();
if (numero==n){
[Link]("HAS ACERTADO..... HAS ADIVINADO EL
NUMERO ...HAS GANADO EL JUEGO");
seguir=2;}
else {for (seguir =1;i!=0;){
[Link]("NO HAS ACERTADO, TE QUEDA " + i +"
intento");
numero = [Link]();
if (numero==n){
[Link]("HAS ACERTADO..... HAS ADIVINADO
EL NUMERO ...HAS GANADO EL JUEGO");
i=0;}
else {if (numero<n){
[Link]("el numero que has introducido es
menor que el numero que tienes que adivinar");
{if (numero>n){
[Link]("el numero que has introducido es
mayor que el numero que tienes que adivinar");
i--;i--;
}}
if (numero!=n){
[Link](" HAS AGOTADO LOS INTENTOS,el numero al
azar era el "+n +" EL JUEGO HA TERMINADO");}}}
14. Escribe un programa que piense un número al azar entre 0 y 100. El
usuario debe
* adivinarlo y tiene para ello 5 oportunidades. Después de cada intento
fallido, el
* programa dirá cuántas oportunidades quedan y si el número
introducido es menor o
* mayor que el que ha pensad
int n;
int numero;
int seguir;
int i=4;
Scanner sc = new Scanner([Link]);
n = (int)([Link]()*100);
[Link](n);
[Link]("Adivina el numero al azar ENTRE EL 0 Y EL 100,
TIENES 5 OPORTUNIDADES");
numero = [Link]();
if (numero==n){
[Link]("HAS ACERTADO..... HAS ADIVINADO EL
NUMERO ...HAS GANADO EL JUEGO");
seguir=2;}
else {for (seguir =1;i!=0;){
if (numero<n){
[Link]("el numero que has introducido es menor
que el numero que tienes que adivinar, te quedan " + i +" intentos");
if (numero>n){
[Link]("el numero que has introducido es mayor
que el numero que tienes que adivinar, te quedan " + i + " intentos");
numero = [Link]();
if (numero==n){
[Link]("HAS ACERTADO..... HAS ADIVINADO EL
NUMERO ...HAS GANADO EL JUEGO");
i=0;}
else
i--;
}
}
if (numero!=n){
[Link](" HAS AGOTADO LOS INTENTOS,el numero al
azar era el "+n +" EL JUEGO HA TERMINADO");}}}
Ejercicio 16
Realiza un simulador de máquina tragaperras simplificada que cumpla
los
siguientes requisitos:
a) El ordenador mostrará una tirada que consiste en mostrar 3 figuras.
Hay 5
figuras posibles: corazón, diamante, herradura, campana y limón.
b) Si las tres figuras son diferentes se debe mostrar el mensaje “Lo
siento, ha
perdido”.
c) Si hay dos figuras iguales y una diferente se debe mostrar el mensaje
“Bien,
ha recuperado su moneda”.
d) Si las tres figuras son iguales se debe mostrar “Enhorabuena, ha
ganado
10 monedas”.
mio:
int corazon =1;
int diamante =2;
int herradura =3;
int campana =4;
int limon=5;
int dado1 = (int)([Link]()*5+1);
int dado2 = (int)([Link]()*5+1);
int dado3 = (int)([Link]()*5+1);
switch (dado1){
case 1:
[Link]("corazon ");
break;
case 2:
[Link]("diamamnte ");
break;
case 3:
[Link]("herradura ");
break;
case 4:
[Link]("campana ");
break;
case 5:
[Link]("limon ");
break;}
switch (dado2){
case 1:
[Link]("corazon ");
break;
case 2:
[Link]("diamamnte ");
break;
case 3:
[Link](" herradura ");
break;
case 4:
[Link](" campana ");
break;
case 5:
[Link](" limon ");
break;}
switch (dado3){
case 1:
[Link](" corazon ");
break;
case 2:
[Link](" diamamnte ");
break;
case 3:
[Link](" herradura ");
break;
case 4:
[Link](" campana ");
break;
case 5:
[Link](" limon ");
break;}
[Link]("");
if (dado1==dado2&&dado1==dado3&&dado2==dado3){
[Link]("Enhorabuena, ha ganado 10 monedas");
}
if (dado1!=dado2&&dado1!=dado3&&dado2!=dado3){
[Link]("Lo siento, ha perdido");}
else{
if (dado1==dado2&&dado1!=dado3){
[Link]("Bien, ha recuperado su moneda");}
if (dado1==dado3&&dado1!=dado2){
[Link]("Bien, ha recuperado su moneda");}
if (dado2==dado3&&dado1!=dado2){
[Link]("Bien, ha recuperado su moneda");}
}
COMO TRABAJAR CON LA CLASE DATE
[Link] JAVA UTIL DATE
import [Link];
2. creamos una variable que contenga la
fecha actual
Date fecha = new Date();
[Link]("fecha = " + fecha);
3. para cambiar el formato de la fecha
Date fecha = new Date();
[Link]("fecha = " + fecha);
SimpleDateFormat df = new SimpleDateFormat("EEEE dd 'de'
MMMM, yyyy");
String fechaStr = [Link](fecha);
[Link](fechaStr );
el texto se escribe entre comillas simples en este caso`de`
COMO ASIGNAR UNA FECHA
EN PARTICULAR YA SEA
PRESENTE A PASADO
Calendar calendario = [Link]();
[Link](2019, [Link], 25, 18, 20, 10);
Date fecha = [Link]();
[Link]("Calendario = " + fecha);
o asi:
Calendar calendario = [Link]();
//[Link](2019, [Link], 25, 18, 20, 10);
[Link]([Link], 2020);
[Link]([Link], [Link]);
[Link](Calendar.DAY_OF_MONTH, 25);
//[Link](Calendar.HOUR_OF_DAY, 21);
[Link]([Link], 7);
[Link](Calendar.AM_PM, [Link]);
[Link]([Link], 20);
[Link]([Link], 10);
[Link]([Link], 125);
Date fecha = [Link]();
[Link]("fecha sin formato = " + fecha);
COMO CONVERIR UN STRING CON FORMATO DE FECHA A OBJETO DEL
TIPO DATE
Scanner s = new Scanner([Link]);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
[Link]("Ingrese una fecha con formato 'yyyy-MM-dd'");
try {
Date fecha = [Link]([Link]());
[Link]("fecha = " + fecha);
[Link]("format = " + [Link](fecha));
} catch (ParseException e) {
codigo para calcular ala edad
Scanner scanner = new Scanner([Link]);
[Link]("Ingrese un fecha de nacimiento con formato
yyyy-MM-dd:");
String fechaStr = [Link]();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date fechaNacimiento = [Link](fechaStr);
Date actual = new Date();
// creamos un patron de fecha numérico con el año mes y día
df = new SimpleDateFormat("yyyyMMdd");
// luego convertimos ambas fechas la actual y la fecha de
nacimiento
// en enteros que contiene el año mes y día
int desde = [Link]([Link](fechaNacimiento));
int hasta = [Link]([Link](actual));
// luego restamos ambas fechas y dividimos en 10000 para quitar
decimales y
// dejar la fecha en decenas o centenas
int edad = (hasta - desde) / 10000;
[Link]("La edad es: " + edad);
} ARRAYS.
:Arrays de una dimensión Un array es un tipo de dato capaz de
almacenar múltiples valores. Se utiliza para agrupar datos muy
parecidos, por ejemplo, si se necesita almacenar la temperatura media
diaria en Málaga durante el último año se pueden utilizar las variables
temp0,
temp1, temp2, temp3, temp4, … y así hasta 365 variables distintas pero
sería poco práctico; es mejor utilizar un array de nombre temp y usar un
índice para referenciar la temperatura de un día concreto del año.
En matemáticas, un array de una dimensión se llama vector. En este
libro no utilizaremos este término para no confundirlo con la clase
Vector de Java.
int[] n; // se define n como un array de números enteros
n = new int[4]; // se reserva espacio en memoria para 4 números enteros
abreviado seria
int[] n = new int[4];
ARREGLO DE STRING
String [] nombre = new String [6]
Veamos con un ejemplo cómo se crea y se utiliza un array.
/**
* Ejemplo de uso de arrays *
* @author Luis José Sánchez */
public class Array01 { public static void main(String[] args) { int[] n; // se
define n como un array de enteros n = new int[4]; // se reserva espacio
para 4 enteros n[0] = 26;
n[1] = -30;
n[2] = 0;
n[3] = 100;
[Link]("Los valores del array n son los siguientes: ");
[Link](n[0] + ", " + n[1] + ", " + n[2] + ", " + n[3]);
int suma = n[0] + n[3];
[Link]("\nEl primer elemento del array más el último suman
" + suma);
Observa que el índice de cada elemento de un array se indica entre
corchetes de tal forma que n[3] es el cuarto elemento ya que el primer
índice es el 0.
en el siguiente programa nos piden un numero para imprimir por
pantalla el numero en la posicion del array
// definición del array y reserva de memoria en la misma línea
Scanner s = new Scanner([Link]);
int[] x = new int[5];
x[0] = 8;
x[1] = 33;
x[2] = 200;
x[3] = 150;
x[4] = 11;
[Link]("El array x tiene 5 elementos ¿cuál de ellos quiere
ver?");
[Link]("Introduzca un número del 0 al 4: ");
int indice = [Link]();
[Link]("El elemento que se encuentra en la posición " +
indice);
[Link](" es el " + x[indice]);
la salida en pantalla seria:
El array x tiene 5 elementos ¿cuál de ellos quiere ver?
Introduzca un número del 0 al 4: 1
El elemento que se encuentra en la posición 1 es el 33
BUILD SUCCESSFUL (total time: 3 seconds)
em el siguiente programa asignamos valores a cada posicion del array ,
y en algunas posiciones almacenamos opetraciones aritmetics
int[] num = new int[10];
num[0] = 8;
num[1] = 33;
num[2] = 200;
num[3] = 150;
num[4] = 11;
num[5] = 88;
num[6] = num[2] * 10;
num[7] = num[2] / 10;
num[8] = num[0] + num[1] + num[2];
num[9] = num[8];
[Link]("El array num contiene los siguientes elementos:");
for (int i = 0; i < 10; i++) {
[Link](num[i]);
}
}
array de caracteres
char[] caracter = new char[6];
char[] caracter = new char[6];
caracter[0] =8;
caracter[1] =4;
caracter[2] =1;
caracter[3] =98;
caracter[4] =39;
caracter[5] =67;
int i=0;
for (i=0;i<6;i++){
[Link](caracter[i]);
}
}
COMO ORDENAR UN ARRAY
1,importamos lel paquete array list
import [Link];
[Link] el arreglo
String[] productos = new String[7];
productos[0] = "Kingston Pendrive 64GB";
productos[1] = "Samsung Galaxy";
productos[2] = "Disco Duro SSD Samsung Externo";
productos[3] = "Asus Notebook";
productos[4] = "Macbook Air";
productos[5] = "Chromecast 4ta generación";
productos[6] = "Bicicleta Oxford";
3. usamos la calase array list para ordenar el arreglo
[Link](productos);
ejemplo
import [Link];
public class ejemploarreglos4 {
public static void main(String[] args) {
String[] productos = new String[7];
productos[0] = "Kingston Pendrive 64GB";
productos[1] = "Samsung Galaxy";
productos[2] = "Disco Duro SSD Samsung Externo";
productos[3] = "Asus Notebook";
productos[4] = "Macbook Air";
productos[5] = "Chromecast 4ta generación";
productos[6] = "Bicicleta Oxford";
[Link](productos);
for (int i = 0; i<[Link]; i++) {
[Link](productos[i]);
Otro ejemplo import [Link];
public class prueba2 {
public static void main(String[] args) {
String [] nombres = new String[3];
nombres[0] = "pablo";
nombres [1] = "ana";
nombres [2] = "zapa";
[Link](nombres);
for(String n: nombres){
[Link](n);
como ordenar un arreglo de
manera inversa
import [Link];
import [Link];
public class prueba2 {
public static void main(String[] args) {
String [] nombres = new String[3];
nombres[0] = "pablo";
nombres [1] = "ana";
nombres [2] = "zapa";
[Link](nombres);
[Link]([Link](nombres));
for(String n: nombres){
[Link](n);
}
METODO COMPARE TO QUE NOS
ORDENA LOS ELEMENTOS DE UNARRAY
EN FORMA ASCEDENTE
public class pruebaOrdenArray {
public static void main(String[] args) {
String[] productos = { "Kingston Pendrive 64GB", "Samsung Galaxy",
"Disco Duro SSD Samsung Externo",
"Asus Notebook", "Macbook Air",
"Chromecast 4ta generación", "Bicicleta Oxford" };
int total = [Link];
int contador = 0;
for(int i = 0; i < total - 1; i++){
for(int j = 0; j < total -1 -i; j++){
if( productos[j+1].compareTo(productos[j]) < 0 ){
String auxiliar = productos[j];
productos[j] = productos[j+1];
productos[j+1] = auxiliar;
contador++;
[Link]("contador = " + contador);
for(String pro:productos){
[Link]("pro = " + pro);
}
METODO COMPARE TO QUE NOS
ORDENA LOS ELEMENTOS DE UN ARRAY
STRING EN FORMA DESCEDENTE
import [Link];
import [Link];
public class pruebaOrdenArray {
public static void main(String[] args) {
String[] productos = { "Kingston Pendrive 64GB", "Samsung Galaxy",
"Disco Duro SSD Samsung Externo",
"Asus Notebook", "Macbook Air",
"Chromecast 4ta generación", "Bicicleta Oxford" };
int total = [Link];
int contador = 0;
for(int i = 0; i < total - 1; i++){
for(int j = 0; j < total -1 -i; j++){
if( productos[j+1].compareTo(productos[j]) > 0 ){
String auxiliar = productos[j];
productos[j] = productos[j+1];
productos[j+1] = auxiliar;
contador++;
[Link]("contador = " + contador);
for(String pro:productos){
[Link]("pro = " + pro);
}
COMO ORDENAR ARREGLO
NUMERICO MEDIANTE
METODO
public class OrdenaraArrayMetodosBurbuja {
public static void sortBurbuja(Object[] arreglo){
int total = [Link];
int contador = 0;
for(int i = 0; i < total - 1; i++){
for(int j = 0; j < total -1 -i; j++){
if( ((Comparable) arreglo[j+1]).compareTo(arreglo[j]) < 0 ){
Object auxiliar = arreglo[j];
arreglo[j] = arreglo[j+1];
arreglo[j+1] = auxiliar;
contador++;
[Link]("contador = " + contador);
public static void main(String[] args) {
Integer[] numeros = new Integer[4];
numeros[0] = 10;
numeros[1] = [Link]("7");
numeros[2] = 35;
numeros[3] = -1;
sortBurbuja(numeros);
for(int i = 0; i < [Link]; i++){
[Link]("i = " + i + " : " + numeros[i]);
Un programa que muestre un array de números de
tipo double que almacena notas de alumnos.
double[] nota = new double[4];
Scanner s = new Scanner([Link]);
double[] nota = new double[4];
[Link]("Para calcular la nota media necesito saber la ");
[Link]("nota de cada uno de tus exámenes.");
for (int i = 0; i < 4; i++) {
[Link]("Nota del examen nº " + (i + 1) + ": ");
nota[i] = [Link]();
[Link]("Tus notas son: ");
double suma = 0;
for (int i = 0; i < 4; i++) {
[Link](nota[i] + " ");
suma += nota[i];
[Link]("\nLa media es " + suma / 4);
array con caracteres
String[] color = {"rojo", "amarillo", "verde", "blanco", "azul", "negro"};
programa generador aleatorio de banderas
[Link]("¿generador automatico de banderas");
Scanner s = new Scanner([Link]);
int cant;
String[] color = {"rojo", "amarillo", "verde", "blanco", "azul", "negro"};
[Link]("¿Cuántas franjas quiere para la bandera? ");
cant = [Link]();
int n;
int i=0;
for (i=0;i!=cant;i++){
n = (int)([Link]()*6);
[Link](color[n]);
EjercicioArrays01:
Define un array de 12 números enteros con nombre num y asigna los
valores según la tabla que se muestra a continuación.
Posición 0 1 2 3 4 5 6 7 8 9 10 11
Valor 39 -2 0 14 5 120
Muestra el contenido de todos los elementos del array. ¿Qué sucede con
los valores de los elementos que no han sido inicializados?
en una array, los huecos se rellenan con 0 ejemplo
int[] num = new int[12];
num[0] = 39;
num[4] = -2;
num[7] = 0;
num[3] = 14;
num[4] = 5;
[Link]("El array es el siguiente:");
for (int i = 0; i < 10; i++) {
[Link](num[i]);
run
El array es el siguiente:
39
14
0
0
BUILD SUCCESSFUL (total time: 0 seconds)
P:
Ejercicio 3
Escribe un programa que lea 10 números por teclado y que
luego los muestre
en orden inverso, es decir, el primero que se introduce es el
último en mostrarse
y viceversa.
int i=0;
Scanner s = new Scanner([Link]);
int[] num = new int[10];
[Link]("introduce 10 numeros y te los mostrare a la
inversa");
for (i = 0; i < 10; i++) {
[Link]("introduce el nº " + (i + 1) + ": ");
num[i] = [Link]();
i=9;
for (i =9 ; i >=0; i--) {
[Link](" " +num[i]);
Ejercicio 4
Define tres arrays de 20 números enteros cada una, con nombres
numero, cuadrado y cubo. Carga el array numero con valores aleatorios
entre 0 y 100. En el array n cuadrado se deben almacenar los
cuadrados de los valores que hay en el arrayumero. En el array cubo se
deben almacenar los cubos de los valores que hay ennumero. A
continuación, muestra el contenido de los tres arrays dispuesto en tres
columnas.
int[] numero = new int[20];
int[] cuadrado = new int[20];
int[] cubo = new int[20];
int i=0;
int n;
for (i=0;i<20;i++){
n = (int)([Link]()*20);
numero[i]= n;
cubo[i]= n*n*n;
cuadrado[i]=n*n;
[Link]("%10d, %10d, %10d\n", numero[i] , cuadrado[i]
,cubo[i]);
Define tres arrays de 20 números enteros cada una, con nombres
“numero”, “cuadrado” y “cubo”. Carga el array “numero” con valores
aleatorios entre 0 y 100. En el array “cuadrado” se deben almacenar los
cuadrados de los valores que hay en el array “numero”. En el array
“cubo” se deben almacenar los cubos de los valores que hay en
“numero”. A continuación, muestra el contenido de los tres arrays
dispuesto en tres columnas.
int[] numero = new int[20];
int[] cuadrado = new int[20];
int[] cubo = new int[20];
int i;
for (i = 0; i < 20; i++) {
numero[i] = (int)([Link]()*101);
cuadrado[i] = numero[i] * numero[i];
cubo[i] = cuadrado[i] * numero[i];
[Link](" n │ n² │
n³\n──────┼────────┼─────────");
for (i = 0; i < 20; i++) {
[Link]("%4d │ %5d │%8d\n", numero[i], cuadrado[i], cubo[i]);
}
ARRAY BIDIMENSIONAL
Un array bidimensional utiliza dos índices para localizar cada elemento.
Podemos ver este tipo de dato como un array que, a su vez, contiene
otros arrays. También se puede ver como una cuadrícula en la que los
datos quedan distribuidos en filas y columnas.
En el siguiente ejemplo se muestra la definición y el uso de un array de
dos dimensiones.
/**
* @author Luis José Sánchez *
* Ejemplo de uso de arrays bidimensionales */
public class ArrayBi01 { public static void main(String[] args) throws
InterruptedException { // Se añade esta línea para poder usar sleep int[][]
n = new int[3][2]; // array de 3 filas por 2 columnas n[0][0]=20;
n[1][0]=67;
n[1][1]=33;
n[2][1]=7;
int fila, columna;
for(fila = 0; fila < 3; fila++) { [Link]("Fila: " + fila);
for(columna = 0; columna < 2; columna++) { [Link]("%10d ",
n[fila][columna]);
[Link](1000); // retardo de un segundo } [Link]();
}
}
ActividadClaseMinas
Se colocan una mina y un tesoro de forma aleatoria en un cuadrante de
cuatro filas por cinco columnas. El usuario intentará averiguar dónde
está el tesoro.
// se definen constantes para representar el
// contenido de las celdas
final int VACIO = 0;
final int MINA = 1;
final int TESORO = 2;
final int INTENTO = 3;
int x;
int y;
int[][] cuadrante = new int[5][4];
// inicializa el array
for(x = 0; x <= 4; x++) {
for(y = 0; y <= 3; y++) {
cuadrante[x][y] = VACIO;
}
// coloca la mina
int minaX = (int)([Link]() * 5);
int minaY = (int)([Link]() * 4);
cuadrante[minaX][minaY] = MINA;
// coloca el tesoro
int tesoroX;
int tesoroY;
do {
tesoroX = (int)([Link]() * 5);
tesoroY = (int)([Link]() * 4);
} while ((minaX == tesoroX) && (minaY == tesoroY));
cuadrante[tesoroX][tesoroY] = TESORO;
// juego
[Link]("¡BUSCA EL TESORO!");
boolean salir = false;
String c = "";
do {
// pinta el cuadrante
for(y = 3; y >= 0; y--) {
[Link](y + "|");
for(x = 0; x < 5; x++) {
if (cuadrante[x][y] == INTENTO) {
[Link]("X ");
} else {
[Link](" ");
[Link]();
[Link](" ----------\n 0 1 2 3 4\n");
// pide las coordenadas
[Link]("Coordenada x: ");
Scanner s = new Scanner([Link]);
x = [Link]();
[Link]("Coordenada y: ");
y = [Link]();
// mira lo que hay en las coordenadas indicadas por el usuario
switch(cuadrante[x][y]) {
case VACIO:
cuadrante[x][y] = INTENTO;
break;
case MINA:
[Link]("Lo siento, has perdido.");
salir = true;
break;
case TESORO:
[Link]("¡Enhorabuena! ¡Has encontrado el tesoro!");
salir = true;
break;
default:
} while (!salir);
// pinta el cuadrante
for(y = 3; y >= 0; y--) {
[Link](y + " ");
for(x = 0; x < 5; x++) {
switch(cuadrante[x][y]) {
case VACIO:
c = " ";
break;
case MINA:
c = "* ";
break;
case TESORO:
c = "€ ";
break;
case INTENTO:
c = "X ";
break;
default:
[Link](c);
[Link]();
[Link](" ----------\n 0 1 2 3 4\n");
}
Ejercicio 5
Escribe un programa que pida 10 números por teclado y que luego
muestre los
números introducidos junto con las palabras “máximo” y “mínimo” al
lado del máximo y del mínimo respectivamente.
int i=0;
Scanner s = new Scanner([Link]);
int[] num = new int[10];
int maximo=0;
int minimo=1000000000;
[Link]("introduce 10 numeros y te mostrare el maximo y
el minimo");
for (i = 0; i < 10; i++) {
[Link]("introduce el nº " + (i + 1) + ": ");
num[i] = [Link]();
if (num[i]>maximo){
maximo=num[i];}
if (num[i]<minimo){
minimo=num[i];}
i=0;
for (i=0;i<10;i++){
if (num[i]==maximo){
[Link]( num[i]+" maximo ");}
else {
if (num[i]==minimo){
[Link]( num[i]+" minimo ");}
else{
[Link]( num[i]);}
:
COMO ORDENAR UN ARRAY
1,importamos el paquete array list
import [Link];
[Link] el arreglo
String[] productos = new String[7];
productos[0] = "Kingston Pendrive 64GB";
productos[1] = "Samsung Galaxy";
productos[2] = "Disco Duro SSD Samsung Externo";
productos[3] = "Asus Notebook";
productos[4] = "Macbook Air";
productos[5] = "Chromecast 4ta generación";
productos[6] = "Bicicleta Oxford";
3. usamos la calase array list para ordenar el arreglo
[Link](productos);
ejemplo
import [Link];
public class ejemploarreglos4 {
public static void main(String[] args) {
String[] productos = new String[7];
productos[0] = "Kingston Pendrive 64GB";
productos[1] = "Samsung Galaxy";
productos[2] = "Disco Duro SSD Samsung Externo";
productos[3] = "Asus Notebook";
productos[4] = "Macbook Air";
productos[5] = "Chromecast 4ta generación";
productos[6] = "Bicicleta Oxford";
[Link](productos);
for (int i = 0; i<[Link]; i++) {
[Link](productos[i]);
}
}j
EjercicioArray02:
Define un array de 10 caracteres con nombre simbolo y asigna valores a
los elementos según la tabla de abajo. Muestra el contenido de todos
los elementos del array. ¿Qué sucede con los valores de los elementos
que no han sido inicializados?
0-'a' ; 1-'x' ; 4-'@' ; 6-' ' ; 7-'+' ; 8-'Q'
String [] simbolo=new String[9];
simbolo[0] = "a";
simbolo[1] = "x";
simbolo[4] = "@";
simbolo[6] = " ";
simbolo[7] = "+";
simbolo[8] = "q";
int i=0;
for (i=0;i<8;i++){
[Link](simbolo[i]);
}
Escribe un programa que lea 10 números por teclado y que luego los
muestre en orden inverso, es decir, el primero que se introduce es el
último en mostrarse
y viceversa.
int i=0;
Scanner s = new Scanner([Link]);
int[] num = new int[10];
[Link]("introduce 10 numeros y te los mostrare a la
inversa");
for (i = 0; i < 10; i++) {
[Link]("introduce el nº " + (i + 1) + ": ");
num[i] = [Link]();
i=9;
[Link](" los numeros que has introducido al reves son");
for (i =9 ; i >=0; i--) {
[Link](" " +num[i]);
Escribe un programa que pida 20 números enteros. Estos números se
deben introducir en un array de 4 filas por 5 columnas. El programa
mostrará las
sumas parciales de filas y columnas igual que si de una hoja de cálculo
se tratara. La suma total debe aparecer en la esquina inferior derecha.
Scanner s = new Scanner([Link]);
//declaro variables
int[][] num = new int[4][5];
int fila=0;
int columna=0;
int sumafila=0;
int columna5=0;
//usuario introduce los numeros
[Link]("por favor introduzca los numeros enteros en el
array");
for (fila=0;fila<4;fila++){
for ( columna = 0; columna < 5; columna++) {
[Link]("Fila "+fila+" columna "+columna+ ": ");
num[fila][columna] = [Link]();
fila=0;
columna=0;
//ciclo para calular e imprimir resultado de las filas
for (fila=0;fila<4;fila++){
for ( columna = 0; columna < 4; columna++) {
sumafila +=num[fila][columna];
[Link]("%10d",num[fila][columna] );
[Link](" |" );
[Link]("%10d",sumafila );
columna5+=sumafila;
[Link]("");
sumafila=0;
[Link]("-------------------------------------------------------");
//calculo resultado de columnas
int columna1=num[0][0]+num[1][0]+num[2][0]+num[3][0];
int columna2=num[0][1]+num[1][1]+num[2][1]+num[3][1];
int columna3=num[0][2]+num[1][2]+num[2][2]+num[3][2];
int columna4=num[0][3]+num[1][3]+num[2][3]+num[3][3];
//imprimo resultado de columnas
[Link]("%10d %9d %9d%11d|%10d\n", columna1 ,
columna2 ,columna3,columna4,columna5);
:
FUNCIONES
En programación es muy frecuente reutilizar código, es decir, usar
código ya existente. Cuando una parte de un programa requiere una
funcionalidad que ya está implementada en otro programa no tiene
mucho sentido emplear tiempo y energía en implementarla otra vez.
Una función es un trozo de código que realiza una tarea muy concreta y
que se puede incluir en cualquier programa cuando hace falta resolver
esa tarea. Opcionalmente,
las funciones aceptan una entrada (parámetros de entrada) y devuelven
una salida.
Observa el siguiente ejemplo. Se trata de un programa que pide un
número por teclado y luego dice si el número introducido es o no es
primo.
[Link]("Introduzca un número entero positivo: ");
Scanner s = new Scanner ([Link]);
int n = [Link]();
if (esPrimo(n)) {
[Link]("El " + n + " es primo.");
} else {
[Link]("El " + n + " no es primo.");
// Funciones ///////////////////////////////////////////////
/**
* Comprueba si un número entero positivo es primo o no.
* Un número es primo cuando únicamente es divisible entre
* él mismo y la unidad.
* @param x un número entero positivo
* @return <code>true</code> si el número es primo
* @return <code>false</code> en caso contrario
*/
public static boolean esPrimo(int x) {
for (int i = 2; i < x; i++) {
if ((x % i) == 0) {
return false;
return true;
Ejemplo de programa que usa funciones
nt n1,n2,opsuma,opresta,opmult;
float opdiv;
Scanner s= new Scanner ([Link]);
[Link]("INGRESE PRIMER NUMERO ");
n1=[Link]();
[Link]("INGRESE SEGUNDO NUMERO");
n2=[Link]();
// llamamos a 4 funciones que son: suma,rest,mult y div
opsuma= suma (n1,n2);
opresta= resta (n1,n2);
opmult= mult (n1,n2);
opdiv = div (n1,n2);
[Link](" El resultado de la suma es " + opsuma);
[Link](" El resultado de la resta es " + opresta);
[Link](" El resultado de la multiplicacion es " + opmult);
[Link](" El resultado de la division es " + opdiv);
// tambien podemos llamar a una funcion directamente y pasarle los
datos
[Link]("tambien podemos llamar a una funcion
directamente y pasarle los datos suma (1,2) "+ suma (1,2));
// tambien podemos llamar a una funcion varias veces y pasarle los
datos diferentes
[Link]("tambien podemos llamar a una funcion varias
veces y pasarle los datos diferentes de suma (1,2)+ suma (2,3)" +
(suma (1,2)+ suma (2,3)));
// tambien podemos llamar a una funcion varias veces , pasarle los
datos diferentes y combinar varias funciones
[Link](" combinamos dos funciones suma (1,2)+ suma
(2,3)+ resta (8,2) " + (suma (1,2)+ suma (2,3)+ resta (8,2)));
// creasmos la primera funcion , en este caso "suma"
// la sintaxis es : public static [tipo de dato que va a devolver" en este
caso
// int"]+[nombre de la funcion" en este caso suma]+[tipo de dato que
estamos recibiendo,declaramos las variables con las que vamos a
trabajar, pudden tener
// los mismos nombres de las variables que estamos recibiendo(n1 y
n2) o puede teenr otros nombresd de variables (x y)
public static int suma (int a,int b){
// delaramos la variable donde vamos a almacenar el resultado
int suma;
// realizamos la operacion
suma=a+b;
// regresamos el valor de la funcion
return suma;
public static int resta (int c,int d){
int resta;
resta =c-d;
return resta;
public static int mult (int e, int f){
return e*f;
}
public static float div (float h,float i){
float div;
div= h/i;
return div;
}
IMPORTACIÓN DE
PAQUETES
:
PASOS PARA IMPORTAR UN PAQUETE;
1. EL PAQUETE A IMPORTAR DEBE ESTAR EN EL M ISMO PROYECTO
EJEMPLO;
PROYECTO A IMPORTAR;
public class LLENADO {
static int arreglo[];
static Scanner s = new Scanner ([Link]);
public static void llenar(){
[Link]("inngrese la cantidad de datos ");
int cant = [Link]();
arreglo = new int [cant] ;
for (int i=0;i<cant;i++){
arreglo[i]=[Link]();
2 PARA IMPORTAR ESTA CLASE DESDE OTRO PROYECTO DEBO
TOMAR EN CUENTA EL NOMBRE DEL PÀQUETE Y DE LA CLASE, EN
ESTE C ASO ES "LLENADO"
3. EN EL PROYECTO DESTINO, Donde QUIERO IMPORTAR LA CLASE
"LLENADO" DEBO POR LA PALABRA " IMPORT" SEGUIDO DE LA RUTA
DE LA CLASE A IMPORTAR, EN ESTE CASO "import
[Link];" [Link] DE
[Link] DE LA CLASE
4. PARA QUE SE Ejecute EL PAQUETE A IMPORTAR DEBO Escribir EL
NOMBRE DE LA CLASE Qué EN ESTE CASO SERIA" LLENADO" SEGUIDO
DE UN punto Y EL NOMBRE DE LA PUBLIC STATIC VOID QUE EN ESTE
CASO SERIA LLENAR, PARA ESTE EJEMPLO SERIA [Link]();
EN ESA FOTO PODEMOS VER EL LLAMADO A lA EJECUCION DE LA
CLASE IMPORTADA, EN ESTE CASO [Link]();
:
EN ESA FOTO PODEMOS VER EL NOMBRE DE LA
PUBLIC STATIC VOID
QUE SE IMPORTA
ENTONCES ; CODIGO A IMPORTAR;
O CODIGO ORIGEN
‘
package [Link];
import [Link];
/**
*
* @author Circet
*/
public class LLENADO {
static int arreglo[];
static Scanner s = new Scanner ([Link]);
public static void llenar(){
[Link]("inngrese la cantidad de datos
");
int cant = [Link]();
arreglo = new int [cant] ;
for (int i=0;i<cant;i++){
arreglo[i]=[Link]();
CODIGO DESTINO O CODIGO DONDE SE VA A
IMPORTAR LA CLASE
package adivinanumalazar;
import [Link];
import [Link];
* @author Circet
*/
public class Adivinanumalazar {
/
* @param args the command line arguments
*/
public static void main(String[] args) {
[Link]();
int n;
int numero;
int seguir;
int i=4;
Scanner sc = new Scanner([Link]);
n = (int)([Link]()*100);
// [Link](n);
[Link]("Adivina el numero al azar
ENTRE EL 0 Y EL 100, TIENES 5 OPORTUNIDADES");
numero = [Link]();
if (numero==n){
[Link]("HAS ACERTADO..... HAS
ADIVINADO EL NUMERO ...HAS GANADO EL JUEGO");
seguir=2;}
else {for (seguir =1;i!=0;){
[Link]("NO HAS ACERTADO, TE
QUEDA " + i +" intento");
numero = [Link]();
if (numero==n){
[Link]("HAS ACERTADO.....
HAS ADIVINADO EL NUMERO ...HAS GANADO EL
JUEGO");
i=0;}
else {i--;}}
if (numero!=n){
[Link](" HAS AGOTADO LOS
INTENTOS,el numero al azar era el "+n +" EL JUEGO HA
TERMINADO");}}}
MÉTODO EQUALS PARA
COMPARAR DOS OBJETOS
Sintaxis
[Link](" son iguales equals" + (1er objeto
.equals(2 do objeto )) );
Ejemplo:
[Link](" son iguales equals" +
([Link](dos)) ); ejemplo completo
Main: public static void main(String[] args) {
Gato uno= new Gato("pepe","crica","alpiste",12.4);
Gato dos= new Gato("pepe","siames","carne",15.6);
Gato tres = new Gato("pepe","siames");
[Link]();
[Link]();
//[Link]([Link](),[Link]());
[Link](" son iguales equals" +
([Link](dos)) );
Clase Gato
public class Gato {
private String nombre;
private String raza;
private String comida;
private double peso;
public Gato() {
public Gato(String nombre, String raza, String comida,
double peso) {
[Link] = nombre;
[Link] = raza;
[Link] = comida;
[Link] = peso;
}
public Gato(String nombre, String raza) {
[Link] = nombre;
[Link] = raza;
public String getRaza() {
return raza;
public String getComida() {
return comida;
public double getPeso() {
return peso;
}
public void setNombre(String nombre) {
[Link] = nombre;
public void setRaza(String raza) {
[Link] = raza;
public void setComida(String comida) {
[Link] = comida;
public void setPeso(double peso) {
[Link] = peso;
public String getNombre() {
return nombre;
public String duerme(String donde) {
return " el gato" + [Link] + " se acuesta a
dormir" + " en la " + donde;
public String salta(int i) {
String uno= " el gato " + [Link] + " salta" + i + "
metros";
String donde="sillon";
return uno + [Link](donde);
public void Mostrar(){
[Link]("Nombre : " + [Link]());
[Link]("Raza :" + [Link]);
[Link]("Comida :" + [Link]());
[Link]("Peso :" + [Link]);
[Link]("comida :" + [Link]());
return;
@Override
public boolean equals(Object obj) {
Gato a= (Gato) obj;
return ([Link](([Link]())));
public void iguales(String a, String b){
[Link](a==b);
}
En el metodo equals podemos agregar dos líneas de
código; una para comprobar que los datos de uno de los
objetos no sea null y el otro para comprobar que sean
de la misma instancia ejemplo:
@Override
public boolean equals(Object obj) {
if(this == obj){
return true;
if(!(obj instanceof Automovil)){
return false;
Automovil a = (Automovil) obj;
return ([Link] != null && [Link] != null
&& [Link]([Link]())
&& [Link]([Link]()));
CLASES
Clase
Concepto abstracto que denota una serie de cualidades,
por ejemplo coche.
Instancia
Objeto palpable, que se deriva de la concreción de una
clase, por ejemplo mi
coche.
Atributos
Conjunto de características que comparten los objetos
de una clase, por
ejemplo para la clase coche tendríamos matrícula,
marca, modelo, color
y número de plazas.
ejemplo clase:coche instancia: mi coche, el coche del
vecino, el coche de mi espoasa atributos:matricula,
color, marca, modelo. etc
En Java, los nombres de las clases se escriben con la
primera letra en mayúscula
mientras que los nombres de las instancias comienzan
con una letra en minúscula.
Por ejemplo, la clase coche se escribe en Java como
Coche y el objeto “mi coche” se
podría escribir como miCoche.
Definiremos cada clase en un fichero con el mismo
nombre más la extensión .java, por
tanto, la definición de la clase Coche debe estar
contenida en un fichero con nombre
[Link]
Las variables de instancia (atributos) determinan las
cualidades de los
Objetos.
Instancia de una
clase
:
Ejemplo de clase: coche
Ejemplo de objeto: mi coche
Ejemplo atributo o instancia : color de mi
coche, color del coche del vecino año de mi
coche año del coche del vecino etc
sintaxis para declarar objeto
Nombreclase nombreobjeto=new
Nombreclase();
metodos o funciones
9.2 Encapsulamiento
y ocultación
Uno de los pilares en los que se basa la Programación
Orientada a Objetos es el
encapsulamiento. Básicamente, el encapsulamiento
consiste en definir todas las
Programación orientada a objetos 163
propiedades y el comportamiento de una clase dentro
de esa clase; es decir, en la
clase Coche estará definido todo lo concerniente a la
clase Coche y en la clase Libro estará
definido todo lo que tenga que ver con la clase Libro.
La ocultación es una técnica que incorporan algunos
lenguajes (entre ellos Java) que
permite esconder los elementos que definen una clase,
de tal forma que desde otra
clase distinta no se pueden “ver las tripas” de la
primera. La ocultación facilita, como
veremos más adelante, el encapsulamiento.
COMO TRABAJAR CON LA CLASE ENUM
Mediante enum se puede definir un tipo enumerado, de
esta forma un atributo
solo podrá tener uno de los posibles valores que se dan
como opción. Los
valores que se especifican en el tipo enumerado se
suelen escribir con todas
las letras en mayúscula. Basicamente es una
herramienta que permite representar conjuntos de
constantes con un nombre en el lenguaje de
programación.
PASOS:
1. CREAMOS LA CLASE ENUM DEL TIPO ENUM
[Link] EL CONJUNTO DE CONSTANTES
CON SUS VARIABLES
CRICA("africa","antirabia",4),
SIAMES("canada","covid",4),
PERSA("venezuela","zica",3);
private final String origen;
private final String vacuna;
private final int patas;
3. CREAMOS EL CONSTRUCTOR
POR EJEMPLO
Raza(String origen, String vacuna, int patas) {
[Link] = origen;
[Link] = vacuna;
[Link] = patas;
4. CREAMOS LOS METODOS GETTER `PARA CADA
ATRIBUTO
POR EJEMPLO
public String getOrigen() {
return origen;
public String getVacuna() {
return vacuna;
public int getPatas() {
return patas;
}
5. EN LA CLASE DONDE TENEMOS EL CONSTRUCTOR
CREAMOS LA VARIABLE QUE NOS VA A PERMITIR
TRABAJAR CON EL ENUM, EN ESTE CASO LA VARIABLE
SE LLAMA Raza
6-INCLUIMOS LA VARIABLE Raza EN EL CONSTRUCTOR
7. CREAMOS LOS METODOS GETTER Y SETTER
public void setRaza(Raza raza) {
[Link] = raza;
public Raza getRaza() {
return raza;
}
8. EN EL MAIN CREAMOS EL OBJETO DE LA SIGUIENTE
MANERA
Gato dos= new
Gato("pepe",[Link],"siames","carne",15.6);J
9.3 Métodos
Un coche arranca, para, se aparca, hace sonar el claxon,
se puede llevar a reparar…
Un gato puede comer, dormir, maullar, ronronear…
Las acciones asociadas a una clase se llaman métodos.
Estos métodos se definen
dentro del cuerpo de la clase y se suelen colocar a
continuación de los atributos.
Los métodos determinan el comportamiento de los
objetos.
PASOS PARA CREAR
MÉTODO CONSTRUCTOR
[Link] la clase que va a contener nuestro metodo
constructot en este caso caja
2. justo dabajo de "public calass caja" inicializamos las
variables por ejemplo
double ancho;
double alto;
double profundo;
3 .creamos el constructor
public nombre constructor que es el mismo nombre de
la clase(variables con sus tipos separados por coma){
variable del contsructor= variable del objeto
para este ejemplo seria:
public Caja(double a, int b){
this.a = a;
this.b = b;
[Link]("Ejecutando constructor con dos
argumentos");
}
4 a partir de aqui creamos los metodos dentro de la
clase Caja por ejemplo para calcular el volumen de la
caja seria:
public double volumen(){
return [Link] *[Link]*[Link];
5 en el main creamos los objetos uno a uno la sintaxis
seria
nombre del constructor nombre onjeto= new nombre
constructor(variables separadas por coma);
ejemplo
Caja box1=new Caja(11.2,2.3,7.5);
6 para llamar este metodo desde main seria:
[Link]();
o si queremos imprmir el resultado seria:
[Link]( "EL VOLUMNEN DE "+ "box1 " + " es "
+ [Link]());
Ejemplo de todo lo anterior
clase Caja:
public class Caja {
double ancho;
double alto;
double profundo;
public Caja(double a, double b, double c){
[Link] = a;
[Link] = b;
[Link] = c;
public double volumen(){
return [Link] *[Link]*[Link];
}
}
main:
Caja box1=new Caja(11.2,2.3,7.5);
[Link]( "EL VOLUMNEN DE "+ "box1 "
+ " es " + [Link]());
[Link]();
Otro ejemplo
ejemplo pruebagatosimple
main;
package prurebagatosimple;
*
* @author Circet
*/
public class PrurebaGatoSimple {
* @param args the command line arguments
*/
public static void main(String[] args) {
GatoSimple garfield = new GatoSimple("macho");
[Link]("hola gatito");
[Link]();
[Link]("toma tarta");
[Link]("tarta selva negra");
[Link]("toma pescado, a ver si esto te
gusta");
[Link]("pescado");
GatoSimple tom = new GatoSimple("macho");
[Link]("Tom, toma sopita de verduras");
[Link]("sopa de verduras");
GatoSimple lisa = new GatoSimple("hembra");
[Link]("gatitos, a ver cómo maulláis");
[Link]();
[Link]();
[Link]();
[Link](lisa);
[Link](tom);
[Link](garfield);
// TODO code application logic here
ahora la clase
class GatoSimple
package prurebagatosimple;
* @author Circet
*/
class GatoSimple {
// atributos /////////////////////////////
String color, raza, sexo;
int edad;
double peso;
// métodos ///////////////////////////////
// constructor
GatoSimple (String s) {
[Link] = s;
}
// getter
String getSexo() {
return [Link];
* Hace que el gato maulle
*/
void maulla() {
[Link]("Miauuuu");
* Hace que el gato ronronee
*/
void ronronea() {
[Link]("mrrrrrr");
}
* Hace que el gato coma.
* A los gatos les gusta el pescado, si le damos otra
comida
* la rechazará.
* @param comida la comida que se le ofrece al gato
*/
void come(String comida) {
if ([Link]("pescado")) {
[Link]("Hmmmm, gracias");
} else {
[Link]("Lo siento, yo solo como pescado");
/**
* Pone a pelear dos gatos.
* Solo se van a pelear dos machos entre sí.
* @param contrincante es el gato contra el que pelear
*/
void peleaCon(GatoSimple contrincante) {
if ([Link]("hembra")) {
[Link]("no me gusta pelear");
} else {
if ([Link]().equals("hembra")) {
[Link]("no peleo contra gatitas");
} else {
[Link]("ven aquí que te vas a enterar");
}
run;
hola gatito
Miauuuu
toma tarta
Lo siento, yo solo como pescado
toma pescado, a ver si esto te gusta
Hmmmm, gracias
Tom, toma sopita de verduras
Lo siento, yo solo como pescado
gatitos, a ver cómo maulláis
Miauuuu
Miauuuu
Miauuuu
no peleo contra gatitas
no me gusta pelear
ven aquí que te vas a enterar
BUILD SUCCESSFUL (total time: 0 seconds)
Constructor
El método constructor tiene siempre el mismo nombre
que la clase y se utiliza normalmente para inicializar los
atributos.
Los atributos de la clase GatoSimple - color, raza, sexo,
edad y peso - se declaran igual que las variables que
hemos venido usando hasta ahora, pero hay una gran
diferencia entre estos atributos y las variables que
aparecen en el main (programa principal). Una variable
definida en el cuerpo del programa principal es única,
sin embargo cada uno de los objetos que se crean en el
programa principal tienen sus propios atributos; es
decir, si en el programa principal se crean 20 objetos de
la clase GatoSimple, cada uno tiene sus valores para los
atributos color, raza, etc.
Elemplo
nombre del proyecto
videotutorial12
main:
package videotutorial12;
* @author Circet
*/
public class VideoTutorial12 {
/
* @param args the command line arguments
*/
public static void main(String[] args) {
Alumnos alu1= new
Alumnos(12345,"pablo","azcarate");
Alumnos alu2= new
Alumnos(8489459,"yasenia","manosalva");
Alumnos alu3= new
Alumnos(586868,"daniel","gomez");
Alumnos alu4= new
Alumnos(6778788,"yaksiel","contreras");
[Link]();
[Link](" ");
[Link]();
// TODO code application logic here
}
}
clase :
public class Alumnos {
// Atributos
int noControl;
String nombre,apellidos;
//creando metodo constructor
Alumnos (int nC, String nom, String ape){
// inicializando los atributos
/*noControl=nC;
nombre=nom;
apellidos=ape*/
//otra forma
[Link]=nC;
[Link]=nom;
[Link]=ape;
void verDatos (){
[Link]("[Link]; " + noControl);
[Link]("Nombre; " + nombre);
[Link]("Apellidosl; " + apellidos);
:
ejemplo metodo constructor
main
package probandometodoconstructor;
* @author Circet
*/
public class Probandometodoconstructor {
* @param args the command line arguments
*/
public static void main(String[] args) {
//creamos los objetos poniendo en orden las
variables tal cual como lo hicimos en el metodo
constructor
// las variables de tipo string deben ir entre comillas
//podemos crear tanto objetos como querramos
constructor alum1=new
constructor("pablo","azcarate
gomez","masculino",51,82);
constructor alum2=new
constructor("yasenia","manosalva contreras
","femenino",49,60);
constructor alum3=new
constructor("daniel","azcarate
manosalva","masculino",24,90);
constructor alum4=new
constructor("yaksiel","azcarate
manosalva","femenino",7,20);
//creamos los metodos y los llamados a los
metodos de otras clases
// la sintaxis para llamar a metodos de otras clases
es:
//[Link]();
[Link]();
clase;
public class constructor {
// primero declaro las variables
String nombre,apellidos,sexo;
int edad,peso;
//creo el metodo constructor, PUEDE TENER LOS
MISMO NOMBRES DE LA VARIABLES QUE ACABO DE
DECLARAR(nombre,apellidos
//,sexo,edad y peso o puede tener otros nombres en
este caso n equivale a nombre, a equivale a apellido,s
equivale a sexo
//e equivale a edad y p equivale a peso
// sintaxis : nombre de la clase(variables precedidas
del tipo y separadas por coma){
constructor (String n, String a, String s, int e, int p) {
//inicializamos los atributos del contsructor
haciendo referencia a las variablesd que creamos al
pricipio
[Link] = n;
[Link] = a;
[Link] = s;
[Link] = e;
[Link] = p;
// a partir de aqui creamos los metodos
void verDatos (){
[Link]("NOMBRE; " + nombre);
[Link]("APELLIDOS: " + apellidos);
[Link]("SEXO: " + sexo);
[Link]("EDAD: " + edad);
[Link]("PESO: " + peso);
run:
NOMBRE; pablo
APELLIDOS: azcarate gomez
SEXO: masculino
EDAD: 51
PESO: 82
BUILD SUCCESSFUL (total time: 0 seconds)
:
COMO CREAR UNA VARIABLE QUE SE
AUTO INCREMENTE
[Link] LA CLASE DONDE ESTA EL CONTRUCTOR
CREAMO UNA VARIABLE Private Static llamada
ContadorPersonas
2. en el bloque del constructor incrementamos la
variable cada vez que se crea un objeto
sintaxis:
[Link]++;
ejemplo
[Link]++;
public class Persona {
private int idPersona;
private String nombre;
private static int contadorPersonas;
public Persona(String nombre) {
[Link] = nombre;
//Incrementar el contador por cada objeto nuevo
[Link]++;
//Asignar el nuevo valor a la variable idPersona
[Link] = [Link];
ejemplo entero
main
import [Link];
public class Prueba {
private int contador;
public static void main(String[] args) {
Persona persona1 = new Persona("Juan");
Persona persona2 = new Persona("Karla");
imprimir(persona1);
imprimir(persona2);
//[Link] = 10;
public static void imprimir(Persona persona){
[Link]("persona = " + persona);
}
public int getContador(){
imprimir(new Persona("Carlos"));
return [Link];
clase Persona
package domain;
public class Persona {
private int idPersona;
private String nombre;
private static int contadorPersonas;
public Persona(String nombre) {
[Link] = nombre;
//Incrementar el contador por cada objeto nuevo
[Link]++;
//Asignar el nuevo valor a la variable idPersona
[Link] = [Link];
@Override
public String toString() {
return "Persona{" + "idPersona=" + idPersona + ",
nombre=" + nombre + '}';
}
}:
Bloque de inicializacion estatico, se ejecuta una solo
vez, solo cuando se cargar la clase
static{
[Link]("Ejecucion bloque estatico");
++[Link];
//idPersona = 10;
pablo:
static{
[Link]("Ejecucion bloque estatico");
++[Link];
//idPersona = 10;
}
Bloque de inicializacion no
estatico o dinamico se ejecuta
antes de que se llame al
constructor
[Link]("Ejecucion bloque NO estatico");
[Link] = [Link]++;
ejemplo completo
package domain;
public class Persona {
private final int idPersona;
private static int contadorPersonas;
static{
[Link]("Ejecucion bloque estatico");
++[Link];
//idPersona = 10;
[Link]("Ejecucion bloque NO estatico");
[Link] = [Link]++;
public Persona(){
[Link]("Ejecucion del constructor");
}
public int getIdPersona() {
return idPersona;
@Override
public String toString() {
return "Persona{" + "idPersona=" + idPersona + '}';
}h
Métodos getter y
setter
Se trata de métodos muy simples, su cometido es
devolver el valor de un atributo.
Podrían tener cualquier nombre pero en Java es
costumbre llamarlos con la palabra
get (obtener) seguida del nombre del atributo.
ejemplo
int getCapacidad() {
return [Link];
int getContenido() {
return [Link];
}
Ahora estamos ante un setter. Este tipo de métodos
tiene el cometido de establecer
un valor para un determinado atributo. Como puedes
ver, setContenido está formada
por set (asignar) más el nombre del atributo.
Podrías preguntarte: ¿por qué se crea un método getter
para extraer el valor de una
variable y no se accede a la variable directamente?
Parece más lógico hacer esto
[Link]([Link]);
que esto otro
[Link]([Link]());
Sin embargo, en Java se opta casi siempre por esta
última opción. Tiene su explicación
y lo entenderás bien cuando estudies el apartado
Ámbito/visibilidad de los elementos
de una clase - public , protected y private
Probamos, con el siguiente ejemplo, la clase Cubo que
acabamos de definir. Crea tus
propios cubos, pasa agua de unos a otros y observa lo
que se muestra por pantalla.
veamos esto con un ejemplo:
proyecto;videotutorialgetset
main;
package videotutorialgetset;
/
* @author Circet
*/
public class Videotutorialgetset {
* @param args the command line arguments
*/
public static void main(String[] args) {
Alumnos alu1= new
Alumnos(12345,"pablo","azcarate");
Alumnos alu2= new
Alumnos(8489459,"yasenia","manosalva");
Alumnos alu3= new
Alumnos(586868,"daniel","gomez");
Alumnos alu4= new
Alumnos(6778788,"yaksiel","contreras");
[Link]();
[Link](" ");
[Link]();
// LLAMANDO AL METODO GET
[Link]("obteniemdo el nombre de
alumno 1 : "+[Link]());
// asignandole un nombre al que antes era pablo
[Link]("pedro");
[Link]("obteniemdo el nombre de
alumno 1 que antes era pablo : "+[Link]());
[Link]("uzquera");
[Link]();
[Link]();
clase
public class Alumnos {
// Atributos
int noControl;
String nombre,apellidos;
//creando metodo constructor
Alumnos (int nC, String nom, String ape){
// inicializando los atributos
/*noControl=nC;
nombre=nom;
apellidos=ape*/
//otra forma
[Link]=nC;
[Link]=nom;
[Link]=ape;
}
void verDatos (){
[Link]("[Link]; " + noControl);
[Link]("Nombre; " + nombre);
[Link]("Apellidosl; " + apellidos);
// creando los metodos get and set
// get, cuando se usa el metodo get siempre devuelve
un valor
int getControl(){
return [Link];
}
String getnombre(){
return [Link];
String getapellidos(){
return [Link];
// metodo set
void setControl(int NC){
[Link]=NC;
void setnombre(String NOM){
[Link]=NOM;
void setApellidos(String APE){
[Link]=APE;
}}
Ámbito/visibilidad de los
elementos de una clase
- public, protected y private
Al definir los elementos de una clase, se pueden
especificar sus ámbitos (scope)
de visibilidad o accesibilidad con las palabras
reservadas public (público), protected
(protegido) y private (privado).
En la siguiente tabla se muestra desde dónde es
visible/accesible un elemento
(atributo o método) según el modificador que lleve de
los elementos de una clase
- public, protected y private
Al definir los elementos de una clase, se pueden
especificar sus ámbitos (scope)
de visibilidad o accesibilidad con las palabras
reservadas public (público), protected
(protegido) y private (privado).
En la siguiente tabla se muestra desde dónde es
visible/accesible un elemento
(atributo o método) según el modificador que lleve
:
Tipo enumerado
Mediante enum se puede definir un tipo enumerado, de
esta forma un atributo
solo podrá tener uno de los posibles valores que se dan
como opción. Los
valores que se especifican en el tipo enumerado se
suelen escribir con todas
las letras en mayúscula.
/**
* [Link]
* Definición del tipo enumerado Sexo
* @author Luis José Sánchez
*/
public enum Sexo {
MACHO, HEMBRA, HERMAFRODITA
9.5 Herencia
La herencia es una de las características más
importantes de la POO. Si definimos
una serie de atributos y métodos para una clase, al crear
una subclase, todos estos
atributos y métodos siguen siendo válidos.
En el apartado anterior se define la clase Animal. Uno de
los métodos de esta clase es
duerme. A continuación podemos crear las clases Gato
y Perro como subclases de Animal.
De forma automática, se puede utilizar el método
duerme con las instancias de las clases
Gato y Perro ¿no es fantástico?
La clase Ave es subclase de Animal y la clase Pinguino,
a su vez, sería subclase de Ave y
por tanto hereda todos sus atributos y métodos.
Sobrecarga de
métodos
Un método se puede redefinir (volver a definir con el
mismo nombre) en una
subclase.
Polimorfismo
En Programación Orientada a Objetos, se llama
polimorfismo a la capacidad
que tienen los objetos de distinto tipo (de distintas
clases) de responder al
mismo méto
método toString
El método toString() en Java, como su propio nombre
indica, se utiliza para convertir a String (es decir, a una
cadena de texto) cualquier objeto Java. No obstante,
hay varias cosas que tienes que tener en cuenta.
ejemplo
} // metodo toString
public String toString() {
return ("nombre: " + [Link] + "\n" + "apellidos " +
[Link]+"\n" + "sexo " + [Link]+"\n"+ "edad " +
[Link]+"\n"+ "peso "+ [Link]);
//invocando al metodo to String
[Link]("metodo toString");
[Link]([Link]());
[Link]([Link]());
ESTRUCTURAS DE
DATOS
Colecciones: la clase
ArrayList
sintaxis array list
ArraList<TipodeVariablw> nombre de la variable= new
ArrayList<TipodeVariable>();
ejemplo
tipo string
ArrayList<String> a = new ArrayList<String>();
pasos para trabajar con
arraylist
1, creamos la clase del proyecto
por ejemplo
Persona
2. declaramos las variables para el
constructor
por ejemplo
private int num;
private String nombre;
private int edad;
3. creamos constructor vacio
ejemplo
public Persona() {
4. creamos constructor con
parametros
public Persona(int num, String nombre, int edad) {
[Link] = num;
[Link] = nombre;
[Link] = edad;
}
5. a partir de aqui creamos los
metodos en la clase
{
}
6. en el main importamos:
import [Link];
import [Link];
7. declaramos e inicializamos el
arraylist
sintaxis:
ArrayList<nombre constructor> variable = new
ArrayList<>();
si tenemos importados import [Link]; y
import [Link];
`podriamos declararlo asi
List<NombredelConstructor> nombreVariable = new
ArrayList<>();
ejemplo
List<Persona> lista = new ArrayList<Persona>();
8, creamos varios objetos de la lista
//sintaxis nombre de la lista que acabos de crear ,
en este cas [Link] pudde ser add para añadir
//(new nombre constructor (parametrso separados
por coma));
ejemplo
[Link](new Persona(1, "Luisina", 30));
[Link](new Persona(2, "Gabriel", 30));
[Link](new Persona(3, "Ibra", 9));
[Link](new Persona(4, "TodoCode", 2));
9. para recorrer el arraylist hay dos
formas
9.1 con size
//recorido for por índice
for (int i=0; i<[Link](); i++) {
[Link]("Prueba: " +
[Link](i).getNombre());
9.2 con for each
for (Persona persona:lista) {
[Link]("prueba " +
[Link]());
10. para saber el tamaño del array
list
sintaxis
[Link]([Link]());
ejemplo
[Link]([Link]());
11. puedo añadir un objeto a ls lista
mediante el metodo add
Persona pablo= new Persona(2,"loro", 4);
[Link](pablo);
sintaxis
nombre [Link](variable a agregar);
12, tambien podemos añadir
elementos a la lista en una posicion
determinada de la siguiente forma
[Link](new Persona(1,"jose,2));
sintaxis [Link](new nombre
constructor(atributos separados por comas));
13. para borrar la lista
nombre [Link]();
ejemplo
[Link]();
14, para remover un elemento en concreto
de la lista
[Link](0);
sintaxis
nombre [Link](posicion del
registro a borrar):;
14.1 tambien se puede hacer un borrado
selectivo si los elementos de una
//lista cumplen una determinada condición. Por
ejemplo, podemos eliminar todos las
//palabras que contienen la letra “a”. [Link](palabra
-> [Link]("a")); sintaxis: nombre array
[Link] If(palabra->contains(nombre de lo que
queremos borrar en el array list));
15,para imprimir la posicion de un
objeto
[Link]([Link](pablo));
15,. para cambiar de posicion un objeto
[Link](2, pablo);
sintaxis
nombre [Link](posicion destino,objeto a mover);
ejem
codigo de ejemplo
main
//creamos el arraylist que se llasms lista donde vamos
a poder guardar datos
List<Persona> lista = new ArrayList<>();
//creamos varios objertos de la lista
//sintaxis nombre de la lista que acabos de crear ,
en este cas [Link] pudde ser add para añadir
//(new nombre constructor (parametrso separados
por coma));
//
[Link](new Persona(1, "Luisina", 30));
[Link](new Persona(2, "Gabriel", 30));
[Link](new Persona(3, "Ibra", 9));
[Link](new Persona(4, "TodoCode", 2));
[Link](new Persona(7, "pablo", 6));
[Link](new Persona(7, "yasenia", 7));
// creamos objeto pablo
Persona pablo= new Persona(2,"loro", 4);
[Link]("------PRUEBA FOR
COMÚN--------");
//recorido for por índice
for (int i=0; i<[Link](); i++) {
[Link]("Prueba: " +
[Link](i).getNombre());
//puedo añadir un objeto a ls lista mediante el
metodo add
[Link](pablo);
//tambien podemos añadir elementos a la lista de
la siguiente forma
[Link](new Persona(1,"jose",2));
// para obtener un elemento en conccreto de la lista
[Link]( "para obtener un elemento en
conccreto de la lista" + [Link](2));
// para borrar la lista completa
// [Link]();
// para remover un elemnto en concreto de la lista
[Link](0);
// nos imprime la posicion de un objeto
[Link]([Link](pablo));
// cambiamos de posicion a pablo
[Link](2, pablo);
[Link]([Link](pablo));
[Link]("------PRUEBA FOREACH--------");
//recorrido por foreach
for (Persona persona:lista) {
[Link]("prueba " +
[Link]());
}
[Link]("nueva");
[Link]([Link]());
//Suscribite a [Link]/TodoCode
//Visitá la TodoCode Academy y enterate de nuestros
cursos 100% gratuitos y con CERTIFICADO:
//[Link]
clase
public class Persona {
//declaramos las variables para el constructor
private int num;
private String nombre;
private int edad;
// creamos constructor vacio
public Persona() {
// creamos constructor con parametros
public Persona(int num, String nombre, int edad) {
[Link] = num;
[Link] = nombre;
[Link] = edad;
// a partir de aqui creamos los metodos en la clase
public int getNum() {
return num;
}
public void setNum(int num) {
[Link] = num;
public String getNombre() {
return nombre;
public void setNombre(String nombre) {
[Link] = nombre;
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
[Link] = edad;
}
Principales métodos de
ArrayList
Las operaciones más comunes que se pueden realizar
con un objeto de la clase
ArrayList son las siguientes:
add(elemento)
Añade un elemento al final de la lista.
Colecciones y diccionarios 209
add(indice, elemento)
Inserta un elemento en una posición determinada,
desplazando el resto de
elementos hacia la derecha.
clear()
Elimina todos los elementos pero no borra la lista.
contains(elemento)
Devuelve true si la lista contiene el elemento que se
especifica y false en caso
contrario.
get(indice)
Devuelve el elemento de la posición que se indica entre
paréntesis.
indexOf(elemento)
Devuelve la posición de la primera ocurrencia del
elemento que se indica entre
paréntesis.
isEmpty()
Devuelve true si la lista está vacía y false en caso de
tener algún elemento.
remove(indice)
Elimina el elemento que se encuentra en una posición
determinada.
remove(elemento)
Elimina la primera ocurrencia de un elemento.
removeIf(filtro)
Elimina los elementos que cumplen una determinada
condición.
set(indice, elemento)
Machaca el elemento que se encuentra en una
determinada posición con el
elemento que se pasa como parámetro.
size()
Devuelve el tamaño (número de elementos) de la lista.
toArray()
Devuelve un array con todos y cada uno de los
elementos que contiene la lista.
16. puedo imprimir una posicion de la
lista
[Link]("El elemento que hay en la posición 3
es " + [Link](3));
sintaxis
nombre array [Link](posicion);
17: para remover un elemnto del
array list
17.1nombre array [Link](2) elimina el elemento
que se
encuentra en la posición 2
17.2 nombre array list .remove("blanco") elimina el valor
"blanco".
18. para saber si un elemnto esta en
la lista:
if ([Link]("blanco")) {
[Link]("El blanco está en la lista de
colores");
sintaxis
if(nombre del array [Link](nombre
elemento a buscar)){ }
como ordenar un array list
1. en la clase, debe estar incluido la
palabra implements comparable, la
sintanxis seria:
public casss nombre de la clase implements
Comparable<nombre de la clase> para la clase Gato
seria:
public class Gato implements Comparable<Gato>
2. a continiacion declaramos el metodo
constructor
public class Gato implements Comparable<Gato> {
private String nombre;
private String color;
private String raza;
public Gato(String nombre, String color, String raza) {
[Link] = nombre;
[Link] = color;
[Link] = raza;
3. de seguido los métods get y set
public String getNombre() {
return nombre;
public String getRaza() {
return raza;
}
public String toString() {
return "Nombre: " + [Link] + "\nColor: " + [Link]
+ "\nRaza: " + [Link];
3. a continuacion implementamos el
metodo de comparacion
la sintaxis seria:
public int compareTo(nombre metodo
constructor y variable, en este caso g) {
return ([Link] por el cual queremos
ordenar).compareTo([Link] funcion de get del
parametro que queremos comparar());
}
public boolean equals(nombre metodo
constructor y variable, en este caso g g) {
return ([Link] por el cual queremos
ordena).equals([Link] funcion de get del
parametro que queremos compara());
}
}
ejemplo
public int compareTo(Persona g) {
return ([Link]).compareTo([Link]());
public boolean equals(Persona g) {
return ([Link]).equals([Link]());
4. en el main ordenamos la
comparacion con la siguiente
sintaxis
[Link](nombre array list);
ejemplo
[Link](lista);
HASHMAP
COLECCION HASH MAP
PASOS PARA TRABAJAR CON HASH MAP
1. IMPORTAMOS
import [Link].*;
2. CREAMOS EL OBJETO TIPO HASHMAP CON EL QUE
VAMOS A TRABAJAR
SINTAXIS
Map NombreHashMap = new HashMap();
ejemplo:
Map miMapa = new HashMap();
3. UTILIZAMOS LE METODO PUT PARA AGREGAR
ELEMENTOS A NUESTRO MAPA
AGREGAMOS UNA LLAVE Y ASOCIAMOS UN VALOR A
DICHA LLAVE
SINTAXIS
[Link]("llave(puede ser tipo string u
object", "valor");
ejemplo
[Link]("valor1", "Juan");
4. PARA IMPRIMIR UN VALOR ESPECIFICO USAMOS EL
METODO GET Y PROPORCIONAMOS LA LLAVE DEL
VALOR AL CUAL QUEREMOS ACCEDER
SINTAXIS
String Variable = (String) [Link]("llave a
la que queremos acceder ");
ejemplo
String elemento = (String) [Link]("valor1");
[Link]("elemento = " + elemento);
porque usamos (String)?
debido a que miMapa es un objeto tenemos que usar un
casting para poder asignar este objeto a la variable
elemento que es de tipo string
5. PARA IMPRIMIR TODO EL CONTENIDO DE NUESTRO
MAPA:
imprimir([Link]());
imprimir([Link]());
public static void imprimir(Collection coleccion) {
[Link](elemento -> {
[Link]("elemento = " + elemento);
});
ejemplo completo
import [Link].*;
public class TestColecciones {
public static void main(String[] args) {
List miLista = new ArrayList();
[Link]("Lunes");
[Link]("Martes");
[Link]("Miercoles");
[Link]("Jueves");
[Link]("Viernes");
[Link]("Viernes");
// imprimir(miLista);
Set miSet = new HashSet();
[Link]("Lunes");
[Link]("Martes");
[Link]("Miercoles");
[Link]("Jueves");
[Link]("Viernes");
[Link]("Viernes");
// imprimir(miSet);
Map miMapa = new HashMap();
[Link]("valor1", "Juan");
[Link]("valor2", "Karla");
[Link]("valor3", "Rosario");
String elemento = (String) [Link]("valor1");
//[Link]("elemento = " + elemento);
imprimir([Link]());
imprimir([Link]());
}
EJEMPLO CPOMO ORDENAR UN
HASHMAP POR KEY Y POR VALOR
import [Link];
import [Link];
import [Link];
import [Link];
public class Prueba {
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>();
[Link](2, 1020);
[Link](3, 300);
[Link](1, 100);
[Link](5, 500);
[Link]("IMPRIMIMOS ORDENAOS POR
KEY");
[Link]((k,v)->[Link](k+"="+v));
[Link]("IMPRIMIMOS AHORA
ORDENADOS POR VALOR");
List<[Link]<Integer, Integer>> list = new
ArrayList<>([Link]());
[Link]([Link]());
[Link]([Link]::println);
}
COMO TRABAJAR CON
ARCHIVOS DE TEXTO
pasos para crear una cadena para leer un
archivo de texto
[Link] el main e importar
import [Link];
import [Link];
import [Link];
import [Link];
2. Todas las operaciones que se
realicen sobre ficheros deberán estar
incluidas en un
bloque try-catch.
Esto nos permitirá mostrar mensajes de error y terminar
el programa
de una forma ordenada en caso de que se produzca
algún fallo - el fichero no existe,
no tenemos permiso para acceder a él, etc.
El bloque try-catch tiene el siguiente formato:
try {
Operaciones_con_fichero
} catch (tipo_de_error nombre_de_variable) {
Mensaje_de_error
}
[Link] para leer como para escribir
utilizamos lo que en programación se
llama un
“manejador de fichero”.
Es algo así como una variable que hace referencia al
fichero
con el que queremos trabajar.
En nuestro ejemplo, el manejador de fichero se llama br
y se crea de la siguiente
manera:
BufferedReader bf = new BufferedReader(new
FileReader("[Link]"));
4. crear una variable que nos va a
indicar cuando ya no halla mas lineas
que mostrar, en este caso
//la variable se llama linea
String linea = " ";
5. creamos un ciclo while
para que nos imprima el archivo por pantalla
//, mientras no halla lineas vacias va a seguir
imprimiendo por pantalla
while (linea != null) {
[Link](linea);
linea = [Link]();
[Link] fichero se va a ir leyendo línea a
línea mediante [Link]()
hasta que se
//acaban las líneas. Cuando no quedan más líneas por
leer se devuelve el valor null.
linea = [Link]();
7. cerramos el fichero con el
comando [Link]();Es
importante “cerrar el fichero”
cuando se han realizado
todas las operaciones
//necesarias sobre él. En este ejemplo, esta acción se
ha llevado a cabo con la sentencia
//[Link]().
8. creamos una linea en caso de que
no se encuentre el fichero o tenga
error de lectura
} catch (FileNotFoundException fnfe) {
[Link]("No se encuentra el fichero
[Link]");
// qué hacer si hay un error en la lectura del fichero
} catch (IOException ioe) {
[Link]("No se puede leer el fichero
[Link]");
fin
ejemplo
package comoleerarchivodetexto;
//1. importamos los siguiente metodos
import [Link];
import [Link];
import [Link];
import [Link];
public class Comoleerarchivodetexto {
public static void main(String[] args) {
//2. Todas las operaciones que se realicen sobre
ficheros deberán estar incluidas en un
//bloque try-catch. Esto nos permitirá mostrar mensajes
de error y terminar el programa
//de una forma ordenada en caso de que se produzca
algún fallo - el fichero no existe,
//no tenemos permiso para acceder a él, etc.
//El bloque try-catch tiene el siguiente formato:
//try {
//Operaciones_con_fichero
//} catch (tipo_de_error nombre_de_variable) {
//Mensaje_de_error
//}
try {
//3. Tanto para leer como para escribir utilizamos lo
que en programación se llama un
//“manejador de fichero”. Es algo así como una variable
que hace referencia al fichero
//con el que queremos trabajar.
//En nuestro ejemplo, el manejador de fichero se llama
br y se crea de la siguiente
//manera:
//BufferedReader bf = new BufferedReader(new
FileReader("[Link]"));
BufferedReader br = new BufferedReader(new
FileReader("[Link]"));
// 4. crear una variable que nos va a indicar cuando ya
no halla mas lineas que mostrar, en este caso
//la variable se llama linea
String linea = " ";
// 5. creamos un ciclo while para que nos imprima el
archivo por pantalla
//, mientras no halla lineas vacias va a seguir
imprimiendo por pantalla
while (linea != null) {
[Link](linea);
//[Link] fichero se va a ir leyendo línea a línea mediante
[Link]() hasta que se
//acaban las líneas. Cuando no quedan más líneas por
leer se devuelve el valor null.
linea = [Link]();
//7. cerramos el fichero con el comando [Link]();Es
importante “cerrar el fichero” cuando se han realizado
todas las operaciones
//necesarias sobre él. En este ejemplo, esta acción se
ha llevado a cabo con la sentencia
//[Link]().
[Link]();
// 8. creamos una linea en caso de que no se encuentre
el fichero o tenga error de lectura
} catch (FileNotFoundException fnfe) {
[Link]("No se encuentra el fichero
[Link]");
// qué hacer si hay un error en la lectura del fichero
} catch (IOException ioe) {
[Link]("No se puede leer el fichero
[Link]");
como hacer operaciones
aritmeticas leyendo los
datos de un archivo de
texto
1. solicitamos el nombre del archivo
con el que vamos a trabajar
Scanner sc = new Scanner([Link]);
String nombreFichero = [Link]();
2. Todas las operaciones que se
realicen sobre ficheros deberán estar
incluidas en un//bloque try-catch.
Esto nos permitirá mostrar mensajes de error y terminar
el programa
//de una forma ordenada en caso de que se produzca
algún fallo - el fichero no existe,
//no tenemos permiso para acceder a él, etc.
//El bloque try-catch tiene el siguiente formato:
//try {
//Operaciones_con_fichero
//} catch (tipo_de_error nombre_de_variable) {
//Mensaje_de_error
//}
ejemplo
try {
BufferedReader br = new BufferedReader(new
FileReader(nombreFichero));
String linea = "0";
int i = 0;
double suma = 0;
while (linea != null) {
i++;
suma += [Link](linea);
linea = [Link]();
3 cerramos el fichero con el comando
[Link]();
Es importante “cerrar el fichero” cuando se han
realizado todas las operaciones
//necesarias sobre él. En este ejemplo, esta acción se
ha llevado a cabo con la sentencia
//[Link]().
4.. creamos una linea en caso de que
no se encuentre el fichero o tenga
error de lectura
} catch (FileNotFoundException fnfe) { // qué hacer si no
se encuentra el fichero
[Link]("No se encuentra el fichero " +
nombreFichero);
} catch (IOException ioe) { // qué hacer si hay un error
en la lectura del fichero
[Link]("No se puede leer el fichero " +
nombreFichero);
ejemplo De todo lo anterior :
package
comoleerarchivodetextoyhaceroperacionesconsuconten
ido;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
* @author Circet
*/
public class
ComoLeerarchivoDetextoYhacerOperacionesConsuCont
enido {
* @param args the command line arguments
*/
public static void main(String[] args) {
[Link]("Introduzca el nombre del archivo
donde se encuentran los números: ");
// 1. solicitamos el nombre del archivo con el que
vamos a trabajar
Scanner sc = new Scanner([Link]);
String nombreFichero = [Link]();
//2. Todas las operaciones que se realicen sobre
ficheros deberán estar incluidas en un
//bloque try-catch. Esto nos permitirá mostrar mensajes
de error y terminar el programa
//de una forma ordenada en caso de que se produzca
algún fallo - el fichero no existe,
//no tenemos permiso para acceder a él, etc.
//El bloque try-catch tiene el siguiente formato:
//try {
//Operaciones_con_fichero
//} catch (tipo_de_error nombre_de_variable) {
//Mensaje_de_error
//}
try {
//3. Tanto para leer como para escribir
utilizamos lo que en programación se llama un
//“manejador de fichero”. Es algo así como una variable
que hace referencia al fichero
//con el que queremos trabajar.
//En nuestro ejemplo, el manejador de fichero es la
variable que creamos para la introduccion del nombre
//del archivo con el que vamos a trabajar
//BufferedReader br = new BufferedReader(new
FileReader(nombreFichero));
BufferedReader br = new BufferedReader(new
FileReader(nombreFichero));
// 4. crear una variable que nos va a indicar cuando ya
no halla mas lineas que mostrar, en este caso
//la variable se llama linea
String linea = "0";
int i = 0;
// 5. creamos la variable que va a almacenar los datos
numericos, en este caso es la variable suma
double suma = 0;
// 5. creamos un ciclo while para que nos imprima el
archivo por pantalla
//, mientras no halla lineas vacias va a seguir
imprimiendo por pantalla
while (linea != null) {
i++;
//[Link] fichero se va a ir leyendo línea a línea mediante
[Link]() hasta que se
//acaban las líneas. Cuando no quedan más líneas por
leer se devuelve el valor null.
suma += [Link](linea);
linea = [Link]();
i--;
//7. cerramos el fichero con el comando [Link]();Es
importante “cerrar el fichero” cuando se han realizado
todas las operaciones
//necesarias sobre él. En este ejemplo, esta acción se
ha llevado a cabo con la sentencia
//[Link]().
[Link]();
[Link]("La suma es " + suma);
[Link]("La media es " + suma / (double)i);
// 8. creamos una linea en caso de que no se encuentre
el fichero o tenga error de lectura
} catch (FileNotFoundException fnfe) { // qué hacer si no
se encuentra el fichero
[Link]("No se encuentra el fichero " +
nombreFichero);
} catch (IOException ioe) { // qué hacer si hay un error
en la lectura del fichero
[Link]("No se puede leer el fichero " +
nombreFichero);
}
como crear un archivo de
texto
1. importamos los paquetes:
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
2. Todas las operaciones que se
realicen sobre ficheros deberán estar
incluidas en un bloque try-catch. Esto
nos permitirá mostrar mensajes de error y terminar el
programa
//de una forma ordenada en caso de que se produzca
algún fallo - el fichero no existe,
//no tenemos permiso para acceder a él, etc.
//El bloque try-catch tiene el siguiente formato:
//try {
//Operaciones_con_fichero
//} catch (tipo_de_error nombre_de_variable)
3. Tanto para leer como para escribir
utilizamos lo que en programación se
llama un
//“manejador de fichero”. Es algo así como una variable
que hace referencia al fichero
//con el que queremos trabajar.
//En nuestro ejemplo, el manejador de fichero se llama
br y se crea de la siguiente
//manera:
//BufferedReader bf = new BufferedReader(new
FileReader("[Link]"));
//4. mediante el comando [Link]
para escribir el texto que va a contener
nuestro archivo
sintaxis [Link]("texto a
escribir");
ejemplo
[Link]("naranja\n");
[Link]("mango\n");
[Link]("chirimoya\n");
[Link]("platano");
Ejemplo de todo lo anterior
// 1. importamos los paquetes:
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
* @author Circet
*/
public class ComocrearUnarcxhivoDEtexto {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// 2. Todas las operaciones que se realicen sobre
ficheros deberán estar incluidas en un
//bloque try-catch. Esto nos permitirá mostrar mensajes
de error y terminar el programa
//de una forma ordenada en caso de que se produzca
algún fallo - el fichero no existe,
//no tenemos permiso para acceder a él, etc.
//El bloque try-catch tiene el siguiente formato:
//try {
//Operaciones_con_fichero
//} catch (tipo_de_error nombre_de_variable)
try {
//3. Tanto para leer como para escribir utilizamos lo
que en programación se llama un
//“manejador de fichero”. Es algo así como una variable
que hace referencia al fichero
//con el que queremos trabajar.
//En nuestro ejemplo, el manejador de fichero se llama
br y se crea de la siguiente
//manera:
//BufferedReader bf = new BufferedReader(new
FileReader("[Link]"));
BufferedWriter bw = new BufferedWriter(new
FileWriter("[Link]"));
//4. mediante el comando [Link] para escribir el texto
que va a contener nuestro archivo
//sintaxis [Link]("texto a escribir");
[Link]("naranja\n");
[Link]("mango\n");
[Link]("chirimoya\n");
[Link]("platano");
//5 cerramos el fichero con el
comando [Link]();Es importante “cerrar el
fichero” cuando se han realizado todas las operaciones
//necesarias sobre él. En este ejemplo, esta acción se
ha llevado a cabo con la sentencia
//[Link]().
[Link]();
//4.. creamos una linea en caso de que
no se encuentre el fichero o tenga
error de lectura
//} catch (FileNotFoundException fnfe) { // qué hacer si
no se encuentra el fichero
//[Link]("No se encuentra el fichero " +
nombreFichero);
//} catch (IOException ioe) { // qué hacer si hay un error
en la lectura del fichero
//[Link]("No se puede leer el fichero " +
nombreFichero);
//}
} catch (IOException ioe) {
[Link]("No se ha podido escribir en el
fichero");
}
Diccionarios: la clase
HashMap
Imagina un diccionario inglés-español. Queremos saber
qué significa la palabra “stiff”.
Sabemos que en el diccionario hay muchas entradas y
en cada entrada tenemos una
palabra en inglés y su correspondiente traducción al
español. Buscando por la “s”
encontramos que “stiff” significa “agujetas”.
Un diccionario en Java funciona exactamente igual.
Contiene una serie de elementos
que son las entradas que a su vez están formadas por
un par (clave, valor). La clave
(key) permite acceder al valor. No puede haber claves
duplicadas. En el ejemplo
anterior, la clave sería “stiff” y el valor “agujetas”.
Java dispone de varios tipos de diccionarios: HashMap,
EnumMap, Hashtable, IdentityHashMap,
LinkedHashMap, etc. Nosotros estudiaremos el
diccionario HashMap.
Principales métodos de HashMap
Algunos de los métodos más importantes de la clase
HashMap son:
get(clave)
Obtiene el valor correspondiente a una clave. Devuelve
null si no existe esa clave
en el diccionario.
put(clave, valor)
Añade un par (clave, valor) al diccionario. Si ya había un
valor para esa clave, se
machaca.
keySet()
Devuelve un conjunto (set) con todas las claves.
values()
Devuelve una colección con todos los valores (los
valores pueden estar duplicados
a diferencia de las claves).
entrySet()
Devuelve una colección con todos los pares (clave,
valor).
containsKey(clave)
Devuelve true si el diccionario contiene la clave indicada
y false en caso contrario.
getKey()
Devuelve la clave de la entrada. Se aplica a una sola
entrada del diccionario (no
al diccionario completo), es decir a una pareja (clave,
valor).
pasos:
[Link] que importar el paquete import
[Link];
2. la sintaxis para crear el diccionario es:
HashMap <tipos de variables separadas por coma>
nombre del diccionario = new HashMap <tipos de
variables separadas por coma> ();
ejemplo: HashMap<Integer, String> m = new
HashMap<Integer, String>(); donde m es el nombre del
diccionario
principales metodos y su usos
1. put(clave, valor)
Añade un par (clave, valor) al diccionario. Si ya había un
valor para esa clave, se
machaca
ejemplo
[Link](924, "Amalia Núñez");
2. get(clave)
Obtiene el valor correspondiente a una clave. Devuelve
null si no existe esa clave
en el diccionario.
ejemplo;
[Link]("el usuario 924 es : " + [Link](924));
3 keySet()Devuelve un conjunto (set) con
todas las claves.
ejemplo
[Link]( [Link]());
4 values()Devuelve una colección con
todos los valores (los valores pueden
estar duplicados
a diferencia de las claves).
ejemplo
[Link]( + [Link]());
5: entrySet()Devuelve una colección con
todos los pares (clave, valor).
ejemplo
[Link]( [Link]());
6: containsKey(clave)Devuelve true si el
diccionario contiene la clave indicada y
false en caso contrario
ejemplo
[Link]( [Link](605));
ejemplo de todo lo anterior
//[Link] que importar el paquete import
[Link];
//
//2. la sintaxis para crear el diccionario es:
// HashMap <tipos de variables separadas por
coma> nombre del diccionario = new HashMap <tipos
de variables separadas por coma> ();
HashMap<Integer, String> m = new
HashMap<Integer, String>();
// principales metodos
// 1. put(clave, valor)
//Añade un par (clave, valor) al diccionario. Si ya había
un valor para esa clave, se
//machaca
[Link](924, "Amalia Núñez");
[Link](921, "Cindy Nero");
[Link](700, "César Vázquez");
[Link](219, "Víctor Tilla");
[Link](537, "Alan Brito");
[Link](605, "Esteban Quito ");
// de esta manera impriminos todo el contenido del
diccionario
[Link]("Los elementos de m son: \n" + m);
//2. get(clave)
//Obtiene el valor correspondiente a una clave. Devuelve
null si no existe esa clave
//en el diccionario.
[Link]("el usuario 924 es : " + [Link](924));
// de esta manera recorremos todo el contenido e
imprimos la clave de cada valor
[Link](" recorremos con un ciclo for e
imprimimos la clave de cada entrada " );
for ([Link] pareja: [Link]()) {
[Link]([Link]());
// 3 keySet()Devuelve un conjunto (set) con todas las
claves.
[Link]( [Link]());
// 4 values()Devuelve una colección con todos los
valores (los valores pueden estar duplicados
//a diferencia de las claves).
[Link]( [Link]());
// 5: entrySet()Devuelve una colección con todos los
pares (clave, valor).
[Link]( [Link]());
// 6: containsKey(clave)Devuelve true si el diccionario
contiene la clave indicada y false en caso contrario
[Link]( [Link](605));
7: como imprimir clave y contenido de
manera ordenada
[Link]("Código\tNombre\n------\t-------------");
for ([Link] pareja: [Link]()) {
[Link]([Link]() + "\t");
[Link]([Link]());
8:como verificar si un codigo de usuario
existe:
HashMap<Integer, String> m = new HashMap<Integer,
String>();
[Link](924, "Amalia Núñez");
[Link](921, "Cindy Nero");
[Link](700, "César Vázquez");
[Link](219, "Víctor Tilla");
[Link](537, "Alan Brito");
[Link](605, "Esteban Quito ");
[Link]("Por favor, introduzca un código: ");
Scanner sc = new Scanner([Link]);
int codigoIntroducido = [Link]();
if ([Link](codigoIntroducido)) {
[Link]("El código " + codigoIntroducido + "
corresponde a ");
[Link]([Link](codigoIntroducido));
} else {
[Link]("El código introducido no existe.");
}
12. Aplicaciones web en Java
(JSP)
En este capítulo vamos a aprender cómo utilizar
páginas web como interfaz para
programas en Java. Usaremos JSP (JavaServer Pages)
que nos permitirá mezclar código
en Java con código HTML. El código en Java que
utilizaremos será muy parecido al
que hemos venido utilizando hasta ahora. Cambiará
únicamente lo relativo a mostrar
información por pantalla (ahora se volcará todo a
HTML) y la manera en que se
introducen los datos, que se realizará mediante
formularios.
12.1 Hola Mundo en JSP
Para desarrollar aplicaciones en JSP utilizaremos el
entorno de desarrollo Netbeans.
Este IDE se puede descargar de forma gratuita en
[Link] 4
Sigue estos pasos para crear una aplicación en JSP con
Netbeans:
• En el menú principal, selecciona Archivo y a
continuación Nuevo Proyecto. Se
puede hacer más rápido con la combinación Control +
Mayúscula + N.
• Aparecerá una ventana emergente para elegir el tipo
de proyecto. Selecciona
Java Web en el apartado “Categorías” y Aplicación Web
en el apartado
“Proyectos”. Haz clic en Siguiente.
• Ahora hay que darle el nombre al proyecto, lo puedes
llamar por ejemplo
Saludo1. Recuerda no utilizar caracteres especiales ni
signos de puntuación. Se
creará una carpeta con el mismo nombre que el
proyecto que contendrá todos
los ficheros necesarios. Haz clic en Siguiente.
• En la siguiente ventana tendrás que elegir el servidor,
la versión de Java y la
ruta. Elige Glass Fish Server. En caso de no haber
ningún servidor disponible,
Netbeans permite añadir uno sobre la marcha (se lo
descarga y lo instala). Haz
clic en Finalizar.
A la izquierda, en la ventana de proyectos, debe
aparecer el que acabas de crear:
Saludo1. Navegando por la estructura del proyecto,
verás que hay una carpeta con
nombre Web Pages; en esta carpeta se deberán guardar
los archivos correspondientes a la aplicación: archivos
jsp, html, css, imágenes, archivos de audio, etc. Para
que
los archivos estén ordenados, se pueden organizar, a su
vez, en subcarpetas dentro
de Web Pages.
Por defecto, cuando se crea un proyecto JSP, se crea el
archivo [Link]. Elimina este
archivo de tu proyecto y luego crea [Link] haciendo
clic con el botón derecho en
Web Pages → Nuevo → JSP. Al indicar el nombre no
hay que poner la extensión.
Ya tienes un “Hola Mundo” en inglés. Si lo quieres en
español solo tienes que cambiar
“Hello World” por “Hola Mundo”, con lo que la aplicación
quedaría como sigue:
<%-- [Link] --%>
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
</head>
<body>
<h1>¡Hola Mundo!</h1>
En esta página se usa únicamente HTML.
</body
</html>
De momento, solo hemos visto código HTML ¿dónde
está Java? Bien, vamos a verlo,
pero antes hay entender bien cómo funciona JSP.
Una aplicación JSP consistirá en una o varias páginas
web que normalmente contendrá
código HTML y que llevarán “insertado” código en Java.
Este código en Java puede
colocarse en cualquier parte del archivo y se delimita
mediante las etiquetas <% y %>.
Cuando se pulsa F6 para ejecutar la aplicación sucede
lo siguiente:
1. Todo el código (tanto HTML como JAVA) se envía al
servidor (Glass Fish o Apache
Tomcat por ejemplo).
2. El servidor deja intacto el código HTML y compila y
ejecuta el código en Java.
Generalmente el código Java genera código HTML
mediante las instrucciones
[Link] y [Link].
3. Por último, todo el código (ya solo queda HTML) se
envía al navegador que es el
que muestra la página. Recuerda que el navegador no
entiende Java (entiende
Javascript que es otro lenguaje diferente) y es
imprescindible que todo el código
Java haya sido traducido previamente.
12.2 Mezclando Java con HTML
A continuación se muestra un ejemplo que sí tiene Java.
Como ves, el código Java está
delimitado por los caracteres <% y %>.
<%-- [Link] --%>
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
</head>
<body>
<% [Link]("<h1>¡Hola Mundo!</h1>"); %>
</body>
</html>
Mediante Java, se puede generar cualquier contenido
HTML, por ejemplo para modificar estilos, crear tablas,
mostrar imágenes, etc. Trabajando en consola, lo que se
incluye en un print es exactamente lo que se muestra
por pantalla. Ahora, con JSP, lo
que se incluye dentro del print es “renderizado” a
posteriori por el navegador. En el
siguiente ejemplo se puede ver claramente este
comportamiento.
ejemplo
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
</head>
<body>
<h1>¡Hola Caracola!</h1>
<%= "<b><i>" %>
Esta línea se ha puesto en negrita y cursiva mediante
Java.
<%= "</i></b>" %>
</body>
</html>
En el código Java que se inserta en las aplicaciones JSP
se pueden utilizar todos los
elemento del lenguaje vistos anteriormente: bucles,
sentencias de control, arrays,
diccionarios, etc.
En el siguiente ejemplo se utiliza un bucle for para
mostrar texto en diferentes
tamaños, utilizando las etiquetas desde la <h6>
(cabecera pequeña) hasta la <h1>
(cabecera más grande).
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
</head>
<body>
<%
for (int i = 1; i < 7; i++)
[Link]("<h" + (7-i) + ">"+ i + "</h" + (7-i) + ">");
%>
</body>
</html>
El código en Java se puede insertar en cualquier parte
dentro del código HTML, e
incluso, se pueden insertar varios trozos como se puede
ver en el siguiente ejemplo.
Aunque una variable se haya definido en una
determinada zona, su ámbito de
actuación no se ve reducido a ese fragmento de código
sino que se puede utilizar
posteriormente en otro lugar de la aplicación.
Observa que en el siguiente ejemplo, la definición e
inicialización de la variable x se
realiza en un bloque de código en Java y que luego esta
variable se utiliza en otros
dos bloques diferentes.
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<% int x = 3; %>
<% [Link](x); %> hola <% [Link](x); %>
</body>
</html>
12.3 Recogida de datos en
JSP
En cualquier aplicación web, la introducción de datos se
realiza mediante formularios.
Aunque se puede hacer todo en la misma página, de
momento vamos a tener dos. La
primera página contendrá un formulario y será la
encargada de recoger la información
y enviarla a una segunda página. Esta última página
recibirá los datos, realizará una
serie de cálculos u operaciones si procede y, por último,
mostrará un resultado.
En el primer ejemplo - un proyecto que llamaremos
PasoDeCadena - tenemos una página
con nombre [Link] que contiene un formulario HTML.
Este formulario contiene una
entrada de texto donde el usuario introducirá una
cadena de caracteres. Es muy
importante darle un valor a la etiqueta name. En el caso
que nos ocupa tenemos
name="nombre", y otra con name ="apellido por tanto el
dato que recoge el formulario se llama de esa manera,
sería el equivalente al nombre de la variable en Java. No
menos importante es indicar
la página que recibirá los datos que recoge el
formulario. Esta información se indica
con la etiqueta action, en nuestro ejemplo
action="[Link]" indica que será el fichero
[Link] el que recibirá nombre y apellido
El fichero [Link] únicamente contiene código HTML,
por tanto se podría llamar
[Link] y la aplicación funcionaría exactamente igual
ejemplo
[Link]
</head>
<body>
<h1>Pasando una cadena de caracteres</h1>
<form action= "[Link]">
<b>Nombre :<b><input type ="tex" name="nombre">
<br/><br/>
<b>Apellido :<b><input type ="tex"
name="apellido"> <br/><br/>
<input type="submit" value="REGISTRAR">
</form>
</body>
</html>
[Link]
<html>
<body>
</h5><b>USUARIOS REGISTRADOS<b><h5> <p/>
<p style="text-align:center"> USUARIO
CONFIRMADO:<p/><br/><br/>
<p style="text-align:center">
Nombre:<%=[Link]("nombre")%> <br/>
Apellido:<%=
[Link]("apellido")%></p> <br/>
<hr style="width:75%"
</body>
</html>
Para recoger los datos enviados por un formulario se
utiliza [Link]("nombreDeVariable")
donde nombreDeVariable es el dato que se envía desde
el formulario. En caso de que el
dato enviado sea un texto que pueda contener tildes o
eñes, hay que especificar la
codificación mediante
[Link]("UTF-8") antes de
recoger el dato.
en este caso seria:
<%=[Link]("nombre")%>
En el siguiente ejemplo, llamado Incrementa5, se
muestra cómo manipular en JSP un dato
numérico. La aplicación recoge un número y luego
muestra ese número incrementado
en 5 unidades.
index
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form method="get" action="[Link]">
Introduzca un número (puede tener decimales):
<input type="text" name="numeroIntro">
<input type="submit" value="OK">
</form>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
</head>
<body>
El número introducido más cinco es
<%
double resultado;
resultado =
[Link]([Link]("numeroIntr
o")) + 5;
[Link](resultado);
%>
</body>
</body>
como recuperar un dato numerico
resultado =
[Link]([Link]("numeroIntr
o"))
El siguiente ejemplo ilustra la recogida y envío de dos
variables, x e y. Observa que
ahora el formulario contiene dos entradas de texto, una
para cada variable.
index
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>opedracion de suma</h1>
<form action= "[Link]">
<b>x :<b><input type ="tex" name="x"> <br/><br/>
<b>x :<b><input type ="tex" name="y"> <br/><br/>
<input type="submit" value="REGISTRAR">
</form>
</body>
</html>
[Link]
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
La suma es
<%
int primerNumero =
[Link]([Link]("x"));
int segundoNumero =
[Link]([Link]("y"));
[Link](primerNumero + segundoNumero);
%>
</body>
</html>
asi recuperamos el valor de la variable:
int primerNumero =
[Link]([Link]("x"));
El siguiente proyecto de ejemplo es Animales. En la
página principal ([Link]) se puede
seleccionar un animal - gato o caracol - y un número.
Una vez introducidos los datos,
éstos se envían a [Link].
inxdex
<body>
<form method="post" action="[Link]">
Seleccione animal a visualizar
<select name="animal">
<option>Gato</option>
<option>Caracol</option>
</select>
</br>
Número de animales <input type="text" name="numero"
size="3">
</br>
<input type="submit">
</form>
</body>
[Link]
<body>
<%
String nombreAnimal = [Link]("animal");
String nombreImagen;
if ([Link]("Gato")) {
nombreImagen = "[Link]";
} else {
nombreImagen = "[Link]";
int veces =
[Link]([Link]("numero"));
for (int i = 0; i < veces; i++) {
[Link]("<img src=\"" + nombreImagen +"\"
width=\"20%\">");
}
%>
</body>
La página [Link] nos mostrará una imagen del
animal elegido repetida el número
de veces que hemos indicado.
12.4 POO en JSP
En las aplicaciones realizadas en JSP se pueden incluir
clases definidas por el usuario
para posteriormente crear objetos de esas clases. Lo
habitual es que el fichero que
contiene la definición de la clase se encuentre separado
del programa principal.
En un nuevo proyecto con nombre GatosConClase
vamos a crear la clase Gato; para
ello haz clic derecho sobre el icono del proyecto,
selecciona Nuevo y luego selecciona
Clase de Java. El nombre de la clase será Gato y el
nombre del paquete será por
ejemplo daw1.
El fichero [Link] quedaría como el que se muestra a
continuación.
Hemos creado una clase Gato muy sencilla que
únicamente contiene dos atributos:
el nombre del gato y el nombre del fichero de su foto.
Como métodos, se han
implementado toString(), maulla() y come().
pasos
1. creamos el proyecto web
GatoconClase
2. borramos el [Link]
3. hacemos click derecho sobre web
pages y creamos el paquete new-java
package y creamos el paquete daw1
4. hacemos click derecho sobre daw1 -
new - java class y creamos la clase Gato
package daw1;
/**
* @author Circet
*/
public class Gato {
private String nombre;
private String imagen;
public Gato(String nombre, String imagen) {
[Link] = nombre;
[Link] = imagen;
public String getNombre() {
return nombre;
public String getImagen() {
return imagen;
@Override
public String toString() {
return "<img src='" + imagen + "' width='80'>Hola, soy " +
nombre + "<br>";
public String maulla() {
return "<img src='" + imagen + "'
width='80'>Miauuuuuuuu<br>";
}
public String come(String comida) {
return "<img src='" + imagen + "' width='80'>Estoy
comiendo " + comida + "<br>";
5. click derecho sobre web pages - new -
jsp y creamos el index
tenemos que importar en el index el paquete daw1
<%--
Document : index
Created on : 14 abr 2023, 23:11:22
Author : Circet
--%>
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<%@page import="[Link]"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Gatos con clase</h1>
<hr>
<%
Gato g1 = new Gato("Pepe", "[Link]");
Gato g2 = new Gato("Garfield", "[Link]");
Gato g3 = new Gato("Tom", "[Link]");
[Link](g1);
[Link](g2);
[Link](g3);
[Link]([Link]());
[Link]([Link]("sardinas"));
%>
</body>
</html>
con esta linea importamos el paquete daw1 en el index
<%@page import="[Link]"%>
6. vamos a la
documentos-NetBeansProjects-GatoconC
lase2-web y pegamos 2 archivos jpg con
los nombres: garfield y gato, y tambine
otro archivo png con nombre tom, estos
son los archivos que va a imprimir por
pantalla el programa
para imprimir una imagen por
pantalla
<%[Link]("<img src=\"" + "nombre imagen"+"\"
width=\"100%\">");%>
ejempl
<%[Link]("<img src=\"" + "[Link]"+"\"
width=\"100%\">");%>
Control de excepciones
14.1 Errores en tiempo de compilación y en
tiempo
de ejecución
Errores en tiempo de compilación
• Se suelen producir cuando el código no está bien
escrito, por ej. cuando
falta el punto y coma al final de la sentencia.
• Hasta que no se arreglen, no se genera el archivo con
la extensión .class
Errores en tiempo ejecución
• Se llaman también excepciones.
• El programa compila y, en principio, se ejecuta bien…
hasta que se dan
determinadas circunstancias que provocan un fallo.
• Es necesario preveerlos para que el programa no
termine de forma
inesperada.
14.2 El bloque try - catch -
finally
El bloque try - catch - finally sirve para encauzar el flujo
del programa de tal forma que,
si se produce una excepción, no se termine de forma
drástica y se pueda reconducir
el ejecución de una manera controlada.
El formato de este bloque es el siguiente:
try {
Instrucciones que se pretenden ejecutar
(si se produce una excepción puede que
no se ejecuten todas ellas).
} catch {
Instrucciones que se van a ejecutar
cuando se produce una excepción.
} finally {
Instrucciones que se van ejecutar tanto
si se producen excepciones como si no
se producen.
Se pueden especificar varios catch para controlar
diferentes excepciones como veremos más adelante. La
parte finally es opcional.
ejemplo
public static void main(String[] args) {
Scanner s = new Scanner([Link]);
[Link]("Este programa calcula la media de
dos números");
try {
[Link]("Introduzca el primer número: ");
double numero1 = [Link]([Link]());
[Link]("Introduzca el segundo número: ");
double numero2 = [Link]([Link]());
[Link]("La media es " + (numero1 +
numero2) / 2);
} catch (Exception e) {
[Link]("No se puede calcular la media. ");
[Link]("Los datos introducidos no son
correctos.");
} finally {
[Link]("Gracias por utilizar este programa
¡hasta la próxima!");
}
Ahora, si el usuario introduce un dato incorrecto, el
programa termina de forma
ordenada.
Este programa calcula la media de dos números
Introduzca el primer número: hola
No se puede calcular la media. Los datos introducidos
no son correctos.
Gracias por utilizar este programa ¡hasta la próxima!
Se puede mostrar tanto el tipo de excepción como el
error exacto que se produce. Para
ello, se aplican los métodos getClass() y getMessage()
respectivamente al objeto e. El tipo
de excepción viene dado por el nombre de una clase
que es subclase de Exception.
Bastará con añadir las siguientes líneas al ejemplo
anterior.
[Link]("Excepción: " + [Link]());
[Link]("Error: " + [Link]());
El ejemplo completo quedaría como se indica a
continuación.
public static void main(String[] args) {
Scanner s = new Scanner([Link]);
[Link]("Este programa calcula la media de
dos números");
try {
[Link]("Introduzca el primer número: ");
double numero1 = [Link]([Link]());
[Link]("Introduzca el segundo número: ");
double numero2 = [Link]([Link]());
[Link]("La media es " + (numero1 +
numero2) / 2);
} catch (Exception e) {
[Link]("Excepción: " + [Link]());
[Link]("Error: " + [Link]());
[Link]("No se puede calcular la media. ");
[Link]("Los datos introducidos no son
correctos.");
Vamos a refinar un poco más el programa. Si se
produce una excepción al introducir
un dato, el programa volverá a pedirlo una y otra vez
hasta que el dato sea correcto
Scanner s = new Scanner([Link]);
[Link]("Este programa calcula la media
de dos números");
boolean datoValido = false;
double numero1 = 0;
do {
try {
[Link]("Introduzca el primer número:
");
numero1 = [Link]([Link]());
datoValido = true;
} catch (Exception e) {
[Link]("El dato introducido no es
correcto, debe ser un número.");
[Link](" Por favor, inténtelo de
nuevo.");
} while (!datoValido);
double numero2 = 0;
do {
try {
datoValido = false;
[Link]("Introduzca el segundo
número: ");
numero2 = [Link]([Link]());
datoValido = true;
} catch (Exception e) {
[Link]("El dato introducido no es
correcto, debe ser un número.");
[Link](" Por favor, inténtelo de
nuevo.");
} while (!datoValido);
[Link]("La media es " + (numero1 +
numero2) / 2);
}
Lanzamiento de excepciones
con throw
La orden throw permite lanzar de forma explícita una
excepción. Por ejemplo, la
sentencia throw new ArithmeticException() crea de
forma artificial una excepción igual
que si existiera una línea como [Link](1 /
0);.
public class EjemploExcepciones06throw {
public static void main(String[] args) {
[Link]("Inicio");
throw new ArithmeticException();
De la misma forma, el programa que se muestra a
continuación genera también una
excepción del tipo ArithmeticException.
public class EjemploExcepciones07sinthrow {
public static void main(String[] args) {
[Link]("Inicio");
[Link](1 / 0);
}
Declaración de un método
con throws
Hemos visto en el apartado anterior cómo lanzar una
excepción desde una función/método con throw. Es
muy recomendable indicar de forma explícita en la
cabecera
que existe esa posibilidad, es decir, que el método en
cuestión puede provocar una
excepción. Se trata de una declaración de intenciones,
algo parecido al @Override. Si
el IDE que estemos utilizando detecta que un método
tiene throws en su cabecera y,
sin embargo, no hemos gestionado bien la posibilidad
de provocar una excepción, nos
avisará con el correspondiente mensaje de error.
Vamos a modificar la cabecera de la función
reparteManzanas() para incluir throws.
public static int reparteManzanas(int manzanas, int
personas) throws ArithmeticException
El código completo quedaría como sigue.
El código completo quedaría como sigue.
import [Link];
public class
EjemploExcepciones09ManzanasConThrowYThrows {
public static void main(String[] args) {
Scanner s = new Scanner([Link]);
[Link]("Número de manzanas: ");
int m = [Link]([Link]());
[Link]("Número de personas: ");
int p = [Link]([Link]());
try {
[Link]("A cada persona le corresponden " +
reparteManzanas(m, p) + " manzanas.\
");
} catch (ArithmeticException ae) {
[Link]("Los datos introducidos no son
correctos.");
public static int reparteManzanas(int manzanas, int
personas) throws ArithmeticException {
try {
return manzanas / personas;
} catch (ArithmeticException ae) {
[Link]("El número de personas vale 0.");
throw ae;
}
Creación de excepciones
propias
Java nos permite crear excepciones propias, hechas a
medida. Para ello, no hay más
que utilizar una de las características más importantes
de la programación orientada
a objetos: la herencia. Crear una nueva excepción será
tan sencillo como implementar
una subclase de Exception.
Veamos paso a paso cómo crear y utilizar una
excepción propia
pàsos para crear una
excepcion propia
1. creamos la clase que va a contener
nuestra excepcion
2, esta clase debe de heredar de la clase
exception , ,seguidamente del nombre de la clase
escribimos la palabra reservada "extends" y a
continuacion la palabra reservada "Exception "-
3. luego, en esta misma clase escribimos
el mensaje de excepcion con un println
ejemplo;
si nuestra clase de excepcion se llama "
ExcepcionAlturaFueraDeRango ". el fromato seria el
siguiente
public class ExcepcionAlturaFueraDeRango extends
Exception {
[Link]("ExcepcionAlturaFueraDeRango:
La alturaestá fuera del rango permitido.");
4 . en el metodo main, dentro del ciclo try
catch, creamos el condicional que va a llamar
anuestra excepcion y declaramos la nueva excepcion
ejemplo
try {
if ((h < 1) || (h > 10)) {
throw new ExcepcionAlturaFueraDeRango();
}
la sintaxis es ; throw new Nombe de la excepcion que
creamos en niuestra clase();
5. en el catch llamamos a nuesto metodo
la sintaxis seria;
catch (NombreDLlaExcepcion variable) {
[Link]("emnsaje de la excepcion");
para este ejemplo seria;
catch (ExcepcionAlturaFueraDeRango eafr) {
[Link]("No se ha podido pintar la
pirámide.");
}
:
pasos para crear una
excepcion simple
1. creamos el ciclo try catch finally
ejemplo
try {
Instrucciones que se pretenden ejecutar
(si se produce una excepción puede que
no se ejecuten todas ellas).
} catch {
Instrucciones que se van a ejecutar
cuando se produce una excepción.
} finally {
Instrucciones que se van ejecutar tanto
si se producen excepciones como si no
se producen.
2. dentro de los cochetes tyr escribimos el
codigo que se va a aejecutar
3. dentro de catch escribimos la
excepcion
sintaxis
catch(Exception variableQueVaaContenerLaExcepcion){
system print con el mensaje de la excepcion, }
tambine podemos usar la variable como objeto para
acceder a los mensajes ya pre establecidos
ejemplo
catch (Exception e) {
[Link]("Excepción: " + [Link]());
[Link]("Error: " + [Link]());
[Link]("No se puede calcular la media. ");
[Link]("Los datos introducidos no son
correctos.");ç
Scanner sc = new Scanner([Link]);
boolean DatoValido = true;
int mayor = 0;
int numero=0;
[Link]("INTRODUCE 6 NUMEROS Y TE
DIRE CUAL ES EL MAYOR");
for (int i = 0; i < 6; i++) {
do {
[Link]("INTRODUCE NUMERO " + i
+ 1);
numero = [Link]();
if (numero > -1000000) {
DatoValido = true;
}
} while (!DatoValido);
if (numero > mayor) {
mayor = numero;
[Link]("EL NUMERO MAYOR = " +
mayor);
correcto
Scanner s = new Scanner([Link]);
[Link]("Este programa calcula la media
de dos números");
boolean datoValido = false;
int mayor=0;
double numero = 0;
for (int i = 0; i < 6; i++) {
do {
try {
[Link]("Introduzca el numero : " +
(i + 1));
numero = [Link]([Link]());
datoValido = true;
} catch (NumberFormatException e) {
[Link]("El dato introducido no es
correcto, debe ser un número.");
[Link](" Por favor, inténtelo de
nuevo.");
i = i - 1;
} while (!datoValido);
if (numero > mayor) {
mayor = (int) numero;
[Link]("EL NUMERO MAYOR ES : " +
mayor);
Creación de aplicaciones con
servlets
:
pasos para crear un servlets
[Link] la clase que va a contener nuestro servlet
2. esta clase extiende de la clase HttpServlet, entonces
a la lado de la clase escribimos "extends HttpServlet"
por ejemplo si la clase se llama "hola mundo " quedaria
asi
public class holamundo extends HttpServlet
3,justo en la línea anterior a esta escribimos el override
sintaxis; @WebServlet("/nombre del servlet")
por ejemplo
@WebServlet("/holamundo")
4. eacribimos el metodo dopost
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException{
[Link]("text/html;charset=UTF-8");
PrintWriter out = [Link]();
5. a continuacion escribimos nuestro codigo
por ejemplo
[Link]("Hola Mundo desde Servlets");
8. en el archivo [Link] llamamos al servlets sintaxis
<a href="/la ruta del servlet">Servlet nombre del
servlet</a>
ejemplo
<a href="/Holamundoservlets2/holamundo">Servlet
holamundo</a>
<!DOCTYPE html>
<html>
<head>
<title>Formulario Servlet</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Formulario Servlet</h1>
<form name="form1"
action="/ManejoParametros/Servlet" method="post" >
Usuario: <input type="text" name="usuario" />
<br/>
Password: <input type="password"
name="password" />
<br/>
<input type="submit" value="Enviar" />
</form>
</body>
</html>
package web;
import [Link];
import [Link];
import [Link];
import [Link].*;
@WebServlet("/Servlet")
public class Servlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws IOException{
//Leer los parametros del formulario html
String usuario = [Link]("usuario");
String password =
[Link]("password");
[Link]("usuario = " + usuario);
[Link]("password = " + password);
PrintWriter out = [Link]();
[Link]("<html>");
[Link]("<body>");
[Link]("El parametro usuario es:" + usuario);
[Link]("<br/>");
[Link]("El parametro password es:" + password);
[Link]("</body>");
[Link]("</html>");
[Link]();
pasos para crear metodo do
post servlet
1-en nuestra archivo html creamos un formulario para
solicitar los datos al usuario
2. en el atributo de action de nuestro formulario
mandamos a llamar a nuestro servlet
la sintaxis seria ;
<form name="form1" action="ruta de nuestro servlet"
method="post" >
por ejempolo
<form name="form1"
action="/ManejoParametros/Servlet" method="post" >
el archivo [Link] quedaria asi
<!DOCTYPE html>
<html>
<head>
<title>Formulario Servlet</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Formulario Servlet</h1>
<form name="form1"
action="/ManejoParametros/Servlet" method="post" >
Usuario: <input type="text" name="usuario" />
<br/>
Password: <input type="password"
name="password" />
<br/>
<input type="submit" value="Enviar" />
</form>
</body>
</html>
3. creamos dentro de nuestro source package la clase
que va a contener nuestro servlet
4. importamos las sigjuientes clases
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
5., justo debajo de los import excribimos el override con
la siguiente sintaxis
@WebServlet("/nombre del servlet")
por ejemplo
@WebServlet("/Servlet")
6. esta clase hereda de la clase HttpServlet, por lo tanto
despues del nombre de la clase escribimos
extends HttpServlet
ejemplo
public class Servlet extends HttpServlet{
7. creamos el metodo do post
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws IOException{
8 dentro del formulario de [Link] habiamos
solicitado dos variables, usuario y password para
poder recuperar estas variables utilizamos el comando
[Link]
por ejemplo
String usuario = [Link]("usuario");
String password =
[Link]("password");
9, para poder imprimir estos datos en pantalla creamos
el objeto PrintWriter y creamos la variable out
por ejemplo
PrintWriter out = [Link]();
10. por ultimo utilizamos codigo html para imprjimir por
pantalla
[Link]("<html>");
[Link]("<body>");
[Link]("El parametro usuario es:" + usuario);
[Link]("<br/>");
[Link]("El parametro password es:" + password);
[Link]("</body>");
[Link]("</html>");
[Link]();
ejemplo de todo lo anterior
archivo [Link]
<!DOCTYPE html>
<html>
<head>
<title>Formulario Servlet</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Formulario Servlet</h1>
<form name="form1"
action="/ManejoParametros/Servlet" method="post" >
Usuario: <input type="text" name="usuario" />
<br/>
Password: <input type="password"
name="password" />
<br/>
<input type="submit" value="Enviar" />
</form>
</body>
</html>
clase servlet
package web;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@WebServlet("/Servlet")
public class Servlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws IOException{
//Leer los parametros del formulario html
String usuario = [Link]("usuario");
String password =
[Link]("password");
[Link]("usuario = " + usuario);
[Link]("password = " + password);
PrintWriter out = [Link]();
[Link]("<html>");
[Link]("<body>");
[Link]("El parametro usuario es:" + usuario);
[Link]("<br/>");
[Link]("El parametro password es:" + password);
[Link]("</body>");
[Link]("</html>");
[Link]();
manejo de cookies
Las cookies las vamos a utilizar para recordar
información del usuario, esto debido a que el
protocolo de HTTP es un protocolo sin memoria o de
tipo stateless. Una cookie es información
que se almacena en nuestro navegador web y la forma
que se almacena es en un archivo de
texto. Este archivo de texto almacena información
forma de nombre y un valor asociado a este
nombre.
En Java los Servlets pueden crear este tipo de objetos y
enviar la información hacia el navegador
web, a su vez también podemos leer las Cookies que el
navegador envíe a nuestro servidor web
por medio del API de los Servlets utilizando el objeto
Cookie. Este objeto Cookie se encuentra en
el paquete [Link].
pasos para almacenar informacion en una
cookie
1. creamos nuestrpo codigo html para mandar a llamar
al servlet CON LA SINTAXIS <a
href="/ManejoDeCookies/CookiesServlet">Link al
servlet de manejo de A Pablo Vodafone:
</html>cookies</a>
ejemplo
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo de Cookies</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Ejemplo de Cookies</h1>
<a href="/ManejoDeCookies/CookiesServlet">Link
al servlet de manejo de cookies</a>
</body>
</html>
2. creamos una clase que va a contener nuestro servlet
por ejemplo CookiesServlet
3. convertimos esta clase en un servlet ecribiendo
@WebServlet("url del servlet") justo por encima del
nombre de la clase para este ejemplo seria
@WebServlet("/CookiesServlet")
public class CookiesServlet extends HttpServlet {
4. hacemos un extends de la clase HttpServlet
ejemplo
public class CookiesServlet extends HttpServlet {
5. sobre escribimos el metodo dGget
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException{
5. creamos la variable booleana nuevoUsuario para
suponer que el usuario visita nuestro sitio por primera
vez
6, obtenermos el arreglo de cookies, con la ayuda de la
variable request. mandamos a lalmar el metodo
getCookies
ejemplo
Cookie[] cookies = [Link]();
con esto obtenemos todas la variables de cookies que
tiene almacenadas el cliente
de esta manera sabemos si un usario es nuevo o ya ha
visitado anteriormente nuestro sitio web
7. buscamos una cookie que ya hallamos agregado
anteriormente al navegador, osea, si el usario ya ha
visitado nuestra pagina
osea, buscamos una cookie que halla sido creada con
anterioridad
, a eswa variable la hemos llamado visitanteRecurrente
8. si el arregle de cookie es diferente de null creamos un
ciclo for each para verificar que la variable
visitanteRecurrente no se encuentre en el arreglo de
cookies que hemos recibido por parte del cliente
9. si la variable visitanteRecurrente se encuentra
almacenada en las cookies del cliente vamos a cambiar
el estado de la variable visitanteRecurrente a false para
indicar que es un nuevo usuario
ejemplo
if(cookies != null){
for(Cookie c: cookies){
if([Link]().equals("visitanteRecurrente")
&& [Link]().equals("si")){
//si ya existe la cookie es un usuario
recurrente
nuevoUsuario = false;
break;
}
si ya existe la cookie es un usuario recurrente
el break es para romper el ciclo una vex aue hallamos
encontrado nuestra variable visitanteRecurrente"
10: si el usario es nuevo agregamos la cookie en la
response para que ya no sea un nuevo usario, esta
cookie queda almacenada en las cookies del cliente y la
porxima vez que inicie sesion sabremos que no es un
nuevo usuario
11: creamos la variable de tipos string que va a imprimir
por pantalla si el suario es nuevo o no
String mensaje = null;
11. if(nuevoUsuario){
Cookie visitanteCookie = new
Cookie("visitanteRecurrente","si");
[Link](visitanteCookie);
mensaje = "Gracias por visitar nuestro sitio por
primera vez";
else{
mensaje = "Gracias por visitar NUEVAMENTE
nuestro sitio";
hemos creado un nuevo objeto de tipo cookie llamada y
agregamos la cookie de VisitanteRecurrente y el valor
es si ejemplo
Cookie visitanteCookie = new
Cookie("visitanteRecurrente","si");
hemos agregamos la cookie en la respuesta con la
ayuda de la variable response mandamos a llamar el
metodo addCookie y agregamos la cookie llamada
VisitanteCookie
y usamos la variable mensaje para mostrar el mensaje
"Gracias por visitar nuestro sitio por primera vez""
12. si el usuariuo ya es existente quiere decir que la
cookie ya estaba agreagada , ya no hace falta agregar la
cookie y mostramos el mensaje Gracias por visitar
NUEVAMENTE nuestro sitio else{
mensaje = "Gracias por visitar NUEVAMENTE
nuestro sitio";
13. mandamos la respuesta con ayuda del objeto
response
[Link]("text/html;charset=UTF-8");
14. creamos nuestro objeto PrintWriter llamado out con
la ayuda de la variable response mandamos a llmar el
metodo getWriter
ejemplo
ejemplo de todo esto
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/*
* Click
nbfs://nbhost/SystemFileSystem/Templates/Licenses/l
[Link] to change this license
* Click
nbfs://nbhost/SystemFileSystem/Templates/Classes/C
[Link] to edit this template
*/
/**
* @author Circet
*/
@WebServlet("/ServletCookies")
public class ServletCookies extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException{
boolean NuevoUsuario=true;
Cookie[] cookies = [Link]();
if(cookies != null){
for(Cookie c: cookies){
if([Link]().equals("visitanteRecurrente")
&& [Link]().equals("si")){
//si ya existe la cookie es un usuario
recurrente
NuevoUsuario= false;
break;
String mensaje = null;
if (NuevoUsuario) {
Cookie visitanteCookie = new
Cookie("visitanteRecurrente", "si");
[Link](visitanteCookie);
mensaje = "Gracias por visitar nuestro sitio por
primera vez";
} else {
mensaje = "Gracias por visitar NUEVAMENTE
nuestro sitio";
[Link]("text/html;charset=UTF-8");
PrintWriter out = [Link]();
[Link]("Mensaje:" + mensaje);
[Link]();
presionando control+shift+i en el avegador
podemos ver que la cookie ya se creo y se almaceno en
servidor del cliente
:
como obtener el valor de una
cookie
para este ejercicio vamos a utikizar una variable que se
llama contador de visitas, obtenemos el valos de esta
cookie que esta almacenada en las cookies del cliente y
la incrementamos
pasos
1. escribimos nuestro codigo html para mandar a llmar
anuestro servlet, la llmada al servlet se realiza con la
siguiente sointaxis
<a href="url del servlet">
para este caso seria
<a href="/CookiesContador/ContadorVisitasServlet">
Link al Servlet Contador de Visitas
2. creamos una clase que va a contener nuestro servlet
por ejemplo CookiesServlet
3. convertimos esta clase en un servlet ecribiendo
@WebServlet("url del servlet") justo por encima del
nombre de la clase para este ejemplo seria
@WebServlet("/CookiesServlet")
public class CookiesServlet extends HttpServlet {
4. hacemos un extends de la clase HttpServlet
ejemplo
public class CookiesServlet extends HttpServlet {
5. sobre escribimos el metodo doGget
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException{
6. le vamos a indicar al cliente el numero de veces que
ha visitado nuestro sitio, para esto c reamos la variable
int contador = 0;
7. revisamos en el arreglo de cookies del lciente si ya
existe la variable contadorVisitas
8, obtenermos el arreglo de cookies, con la ayuda de la
variable request. mandamos a lalmar el metodo
getCookies
ejemplo
Cookie[] cookies = [Link]();
con esto obtenemos todas la variables de cookies que
tiene almacenadas el cliente
9. buscamos una cookie que ya este almacenadfa
anteriormente al navegador, osea, cuantas veces ya ha
visitado nuestra pagina
osea, buscamos una cookie que halla sido creada con
anterioridad a esa variable la hemos llamado
contadorVisitas
10. si el arreglo de cookie es diferente de null creamos
un ciclo for each para verificar el valor de la variable
contadorVisitas
11. si la variable contadorVisitasse encuentra
almacenada en las cookies del cliente vamos a
almacenar su valor en la variable contador
ejemplo
if(cookies != null){
for(Cookie c: cookies){
if([Link]().equals("contadorVisitas")){
contador = [Link]([Link]());
}
12. incrementamos la variable contador
contador++;
[Link] la respuesta al navegador, creamos el
objeto cookie llamado c, creamos una nueva cookie
llmada contadorVisitas, y si ya existe sobre escribe el
valor de esta variable, tambuen tenemos que convertir la
variable contador de int a string ejemplo
Cookie c = new
Cookie("contadorVisitas",[Link](contador));
14. la cookie se almacenara en el cliente por 1 hora
(3600 seg)
[Link](3600); la c es el nombre de la
variable de la cookie que creamos anteiormente
15. agregamos esta cookie a la respuesta del navegador
por medio la variable response, si la cookie ya existia la
vamos a a sobre escribir con el nuevo valor
[Link](c);
16; //Mandamos el mensaje al navegador
[Link]("text/html;charset=UTF-8");
PrintWriter out = [Link]();
[Link]("Contador de visitas de cada cliente:" +
contador);
ejemplo de todo lo anterior
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/*
* Click
nbfs://nbhost/SystemFileSystem/Templates/Licenses/l
[Link] to change this license
* Click
nbfs://nbhost/SystemFileSystem/Templates/Classes/C
[Link] to edit this template
*/
/**
* @author Circet
*/
@WebServlet("/ContadorVisitasServlet")
public class ContadorVisitasServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException{
//Declaramos la variable contador
int contador = 0;
//Revisamos si existe la cookie contadorVisitas
Cookie[] cookies = [Link]();
if(cookies != null){
for(Cookie c: cookies){
if([Link]().equals("contadorVisitas")){
contador = [Link]([Link]());
//incrementamos el contador el uno
contador++;
//Agregamos la respuesta al navegador
Cookie c = new
Cookie("contadorVisitas",[Link](contador));
//la cookie se almacenara en el cliente por 1 hora
(3600 seg)
[Link](3600);
[Link](c);
//Mandamos el mensaje al navegador
[Link]("text/html;charset=UTF-8");
PrintWriter out = [Link]();
[Link]("Contador de visitas de cada cliente:" +
contador);
}
:
manejo de sesiones con
httpsession
El API de los Servlets nos permite administrar las
sesiones de los clientes por medio de un
objeto llamado HttpSession y cabe resaltar que esto
ocurre de manera automática, cada
petición que realiza un cliente hacia nuestro recurso
web de manera automática crea una
nueva sesión
Ahora una sesión nos va a permitir administrar las
peticiones que realiza un usuario, hay que
recordar que el protocolo HTTP se considera que es un
protocolo que no tiene estado, por lo
que NO va a recordar información que el usuario haya
enviado previamente.
El objeto HttpSession se obtiene a partir del objeto
HttpServletRequest (request). Por lo que
una sesión se utiliza para administrar las distintas
peticiones (request) del usuario.
Una sesión entonces tiene una duración de vida más
larga que una petición o lo que es lo
mismo el objeto request. Por lo tanto una sesión se
destruye hasta que transcurra el tiempo
que le asignamos a la sesión de inactividad o también
podemos destruirla manualmente por
medio del método invalidate.
:
pasos para manejo de
sesiones con servlets
1. creamos nuestro html que va a llmar a nuestro servlet
por ejemplo
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo de Sesiones</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Ejemplo de Sesiones</h1>
<br/>
<a href="/ManejoDeSesiones/SesionesServlet">
LInk al Servlet que maneja sesiones
</a>
</body>
</html>
2. creamos una clase que va a contener nuestro servlet
por ejemplo SesionesServlet
3. convertimos esta clase en un servlet ecribiendo
@WebServlet("url del servlet") justo por encima del
nombre de la clase para este ejemplo seria
@WebServlet("/SesionesServlet")
public class SesionesServlet extends HttpServlet {
4. hacemos un extends de la clase HttpServlet
ejemplo
public class SesionesServlet extends HttpServlet {
5. sobre escribimos el metodo dGget
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException{
7. solicitamos el objeto session con el metodo
getSession(); con la ayuda del metodo request y a
traves de la variable session
HttpSession sesion = [Link]();
esto nos regresa un objeto de tpo httoSession y regresa
la sesion actual asociada con esta peticion, pero si esta
peticion no tiene asociada una sesion entonces crea
una
con esto podemos recuperar la sesion y agreagar
informacion a dicha sesion
8. creamos una variable llamada tiulo para mostrar el
mensaje
String titulo = null;
[Link] un atributo a la sesion ya que de esta
manera vamos a poder agregarle informacion a la
sesion y tambien solicitarle informacion
Pedir el atributo contadorVisitas a la sesion
Integer contadorVisitas = (Integer)
[Link]("contadorVisitas");
con esto sabemos si el usario ya ha iniciado sesion con
anterioridad anuestra web
10. ahora preguntamos si es nulo , si es nulo significa
que es la primera vez qu e esta iniciando sesion en
uestra web
if (contadorVisitas == null) {
contadorVisitas = 1;
titulo = "Bienvenido por primera vez";
} else {
contadorVisitas++;
titulo = "Bienvenido nuevamente";
si es la primera vez que visita nuestra web , damos el
mensaje de bienvenidad y creamos la variable contador
de visitas con valor 1, y si ya ha vitado nuestra pagina
incremengtamos la variable contador de visitas en uno
11. agregamos el nuevo valor a la sesion
[Link]("contadorVisitas",
contadorVisitas); si existe se reemplaza y si no existe se
crea
12. imprimimos la informacion por pantalla
[Link](titulo);
[Link]("<br>");
[Link]("no. accesos al recurso:" +
contadorVisitas);
[Link]("<br>");
[Link]("ID de la sesion:" + [Link]());
[Link]();
ejemplod de todo esto
[Link]
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo de Sesiones</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Ejemplo de Sesiones</h1>
<br/>
<a href="/EjemploHttpSession1/SesionesServlet">
LInk al Servlet que maneja sesiones
</a>
</body>
</html>
servlet
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/*
* Click
nbfs://nbhost/SystemFileSystem/Templates/Licenses/l
[Link] to change this license
* Click
nbfs://nbhost/SystemFileSystem/Templates/Classes/C
[Link] to edit this template
*/
/**
* @author Circet
*/
@WebServlet("/SesionesServlet")
public class SesionesServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException {
[Link]("text/html;charset=UTF-8");
HttpSession sesion = [Link]();
String titulo = null;
//Pedir el atributo contadorVisitas a la sesion
Integer contadorVisitas = (Integer)
[Link]("contadorVisitas");
//si es nulo es la primera vez que accedemos a la
aplicacion
if (contadorVisitas == null) {
contadorVisitas = 1;
titulo = "Bienvenido por primera vez";
} else {
contadorVisitas++;
titulo = "Bienvenido nuevamente";
//agregamos el nuevo valor a la sesion
[Link]("contadorVisitas",
contadorVisitas);
//mandamos la respuesta al cliente
PrintWriter out = [Link]();
[Link](titulo);
[Link]("<br>");
[Link]("no. accesos al recurso:" +
contadorVisitas);
[Link]("<br>");
[Link]("ID de la sesion:" + [Link]());
[Link]();
}
Como manejar carrito de
compras
paso para carrito de compras
1. creamos el archivo html con un formulario para que
el cliente ingrese los articulos en el carrito de compras,
este codigo html tambien va a contener nuestro servle
2. creamos una clase que va a contener nuestro servlet
por ejemplo CarritoServlet
3. convertimos esta clase en un servlet ecribiendo
@WebServlet("url del servlet") justo por encima del
nombre de la clase para este ejemplo seria
@WebServlet("/CarritoServlet")
public class CarritoServlet extends HttpServlet{
4. hacemos un extends de la clase HttpServlet
ejemplo
public class CarritoServlet extends HttpServlet{
5. sobre escribimos el metodo dopost
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws IOException {
6. establecemos el formarto con el cual se va a mostrar
nuestra infoemacion en pantalla
[Link]("text/html;charset=UTF-8");
7. creamos o recuperamos el objeto http session
HttpSession sesion = [Link]();
8. recuperamos la lista de articulos agregados
previamente si existen. para estpo definimos una lista
de objetos tipo string llamada lista, a la variable sesion
le solicitamos esta lista por medio del metodo
getAttribute vamos a solicitar la lista de articulos que
hallamos agregado a la sesion, por medio del cast
(List<String>), convertimos el objeto a un objeto de tipo
lista
List<String> articulos = (List<String>)
[Link]("articulos");
9. //verificamos si la lista de articulos existe y por
medio de la variable sesion, agregamos esta lista a la
sesion, y se grega una lista vacia a la sesion porque la
lista previamente no existia
if (articulos == null) {
//inicializamos la lista de articulos
articulos = new ArrayList<>();
[Link]("articulos", articulos);
}
10. procesamos el nuevo articulo que nos envia el
formulario recuperamos la variable articulo que
introdujo el usuario en nuestro formulario String
articuloNuevo = [Link]("articulo");
[Link] y agregamos el articulo nuevo, usamos
trim pàtra eliminar espacios vacios a la derecha y a la
izquierda, si la palabra no es null ni es una caddena
vacia agregamos el articulo a la lista de articulos
if (articuloNuevo != null &&
![Link]().equals("")) {
[Link](articuloNuevo);
12 usamos un ciclo for ecah para imprimir los articulos.
usamos bloque try para que en automatico cierre el flujo
printWriter, en otrso ejemplos habiamos utilizado
[Link] para cerrar el flujo, tambien usamos comillas
simples en el link de vuelta porque ya estamos usando
doble comillas en el href
try (
//imprimimos la lista de articulos
PrintWriter out = [Link]()) {
[Link]("<h1>Lista de Articulos</h1>");
[Link]("<br>");
//iteramos todos los articulos
for (String articulo : articulos) {
[Link]("<li>" + articulo + "</li>");
//agregamos un link para regresar al inicio
[Link]("<br>");
[Link]("<a
href='/EjemploDeCarritoCompras'>Regresar al
inicio</a>");
ejemplo de todo lo anyerior
html,index
<!DOCTYPE html>
<html>
<head>
<title>Carrito Compras</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Ejemplo Carrito Compras</h1>
<form
action="/EjemploCarritoDeCompras/CarritoServlet"
method="post" name="form1">
Articulo a agregar: <input type="text"
name="articulo">
<br/>
<input type="submit" value="Enviar">
</form>
</body>
</html>
servlet
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/*
* Click
nbfs://nbhost/SystemFileSystem/Templates/Licenses/l
[Link] to change this license
* Click
nbfs://nbhost/SystemFileSystem/Templates/Classes/C
[Link] to edit this template
*/
/**
* @author Circet
*/
@WebServlet("/CarritoServlet")
public class CarritoServlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws IOException {
[Link]("text/html;charset=UTF-8");
//creamos o recuperamos el objeto http session
HttpSession sesion = [Link]();
//recuperamos la lista de articulos agregados
previamente si existen
List<String> articulos = (List<String>)
[Link]("articulos");
//verificamos si la lista de articulos existe
if (articulos == null) {
//inicializamos la lista de articulos
articulos = new ArrayList<>();
[Link]("articulos", articulos);
//procesamos el nuevo articulo
String articuloNuevo =
[Link]("articulo");
//revisamos y agregamos el articulo nuevo
if (articuloNuevo != null &&
![Link]().equals("")) {
[Link](articuloNuevo);
try (
//imprimimos la lista de articulos
PrintWriter out = [Link]()) {
[Link]("<h1>Lista de Articulos</h1>");
[Link]("<br>");
//iteramos todos los articulos
for (String articulo : articulos) {
[Link]("<li>" + articulo + "</li>");
}
//agregamos un link para regresar al inicio
[Link]("<br>");
[Link]("<a
href='/EjemploCarritoDeCompras'>Regresar al
inicio</a>");
}
Como crear aplicaciones con
jsp
ELEMENTOS DE UN JSP
1. EXPRESSIONS
<%= %> LA EXPRESION SE EVALUA Y SE IMPRIME EL
RESULTADO POE EJEMPLO
<%= "Saludos" + " " + "JSP" %>
EL RUN SERIA:
Saludos JSP
ES EQUIVALETE AL [Link](EXPRESION)
EJEMPLO
<%= 2 * 3 / 2 %>
EL RUN SERIA:
2. SCRIPTLETS:
<%
CODIGO JAVA
%>
EL CODIGO JAVA SE INSERTA ENTRE LOS SCRIPTLETS
EJEMPLO
<%
if(session != null && [Link]()){
[Link]("lasesion es nueva");
} else if(session != null){
[Link]("lasesion no es nueva");
} %>
3. DECLARACIONES O LO QUE ES LO
MISMO VARIABLES Y METODOS DE
CLASE
SINTAXIS
<%! CODIGO JAVA %>
ESTO NOS PERMITE CREAR VARIABLES Y METODOS DE
CLASE
<%!
//Declaramos una variable con su metodo get
private String usuario = "Alberto";
public String getUsuario(){
return [Link];
//Declaramos un contador de visitas
private int contadorVisitas = 1;
%>
podríamos mandar a llamar la variable de la siguiente
manera
Valor usuario por medio del atributo: <%= [Link]%>
y el método de la siguiente manera
o la variable contador de visitas Contador de Visitas:
<%=[Link]++%> o el método de la
siguiente manera Valor usuario por medio del metodo:
<%=[Link]()%>
ejemplo total
<%-- Agregamos una declaracion de JSP --%>
<%!
//Declaramos una variable con su metodo get
private String usuario = "Alberto";
public String getUsuario(){
return [Link];
}
//Declaramos un contador de visitas
private int contadorVisitas = 1;
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Uso de Declaraciones con JSPs</title>
</head>
<body>
<h1>Uso de Declaraciones con JSPs</h1>
Valor usuario por medio del atributo: <%=
[Link]%>
<br>
<br>
Contador de Visitas: <%=[Link]++%>
</body>
</html>
4. sintaxis xml.
cada elemento jsp tiene su equivalente en sintaxis xml
estos archivos son jsp pero con extension jspx
4.1 expresion
<jsp:expression>"El resultado de 2*3 = " +
2*3</jsp:expression>
el run seria:
El resultado de 2*3 = 6
4.2 scriptlet
<jsp:scriptlet>
String nombreAplicacion =
[Link]();
</jsp:scriptlet>
aquí le asignamos a la variable nombreAplicacion el
context patch o la ruta del codigo que estamos
corriendo
y asi imprimimospor pantalla la variable
Nombre de la aplicacion:
<jsp:expression>nombreAplicacion</jsp:expression>
4.3 Contador de Visitas:
<jsp:expression>[Link]++</jsp:expression
>
ejemplo de lo anterior
[Link]:
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo de documentos JSPs</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Ejemplo de documentos JSPs</h1>
<br>
<a href="[Link]">Link al Jspx</a>
</body>
</html>
[Link]
<?xml version="1.0" encoding="UTF-8"?>
<jsp:root xmlns:jsp="[Link]
version="2.0">
<jsp:[Link] contentType="text/html"
pageEncoding="UTF-8"/>
<!--Uso de declaraciones-->
<jsp:declaration>
private int contadorVisitas = 1;
</jsp:declaration>
<html>
<body>
<h1>ejemplo de un documento JSPx</h1>
<!--ejemplo de salida de texto-->
<jsp:text>Saludos desde un documento
JSPx</jsp:text>
<br/>
<!--ejemplo de expresions con JSPx-->
<jsp:expression>"El resultado de 2*3 = " +
2*3</jsp:expression>
<br/>
<!--Ejemplo de Scriplet-->
<jsp:scriptlet>
String nombreAplicacion =
[Link]();
</jsp:scriptlet>
Nombre de la aplicacion:
<jsp:expression>nombreAplicacion</jsp:expression>
<br/>
Contador de Visitas:
<jsp:expression>[Link]++</jsp:expression
>
</body>
</html>
</jsp:root>
4.4 declaraciones o variables de clase
<jsp:declaration>
private int contadorVisitas = 1;
</jsp:declaration>
DIRECTIVAS EN LOS JSP
LAS DIRECTIVAS NOS PERMITEN CONTROLAR EL
COMPORTAMIENTO DE UN JSP
1. atributo import
El atributo de import dentro de la directiva page nos va a
permitir especificar cuáles son las clases que
vamos a importar dentro de nuestro JSP e
indirectamente a nuestro servlet generado a partir de la
solicitud a
nuestro JSP. Aunque el import lo podemos declarar en
cualquier parte de nuestro JSP lo recomendable es
ponerlo al principio como una buena práctica. Para
especificar las clases que queremos importar en
nuestro JSP
podemos utilizar la sintaxis
<%@ page import=”paquete.Clase1, [Link]”
%>.
Ejemplo
<%@page import="[Link], [Link]"
%>
Aquí estamos importando la clase conversiones que se
encuentra dentro del paquete utilerias
2. contentType
Este atributo nos
permite especificar el tipo de respuesta a nuestro
cliente web.
sintaxis
<%@page contentType=”MIME-Type” %>
Ejemplo:
<%@page contentType="application/[Link]-excel" %>
Aquí estamos generando un archivo tipo Excel
3. atributo SESSION
Session: <% @page session=”true” %> También vamos a
poder indicar por medio de esta directiva page si el
JSP va poder acceder al objeto sesión que se haya
creado anteriormente por ejemplo desde un JSP o
desde
otro servlet. Por default un JSP está configurado para
que podamos acceder al objeto session, si queremos
indicar lo contrario tendremos que especificar false en
esta directiva y si especificamos false en esta directiva
lo
que sucede es que dentro de nuestras clases implícitas
de un JSP ya no vamos a tener acceso a nuestra
variable.
[Link] isELIgnored:
Sintaxis
<%@ page isELIgnored=”false” %> También tenemos
otro atributo llamado isELIgnored
esto lo que significa es que si queremos deshabilitar el
manejo de expression language
[Link] buffer:
Sintaxis
<%@ page buffer=”tamañoEnKb” %>
dentro de esta misma directiva page tenemos acceso
al
atributo buffer. Con este atributo buffer podemos
especificar el tamaño en Kb que puede contener nuestro
buffer del JSP y si llegamos al tamaño especificado en
este JSP entonces se hace un flush o vaciado de
manera
automática de todo el flujo que hayamos agregado a
nuestro printWriter o a nuestro output servlet
dependiendo el caso.
[Link]
Sintaxis
<%@ page errorPage=”url_relativo_al_JSP_de_error” %>
con el atributo erroPage vamos a especificar cual va
a ser el JSP que va a manejar las excepciones en caso
de que el JSP provoque un error, y para configurar el
JSP
que va a manejar los errores tenemos que indicar la
directiva isErrorPage con la siguiente sintaxis:
<%@ page isErrorPage=”true” %> indicando que ese JSP
si es el JSP que va a manejar los errores, por default
los JSPs tienen el valor de esta directiva igual a false
debido a que los JSPs no van a manejar las
excepciones de
manera automática sino hay que configurarlos para que
puedan acceder a la pila de errores.
,,,
[Link]
Sintaxis
<%@ page isThreadSafe=”true” %>
Por
default el contenedor de servlets, considera a un JSP
como seguro para ser accedido por múltiples hilos, es
decir, el valor por default es true. Si se desea que el
contenido del JSP no sea accedido por distintos hilos
entonces se debe especificar este valor como false.
[Link] extends
Sintaxis
<%@ page extends=”[Link]” %>
nos va a permitir heredar de una clase según
especifiquemos en ese atributo y por lo tanto nuestro
JSP va a heredar las
características de la clase que especifiquemos
sintaxis para llamar a enlaces dentro de un JSP o
servlet
<a href="nombre del archivo con la extension">mensaje
del link</a>
ejemplo
<a href="[Link]">Link al reporte de Excel</a>
ejemplo de todo lo anterior
[Link]
[Link]
<!DOCTYPE html>
<html>
<head>
<title>Generacion de Reporte Excel</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Generacion de Reporte Excel</h1>
<br/>
<a href="[Link]">Link al reporte de
Excel</a>
</body>
</html>
[Link]
<%@page import="[Link], [Link]"
%>
<%@page contentType="application/[Link]-excel" %>
<%
String nombreArchivo = "[Link]";
[Link]("Content-Disposition",
"attachment;filename=" + nombreArchivo);
%>
<!DOCTYPE html>
<html>
<head>
<title>Reporte de Excel</title>
</head>
<body>
<h1>Reporte de Excel</h1>
<br/>
<table border="1">
<tr>
<th>Curso</th>
<th>Descripcion</th>
<th>Fecha</th>
</tr>
<tr>
<td>1. Fundamentos de Java</td>
<td>Aprenderemos la sintaxis basica de
Java</td>
<td><%= [Link](new
Date())%></td>
</tr>
<tr>
<td>2. Programacion con Java</td>
<td>Pondremos en practica conceptos de la
programacion orientada a objetos</td>
<td><%= [Link](new
Date())%></td>
</tr>
</table>
</body>
</html>
clase java dentro del paquete de utilerias
package utilerias;
/*
* Click
nbfs://nbhost/SystemFileSystem/Templates/Licenses/l
[Link] to change this license
* Click
nbfs://nbhost/SystemFileSystem/Templates/Classes/C
[Link] to edit this template
*/
/**
* @author CIRCET LANZAROTE
*/
import [Link];
import [Link];
public class conversiones {
private static final String FORMATO_FECHA = "dd-MM";
public static String format(Date fecha){
SimpleDateFormat formateador = new
SimpleDateFormat(FORMATO_FECHA);
return [Link](fecha);
}
<%@page import="[Link], [Link]"
%>
<%@page contentType="application/[Link]-excel" %>
MANEJO DE EXCEPCIONES
CON JSP
pasos
1. declaramos el atributo errorpage en el
jsp que podría dar el error, la sintaxis
seria;
<%@page errorPage="ruta del jsp"%>
ejemplo
<%@page errorPage="/WEB-INF/[Link]"%>
[Link] un archivo jsp, dentro de la
carpeta WEB-INFO, este jsp es el que va a
manejar la excepción, se crea dentro de
esta carpeta para limitar su acceso desde
afuera
3. importamos los paquetes
<%@page isErrorPage="true" %>
<%@page import="[Link].*" %>
4. mediante una expresión accedemos al
mensaje que nos lanza el sistema
ejemplo
<%= [Link]()%>
5. para imprimir los detalles del error
usamos el objeto out
<% [Link](new PrintWriter(out));%>;
6. usamos la etiqueta text area para
delimitar el tamaño del mensaje de error
ejemplo
<textarea cols="30" rows="5">
<% [Link](new
PrintWriter(out));%>;
</textarea>
INCLUSIÓN DE ARCHIVOS
UTILIZANDO JSP
En primer lugar tenemos la inclusión estática también
conocida como inclusión en tiempo de
traducción (translation time), por otro lado tenemos la
inclusión dinámica también conocida
como inclusión en tiempo de ejecución (request time).
Vamos a revisar las diferencias entre cada
tipo de inclusión de archivos.
Comencemos con la inclusión estática. Este concepto
lo podemos aplicar utilizando la directiva
include y según vimos anteriormente en el tema de
directivas podemos reconocer a esta directiva
por medio del símbolo @. Posteriormente lo que
hacemos es especificar por medio del atributo
file el nombre del JSP que vamos a incluir en el JSP
principal.
pasos para la inclusion estatica
[Link] la pagina [Link] que va a
llamar a los archivos estaticos
la sintaxis para la llamada es
<%@ include file=”[Link]” %>
ejemplo
si el archivo que queremos llamar se llama noticias1 y
está en la carpera paginas seria asi
<%@include file="paginas/[Link]" %>
también podemos llmara archivos jsp por ejemplo
<%@include file="paginas/[Link]" %>
el index quedaría si
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Ejemplo Inclusion Estatica</title>
</head>
<body>
<h1>Ejemplo Inclusion Estatica</h1>
<br/>
<%@include file="paginas/[Link]" %>
<br/>
<%@include file="paginas/[Link]" %>
</html>
2. creamos los archivos que estamos
llamando
noticias1
No necesitamos agregar los tags de inicio de html
ejemplo
<h4>Universidad Java</h4>
<a href="[Link]
target="_blank">click para mas detalles</a>
y el archivo jsp
<!-- No necesitamos agregar los tags de inicio de html
-->
<h4>Global Mentoring</h4>
<a href="[Link]
target="_blank">click para mas detalles</a>
INCLUSION DINAMICA
La sintaxis según hemos comentado es una acción de
los JSPs, una acción tiene la siguiente sintaxis:
<jsp:include page=”[Link]” /> abrir el
picoparéntesis(<) posteriormente ponemos el prefijo
jsp y utilizamos dos puntos (:) seguido del nombre
include, esta es la acción que estamos utilizando la
acción de include y posteriormente especificamos por
medio del atributo page la página jsp que vamos a
incluir en nuestro jsp principal.
El objetivo de esta inclusión dinámica es la misma que
la inclusión estática, lo que queremos conseguir es
reutilizar código ya sea que provenga de texto plano de
HTML o de alguna otra fuente como puede ser un
JSP.
básicamente son dos archivos jsp o html que se
ejecutan a la par
pasos para la inclusion
dinamica
[Link] nuestro archivo index que va a llamar a los
jsp
2. la sintaxis para la llamada seria
<jsp:include page=”[Link]” /> a
ejemplo
el archivo que vamos a llamar es [Link] y
está dentro de la carpeta paginas , entonces seria
<jsp:include page="paginas/[Link]" />
2. para llamar a un archico y pasarle
parámetros seria
<jsp:include page="WEB-INF/[Link]">
<jsp:param name="colorFondo" value="yellow"/>
</jsp:include>
donde vamos a pasar una variable que se llama
colorFondo
ejemplo de todo
[Link]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Ejemplo Inclusion Dinamica</title>
</head>
<body>
<h1>Ejemplo Inclusion Dinamica</h1>
<br/>
<jsp:include page="paginas/[Link]" />
<br/>
<jsp:include page="WEB-INF/[Link]">
<jsp:param name="colorFondo" value="yellow"/>
</jsp:include>
</body>
</html>
[Link] dentro de la carpeta paginas
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<br/>
Inclusion de Contenido dinamico desde un JSP
publico
<br/>
Nombre de la aplicacion: <%=
[Link]() %>
</body>
</html>
[Link] dentro de carpeta web-INF
<%
String colorFondo =
[Link]("colorFondo");
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body bgcolor='<%=colorFondo%>'>
</body>
</html>
EL RUN SERIA
MANEJO DE JAVABEANS
Los JSP’s nos van a permitir acceder a los JavaBeans
que tengamos declarados en nuestra
aplicación web. Un JavaBean simplemente es una clase
pura de Java que sigue ciertas reglas. Una
de las reglas es que debe de tener un constructor vacío
y esa restricción es por lo siguiente, si
tenemos una clase que no tiene un constructor vacío
entonces deberemos tener algún
constructor con cierto número de parámetros, por lo
que cuando el JSP trate de acceder a este
JavaBean debe saber cuántos parámetros se le deben
de especificar para poder crear una
estancia de objeto JavaBean, y esto implica mayor
complejidad al momento de instanciar un
objeto Java.
Por ello, los JavaBeans requieren de un constructor
vacío, para que no haya necesidad de indicar
cuales son los argumentos que se necesitan para poder
instanciar una clase de un JavaBean.
ALCANCE DE ATRIBUTOS EN
UN JSP
Básicamente el alcance de una variable es la duración o
tiempo de uso de una variable en una aplicación web.
Podemos observar que tenemos cuatro alcances o en
inglés scope. Según hemos revisado anteriormente,
hemos
utilizado el objeto request para agregar cierta
información y también hemos utilizado el objeto session
para
compartir información que puede durar más que un
request, es decir, una sesión puede administrar varias
peticiones
(request) y por lo tanto la información que
almacenemos en una sesión dura más que el tiempo
que si la
almacenáramos a nivel del objeto request.
Tenemos la acción de useBean, esto nos va a permitir
acceder a un bean en un alcance
especificado. Podemos o no especificar el alcance, si
no la especificamos dentro de nuestra
sintaxis del jsp:useBean, el alcance por default es de
tipo page. En cambio si queremos indicar
alguno otro alcance tenemos que poner scope=request,
session o application. La sintaxis que
vamos a utilizar es similar a esta <jsp:useBean
id=”nombre” class=”[Link]”/>.
Con esta sintaxis en pocas palabras es como si
creáramos una nueva instancia y el nombreBean
es el nombre de nuestra variable y el
[Link] es el tipo de la clase que
estamos
indicando para generar este nuevo objeto nombreBean.
- Posteriormente tenemos la acción de setProperty. Esta
acción nos permite modificar una o
varias propiedades de un bean especificado. Para esta
acción especificamos el nombre del bean
previamente definido con la acción jsp:useBean,
posteriormente especificamos la propiedad a
modificar, seguido del valor del mismo. Ej.
property=”nombreUsuario”, esto indirectamente va a
mandar a llamar el método setNombreUsuario del
JavaBean respectivo.
- Por último tenemos la acción de getProperty. Esta
acción nos permite acceder a una propiedad
del bean especificado. Utilizamos la acción
jsp:getProperty, posteriormente indicamos el nombre
del bean nombreBean que vamos a utilizar, es decir, el
nombre de la instancia declarada
previamente con la acción jsp:useBean. Posteriormente
indicamos una propiedad a acceder, ej.
property=”nombreUsuario”, indirectamente se va a
mandar a llamar el método
getNombreUsuario().
PASOS PARA EL MANEJO DE
UN JAVA BEANS
1. creamos el [Link] que va a llamar a los enlaces
que contienen nuestro jsp de setter y getter
ejemplo
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Ejemplo JavaBeans</title>
</head>
<body>
<h1>Ejemplo de JavaBeans</h1>
<a href="[Link]">Modificar valores del
JavaBean de Rectangulo</a>
<br/>
<a href="[Link]">Leer valores del JavaBean
de Rectangulo</a>
<br/>
<br/>
</body>
</html>
2. creamos dentro de la carpeta web un
Jsp que modifica a nuestro JavaBean
usamos la opcoin de jsp use bean
la sintaxis seria
<jsp:useBean id="nombre variable"
class="[Link] scope="alcance" />
3. creamos las variables que vamos a
enciar al javabean
<%
int baseValor = 5;
int alturaValor = 10;
%>
4. mandamos a llmar los métodos set de
este java bean
utilizando acciones de jsp
modificamos los atributos del javabean
usamos las acciones de set property
la sintaxis es
<jsp:setProperty name="nombre de la variable que
hemos creado en el [Link]" property="propiedad
que queremos modificar" value="<%=el valos de la
variable que hemos decidido%>" />
ejemplo
<jsp:setProperty name="rectangulo" property="base"
value="<%=baseValor%>" />
co esto estamos llamando al método setBase para
modficar el valos de base
ahora lo mismo con el valor alrura:
<jsp:setProperty name="rectangulo" property="altura"
value="<%=alturaValor%>" />
imprimimos los nuevos valores que se han agregado
<br/>
Nuevo valor base: <%=baseValor%>
<br/>
Nuevo valor altura: <%=alturaValor%>
<br/>
5. creamos un archivo JSP que lee los
valores del JavaBean
usamos una acción para leer un objeto de tipo
rectángulo en el alcance de sesión, si ya existe lo va a
recuperar y si no existe lo va a crear
[Link] el JavaBean con el que
vamos a trabajar
definimos la variable, el path y su alcance
<jsp:useBean id="rectangulo" class="[Link]"
scope="session" />
7. recuperamos la información del java
bean usando la acción de get property
llamaos al método get de la base
sintaxis :<jsp:useBean id="nombre variable"
class="[Link]" scope="alcance" />
ejemplo
<jsp:useBean id="rectangulo" class="[Link]"
scope="session" />
ahora llamamos al método get de la altura
Valor altura: <jsp:getProperty name="rectangulo"
property="altura" />
mandamos a llmar al método get area
Valor area: <jsp:getProperty name="rectangulo"
property="area" />
agreagamos u href para regrear al inicio
ejemplo de todo lo anterior
[Link]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Ejemplo JavaBeans</title>
</head>
<body>
<h1>Ejemplo de JavaBeans</h1>
<a href="[Link]">Modificar valores del
JavaBean de Rectangulo</a>
<br/>
<a href="[Link]">Leer valores del JavaBean
de Rectangulo</a>
<br/>
<br/>
</body>
</html>
getterJsp
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP que lee los valores del JavaBean</title>
</head>
<body>
<h1>JSP que lee los valores del JavaBean</h1>
<jsp:useBean id="rectangulo"
class="[Link]" scope="session" />
<br/>
Valor base: <jsp:getProperty name="rectangulo"
property="base" />
<br/>
Valor altura: <jsp:getProperty name="rectangulo"
property="altura" />
<br/>
Valor area: <jsp:getProperty name="rectangulo"
property="area" />
<br/>
<br/>
<a href="[Link]">Regresar al inicio</a>
</body>
</html>
setterJsp
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Jsp que modifica a un JavaBean</title>
</head>
<body>
<h1>Jsp que modifica a un JavaBean</h1>
<jsp:useBean id="rectangulo"
class="[Link]" scope="session" />
Modificamos los atributos:
<br/>
<br/>
<%
int baseValor = 5;
int alturaValor = 10;
%>
<jsp:setProperty name="rectangulo"
property="base" value="<%=baseValor%>" />
<jsp:setProperty name="rectangulo"
property="altura" value="<%=alturaValor%>" />
<br/>
Nuevo valor base: <%=baseValor%>
<br/>
Nuevo valor altura: <%=alturaValor%>
<br/>
<br/>
<a href="[Link]">Regresar al inicio</a>
</body>
</html>
java class Rectángulo dentro del paquete beans
package beans;
public class Rectangulo {
private int base;
private int altura;
public int getAltura(){
return [Link];
public void setAltura(int altura){
[Link] = altura;
public int getBase(){
return [Link];
public void setBase(int base){
[Link] = base;
public int getArea(){
return [Link] * [Link];
}
EXPRESSION LANGUAGE
nos permite trabajar de una manera mas comoda con
los javabeans
Como podemos observar la sintaxis de los JavaBeans
según hemos visto tenemos que declarar el nombre del
bean que
vamos a utilizar dentro del JSP y posteriormente
acceder a la propiedad, esta sintaxis puede ser muy
extensa si es que
estamos haciendo mucho código para despliegue de
propiedades ejemplo:
<jsp:useBean id=”nombreBean” class=”ClaseBean”/>
<jsp:getProperty name=”nombreBean”
propiedad=”nombre Propiedad”/>
En cambio, con la sintaxis de Expression Language
únicamente debemos de especificar el nombre del bean
que vamos
a utilizar y el nombre de la propiedad a la cual queremos
acceder, la forma más común de hacerlo es:
${[Link]}, pero también
tenemos otra forma
${nombreBean[“nombrePropiedad”]}
sintaxis con expression language
${nombreBean[“nombrePropiedad”}
o esta
${nombreBean[“nombrePropiedad”]}
:
pasos para trabajar con
expression language
1. creamos el index con el enlace el cual
va a llamar a un archivo jsp
dentro del enlace podemos pasar un parámetro al jsp ,
por ejemplo la variable usuario con el valor "juan"
ejemplo
<a href="[Link]?usuario=juan">Objetos
implicitos con EL</a>
el [Link] completo quedaría asi
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Ejemplo de Expression Language</title>
</head>
<body>
<h1>Ejemplo de Expression Language</h1>
<br/>
<a
href="[Link]?usuario=juan">Objetos
implicitos con EL</a>
</body>
</html>
2.
3. accedemos a los valores implícitos
<li>Navegador del Cliente: ${header["User-Agent"]}</li>
<li>Id Sesion: ${[Link]}</li>
<li>Web Server:
${[Link]}</li>
<li>Valor parametro: ${[Link]}</li>
<li>Valor parametro: ${[Link]}</li>
Navegador del Cliente: ${header["User-Agent"]}
Id Sesion: ${[Link]}
Web Server: ${[Link]}
Valor parametro: ${[Link]}
JSP Standard Tag Library, también conocido como
JSTL.
:
PASOS PARA TRABAJAR
CON JSTL
[Link] el index con el enlace el cual
va a llamar a un archivo jsp
dentro del enlace podemos pasar un parámetro al jsp ,
por ejemplo la variable opcion con el valor 1
ejemplo
<a href="[Link]?opcion=1">Ir al JSP de JSTL
core</a>
el index completo quedria asi
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Ejemplo JSTL</title>
</head>
<body>
<h1>Ejemplo JSTL</h1>
<br/>
<br/>
<a href="[Link]?opcion=1">Ir al JSP de JSTL
core</a>
</body>
</html>
2. creamos el archivo .jsp que va a
contener el JSTL por ejemplo [Link]
[Link] el tablib que es necesario
para utilizar la librería de jstl
<%@taglib prefix="c"
uri="[Link] %>
<%@taglib prefix="c"
uri="[Link] %>
[Link] nuestra librería de jstl de
core mediante la etiqueta de set para
crear la variable nombre
<c:set var="nombre" value="Ernesto" />
con esto estamos definiendo una variable de tipo string
con el valor de ernesto
[Link] esta variable con la
eriqueta de out
Variable nombre: <c:out value="${nombre}"/>
[Link] otra variable pero usando
codigo html
<c:out value="<h4>Hola</h4>" escapeXml="false"/>
7. uso condicional if
[Link] la variable bandera con valor
azul
<c:set var="bandera" value="true" />
<c:if test="${bandera}" >
La bandera es verdadera
</c:if>
9 codigo condicionado usando switch
para esto usamos el valor de la variable opción que
enviamos desde [Link]
aquí choose equivale al switch
y when equivale a case
<c:if test="${[Link] != null}">
<c:choose>
<c:when test="${[Link] == 1}" >
<br/>
Opcion 1 seleccionada
</c:when>
<c:when test="${[Link] == 2}" >
<br/>
Opcion 2 seleccionada
</c:when>
<c:otherwise>
<br/>
Opcion proporcionada desconocida:
${[Link]}
</c:otherwise>
</c:choose>
</c:if>
10: uso de for each
para esto creamos una variable arreglo de tipo strin con
nombres
ejemplo
String nombres[] = {"Claudia", "Pedro", "Juan"};
<%
String nombres[] = {"Claudia", "Pedro", "Juan"};
[Link]("nombres", nombres);
%>
usamos el objeto implícito request para acceder a la
variable nomnre
[Link]("nombres", nombres);
11. recorremos la lista de nombres
utilizando jstl y expression laguage
<c:forEach var="persona" items="${nombres}">
<li>${persona}</li>
</c:forEach>
ejemplo de todo lo anterior
[Link]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Ejemplo JSTL</title>
</head>
<body>
<h1>Ejemplo JSTL</h1>
<br/>
<br/>
<a href="[Link]?opcion=1">Ir al JSP de JSTL
core</a>
</body>
</html>
[Link]
<%@taglib prefix="c"
uri="[Link] %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSTL Core</title>
</head>
<body>
<h1>JSTL Core (Jsp Standard Tag Library)</h1>
<!--Manipulacion de Variables-->
<!--Definimos la variable-->
<c:set var="nombre" value="Ernesto" />
<!--Desplegamos el valor de la variable-->
Variable nombre: <c:out value="${nombre}"/>
<br/>
<br/>
Variable con codigo html:
<c:out value="<h4>Hola</h4>" escapeXml="false"/>
<br/>
<br/>
<!--Codigo condicionado, uso de if-->
<c:set var="bandera" value="true" />
<c:if test="${bandera}" >
La bandera es verdadera
</c:if>
<br/>
<!--Codigo condicionado, uso de switch-->
<c:if test="${[Link] != null}">
<c:choose>
<c:when test="${[Link] == 1}" >
<br/>
Opcion 1 seleccionada
</c:when>
<c:when test="${[Link] == 2}" >
<br/>
Opcion 2 seleccionada
</c:when>
<c:otherwise>
<br/>
Opcion proporcionada desconocida:
${[Link]}
</c:otherwise>
</c:choose>
</c:if>
<!--iteracion de un arreglo-->
<%
String nombres[] = {"Claudia", "Pedro", "Juan"};
[Link]("nombres", nombres);
%>
<br/>
<br/>
Lista de Nombres:
<br/>
<ul>
<c:forEach var="persona" items="${nombres}">
<li>${persona}</li>
</c:forEach>
</ul>
<br/>
<a href="[Link]">Regresar al inicio</a>
</body>
</html>
patrón de diseño Model View Controller, también
conocido como
MVC.
96
COMO CREAR NUESTRAS
PROPIAS ETIQUETAS
1. CREAMOS LA CLASE QUE VA A CONTENER LA
ETIQUETA POER EJEMPLO : HolaMundoTag
2. ESTA CLASE DEBE EXTENDER DE TagSupport:
public class HolaMundoTag extends TagSupport{
3. CREAMOS LOS METODOS doStartTag Y doEndTag
@Override
public int doStartTag() throws JspException {
try {
[Link]().println("Hola Mundo");
} catch (IOException ex) {
throw new JspException("Error en el contexto de
pagina/servlet");
return EVAL_BODY_TAG;
@Override
public int doEndTag() throws JspException {
return EVAL_PAGE;
DONDE:"Hola Mundo es el mensaje que va a mostrar mi
etiqueta y donde ""Error en el contexto de
pagina/servlet" es el mensaje de ingformacion que va a
mostrar mi etiqueta cuando yo pase el raton ñpor
encima
3. LA CLASE COMPLETA DE LA ETIQUETA QUEDARIA
ASI;
import [Link];
import static
[Link].EVAL_BODY_TAG;
import [Link];
import [Link];
public class HolaMundoTag extends TagSupport{
@Override
public int doStartTag() throws JspException {
try {
[Link]().println("Hola Mundo");
} catch (IOException ex) {
throw new JspException("Error en el contexto de
pagina/servlet");
return EVAL_BODY_TAG;
@Override
public int doEndTag() throws JspException {
return EVAL_PAGE;
}
}
[Link] EL ARCHIVO ,tld DONDE VAMOS A INCLUIR
MI ETIQUETA POR EJEMPLO [Link](Tag LIbrary
Descriptor)
5. INCLUIMOS EL SIGUIENTE BLOQUE
<tag>
<name>holaMundo</name>
<tag-class>[Link]</tag-class>
<body-content>empty</body-content>
<info>esta etiqueta solo pinta cutradas</info>
</tag>
donde : a) <name>: holaMundo= nombre de mi
etiqueta cuando la invoque dentro de la pagina jsp
<etiq:holaMundo/><br/>
b) <tag-class> : es el nombre del archivo de la clase que
cree en el paso uno en este caso
:HolaMundoTag([Link]) es la ruta donde
tags es el nombre del paquete y HolaMundoTag es el
nombre de la clase
c)<info>: es la informacion que va a mostrar m i etiqueta
cuando pase el raton por encima
ejemplo completo del archivo [Link]:
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1"
xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
e
[Link]
[Link]">
<tlib-version>1.0</tlib-version>
<short-name>[Link]</short-name>
<uri>/[Link]</uri>
<tag>
<name>holaMundo</name>
<tag-class>[Link]</tag-class>
<body-content>empty</body-content>
<info>esta etiqueta solo pinta cutradas</info>
</tag>
<tag>
<name>pruebaEtiqueta</name>
<tag-class>[Link]</tag-class>
<body-content>empty</body-content>
<info>esta etiqueta solo pinta cutradas2</info>
</tag>
<tag>
<name>sumar</name>
<tag-class>[Link]</tag-class>
<body-content>empty</body-content>
<info>esta etiqueta suma los dos numeros que se le
pasan como atributo</info>
<attribute>
<name>num1</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>num2</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
<tag>
<name>longitud</name>
<tag-class>[Link]</tag-class>
<body-content>JSP</body-content>
<info>esta etiqueta devuelve la longitud del
cuerpo</info>
</tag>
<tag>
<name>form</name>
<tag-class>[Link]</tag-class>
<body-content>empty</body-content>
<info>esta etiqueta pinta un form con los
campos</info>
<attribute>
<name>nombre</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>campos</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>action</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>valor</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute> <attribute>
<name>metodo</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
6. EN EL ARCHIVO JSP DONDE VOY A USAR MI
ETIQUETA DEBO IMPORTAR EL [Link] QUE
CONTIENE MI ETIQUETA, QUE EN ESTE CASO SE
LLAMA [Link] ejemplo:
<%@taglib uri="../[Link]" prefix="etiq" %>
donde ../ ; indica la ruta del archivo [Link]
[Link] MI ETIQUETA DE LA SIGUIENTE MANERA:
<etiq:holaMundo/><br/>
donde: holaMundo es el name en el archivo [Link]
COMO CREAR ETIQUETA QUE
LLEVE UN FORMULARIO
1. CREAMOS LA CLASE QUE VA A CONTENER EL
FORMULARIO:
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/**
*
* @author Raquel
*/
public class Form extends TagSupport {
private String nombre;
private ArrayList<String> campos;
private String action;
private String valor;
private String metodo;
@Override
public int doStartTag() throws JspException {
try {
String html = "\n\n<form ";
html += "name='" + nombre + "' action='" + action
+ "' ";
html += "method='" + metodo + "'><br/>\n";
html += "<table border='0' bgcolor='#99ffcc'>\n";
for (int i = 0; i < [Link](); i++) {
html += "<tr><td style='font-size:10pt'>";
html += [Link](i) + ":</td>\n<td>";
html += "<input type='text' name='" +
[Link](i) + "' "
+
"style='border:1;background:#FFEEFF;color:black;font-si
ze:8pt'></td>\n";
html += "</tr>";
html += "<tr><td> </td><td
align='right'><input type='reset'
value='Limpiar'></td></tr>";
html += "<tr><td> </td><td
align='right'><input type='submit' value='" + valor +
"'></td></tr>";
html += "</table></form>";
[Link]().print(html);
} catch (IOException ex) {
throw new JspException("mensajito");
return SKIP_BODY;
@Override
public int doEndTag() throws JspException{
return EVAL_PAGE;
public void setNombre(String nombre) {
[Link] = nombre;
public void setCampos(ArrayList<String> campos) {
[Link] = campos;
public void setAction(String action) {
[Link] = action;
public void setValor(String valor) {
[Link] = valor;
public void setMetodo(String metodo) {
[Link] = metodo;
}
2. INTRODUCMOS ESTE BLOQUE EN EL ARCHIVO .TLD
<tag>
<name>form</name>
<tag-class>[Link]</tag-class>
<body-content>empty</body-content>
<info>esta etiqueta pinta un form con los
campos</info>
<attribute>
<name>nombre</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>campos</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>action</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>valor</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute> <attribute>
<name>metodo</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
[Link] EL ARCHIVO DONDE VAMOS A INVOCAR LA
ETIQUETA IMPORTAMOS EL ARCHIVO ,TLD QUE
ACABAMOS DE CREAR
<%@taglib uri="../[Link]" prefix="etiq" %>
4. INVOCAMOS LA ETIQUETA
<etiq:form nombre="altas" campos="<%=campos%>"
action="[Link]" valor="Enviar" metodo="post"/>
EJEMPLO COMPLETO
ARCHIVO .JSP
<%@page contentType="text/html"
pageEncoding="UTF-8"
import = "[Link]"%>
<%@taglib uri="../[Link]" prefix="etiq" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
ArrayList<String> campos = new ArrayList<>();
[Link]("Nombre");
[Link]("Apellidos");
[Link]("Dni");
%>
<etiq:holaMundo/><br/>
<etiq:pruebaEtiqueta/><br>
<etiq:sumar num1="1" num2="4"/><br/>
<etiq:longitud>Esta es la cadena de la que quiero
que me digas la longitud</etiq:longitud><br/>
<etiq:form nombre="altas"
campos="<%=campos%>" action="[Link]"
valor="Enviar" metodo="post"/>
</body>
</html>
COMO CREAR ETIQUETA QUE
LLEVE PARÁMETROS
1- CREAMOS EL ARCHIVO .JAVA OSEA. UNA CLASE
QUE VA A CONTENER NUESRTA EQIETA
public class SumarTag extends TagSupport {
private int num1, num2;
@Override
public int doStartTag() throws JspException {
try {
[Link]().println("Suma: " +
(num1+num2));
} catch (IOException ex) {
throw new JspException("Error en el contexto de
pagina/servlet");
return SKIP_BODY;
@Override
public int doEndTag() throws JspException {
return EVAL_PAGE;
public void setNum1(int num1) {
this.num1 = num1;
public void setNum2(int num2) {
this.num2 = num2;
}
2. CREAMOS EL ARCHIVO .TLD Y AGREAGAMOS ESTE
BLOQUE
<tag>
<name>sumar</name>
<tag-class>[Link]</tag-class>
<body-content>empty</body-content>
<info>esta etiqueta suma los dos numeros que se le
pasan como atributo</info>
<attribute>
<name>num1</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>num2</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
3- EN EL ARCHIVO .JSP IMPORTAMOS EL ARCHIVO
,TLD QUE ACABAMOS DE CREAR
<%@taglib uri="../[Link]" prefix="etiq" %>
4. LLAMAMOS LA ETIQUETA DESDE EL ARCHIVO JSP
<etiq:sumar num1="1" num2="4"/><br/>
<%@page contentType="text/html"
pageEncoding="UTF-8"
import = "[Link]"%>
<%@taglib uri="../[Link]" prefix="etiq" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
ArrayList<String> campos = new ArrayList<>();
[Link]("Nombre");
[Link]("Apellidos");
[Link]("Dni");
%>
<etiq:holaMundo/><br/>
<etiq:pruebaEtiqueta/><br>
<etiq:sumar num1="1" num2="4"/><br/>
<etiq:longitud>Esta es la cadena de la que quiero
que me digas la longitud</etiq:longitud><br/>
<etiq:form nombre="altas"
campos="<%=campos%>" action="[Link]"
valor="Enviar" metodo="post"/>
</body>
</html>
PATRÓN DE DISEÑO MVC
MODELO VISTA
CONTROLADOR (MVC)
PASOS PARA UN SERVLET
CONTROLADOR
1. CREAMOS EL [Link] QUE VA A LLMAR AL
SERVLET CONTROLADOR
esta vex en vez de usar el context path como lo hemos
eatdo usando hasta ahora, vamos a usar el contextpath ,
esto se utiliza oara que no halla problemas por si se
cabiar el nombre de unicacion de la carpeta del servlet
sintaxis:
usando expression language seria: <a
href="${[Link]}/nombre del
servlet">
por ejemplo
<a
href="${[Link]}/ServletContr
olador">
el [Link] quedaría asi:
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo MVC</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Ejemplo MVC</h1>
<br/>
<a
href="${[Link]}/ServletContr
olador">
Link al servlet controlador que despliega las
variables
</a>
</body>
</html>
[Link] la clase de modelo( modelo
vista controlador)
creamos una clase llamada Rectángulo y lo
depositamos en el paquete modelo
esta clase va ser las veces de modelo en el patron de
modelo vista controlador
esta clase rectagulo es un javabeans
recordemos que los java las características de un java
beans son:
entoves la clase Rectángulo quedaría asi:
package modelo;
/**
* @author CIRCET LANZAROTE
*/
public class Rectangulo {
private int base;
private int altura;
public Rectangulo(){}
public Rectangulo(int base, int altura){
[Link] = base;
[Link] = altura;
}
public int getBase() {
return base;
public void setBase(int base) {
[Link] = base;
public int getAltura() {
return altura;
public void setAltura(int altura) {
[Link] = altura;
}
public int getArea(){
return [Link] * [Link];
3. ahora vamos a crear nuestro
controlador, para esto creamos un archivo
[Link] y lo depositamos en el paquete controlador,
lo hacemos asi para que sea muy explicito el roll que
desempeña cada una de las clases en el modelo vista
controlador
4. definimos nuestro servlet
5. creamos una clase que va a contener
nuestro servlet por ejemplo CarritoServlet
6. convertimos esta clase en un servlet
ecribiendo @WebServlet("url del servlet") justo por
encima del nombre de la clase para este ejemplo seria
@WebServlet("/CarritoServlet") public class
CarritoServlet extends HttpServlet{
7. hacemos un extends de la clase
HttpServlet ejemplo public class
CarritoServlet extends HttpServlet{
8. sobre escribimos el metodo dopost
protected void doGet(HttpServletRequest
request, HttpServletResponse response) {
8. creamos nuestro javabeans
usamos la clase Rectangulo el cual se encuentra en el
paquete modelo para crear un objeto llamado rec, de
tipo Rectángulo con los valores de base 3 y altura 6
ejemplo
Rectangulo rec = new Rectangulo(3,6);
9. importamos la clase Rectángulo que se
encuentra en el paquete modelo
import [Link];
[Link] el javabean a algun
alcance
ya sea request, session o aplication
ejemplo
HttpSession sesion = [Link]();
[Link]("rectangulo", rec);
creamos una variable de tjupo string y su valor es
Saludos desde el Servlet
ejemplo
[Link]("mensaje", "Saludos desde el
Servlet");
posteriormente vamos a buscar este variable mensaje
desde el jsp para mostrarla por pantalla
el servlet ya no se va a encargar de mostrar la
informacion de cara al cliente
de esto se va a encargar el jsp
11. creamos una variable llamada sesión
para esto usamos nuetro objeto httpsession y con la
ayuda de la variable request solicitamos el método
getsessioncon con eso tenemos la sesión de nuestra
aplicacio, y posteriormente con este objeto sesión
agregamos el atributo utilizando el método setatribute
el nombre de la variable que vamos a compartir se lalma
rectángulo con el valor de rec
ejemplo
HttpSession sesion = [Link]();
[Link]("rectangulo", rec);
12, re direccionamos a la vista
seleccionada
RequestDispatcher rd =
[Link]("vista/desplegarVariable
[Link]");
[Link](request, response);
con esto vamos a re dirigir al modelo vista , osea, al
archivo desplegarVariables. jsp, propagamos los
objetos request y response al jsp desplegarVariables,
que se encuentra en el paquete vista del mvc, para que
se encargue de mostrar la información por pantalla en
cualquier alcance , ya sea request, session o aplication
13. agregamos la exepciones que no
sugiera el ide
14. creamos el modelo jsp
desplegarVariables dentro de la carpeta
vist, referente al modelo vista controlador
15. imprimimos el valor de la variable
mensaje que enviamos desde el servlet utilizando
expression language para acceder directamente a
nuestra variable
sintaxis
${variable}
para este ejemplo seria
${mensaje}
expression language lo que va a hacer, es buscar en
alguno de los alcances (session, request o aplication)
una variable de nombre mensaje
esta variable la enviamos desde el servlet con esta
linea:
[Link]("mensaje", "Saludos desde el
Servlet");
16. ahora vamos a acceder a las variables
en el alcance de session
vamos a mostrar la variable Retangulo que enviamos
desde el Servet con esta linea HttpSession sesion =
[Link]();
[Link]("rectangulo", rec);
imprimimos los valores de base , altura y area
utilizando expression language
Base: ${[Link]}
Altura: ${[Link]}
Area: ${[Link]}
a través de expresión language accedemos a los
métodos get del javabeans
de Rectangulo
17. usando expression language creamos
un href usando contextpath para regresar
al inicio
<a
href="${[Link]}/[Link]">R
egresar al inicio</a>
PASOS PARA AGREGAR
VARIABLES EN VARIOS
ALCANCES EN EL MVC
1. CREAMOS EL [Link] QUE VA A
LLMAR AL SERVLET CONTROLADOR
esta vez en vez de usar la ruta path como lo hemos
estado haciendo hasta ahora, vamos a usar el
contextpath , esto se utiliza para que no halla problemas
por si se cambia el nombre de ubicación de la carpeta
del servlet
sintaxis:
usando expression language seria: <a
href="${[Link]}/nombre del
servlet">
por ejemplo
vamos a crear tres enlaces
1. link al server controlador sin parámetros: el cual nos
va a lanzar un mensaje de "Acción no proporcionada. en
esta opción no enviamos ningún parámetro para
procesar en el servlet
<a
href="${[Link]}/ServletContr
olador">
1. Link al servlet controlador SIN parametros
</a>
2. Link al servlet controlador para agregar las variables
El cual nos va agregar las variables en distintos
alcances. además en esta opción enviamos un
parámetro llamado acción y con valor "agregaVariables",
el cual va a ser recibido por el servlet y procesado
<a
href="${[Link]}/ServletContr
olador?accion=agregaVariables">
2. Link al servlet controlador para agregar las
variables
</a>
[Link] al servlet controlador para listar variables.
además en esta opción enviamos un parámetro llamado
acción y con valor "listarVariables", el cual va a ser
recibido por el servlet y procesado
El cual nos va a mostrar las variables agregadas en el
link 2
<a
href="${[Link]}/ServletContr
olador?accion=listarVariables">
[Link] al servlet controlador para listar variables
</a>
también al principio de este index. jsp, hemos agregado
una variable llamada mensaje y cuyo valor nos va a
devolver el servlet en alcance request,
<div style="color: red">${mensaje}</div>
EL [Link] QUEDARIA ASI;
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo MVC 2</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Ejemplo MVC 2</h1>
<br/>
<div style="color: red">${mensaje}</div>
<br/>
<a
href="${[Link]}/ServletContr
olador">
1. Link al servlet controlador SIN parametros
</a>
<br/><br/>
<a
href="${[Link]}/ServletContr
olador?accion=agregaVariables">
2. Link al servlet controlador para agregar las
variables
</a>
<br/><br/>
<a
href="${[Link]}/ServletContr
olador?accion=listarVariables">
[Link] al servlet controlador para listar variables
</a>
</body>
</html>
Y EL RUN:
:
4. CREAMOS EL JAVABEAN LLAMADO
Rectángulo y depositado en el paquete
modelo
package modelo;
public class Rectangulo {
private int base;
private int altura;
public Rectangulo(){}
public Rectangulo(int base, int altura){
[Link] = base;
[Link] = altura;
public int getBase() {
return base;
public void setBase(int base) {
[Link] = base;
}
public int getAltura() {
return altura;
public void setAltura(int altura) {
[Link] = altura;
public int getArea(){
return [Link] * [Link];
[Link] el servlet controlador
6; recuperamos el valor del parámetro que
nos envía el [Link]
String accion = [Link]("accion");
7. creamos los JavaBeans, o mejor dicho,
los objetos con os que vamos a trabajar
Rectangulo recRequest = new Rectangulo(1, 2);
Rectangulo recSesion = new Rectangulo(3, 4);
Rectangulo recAplicacion = new Rectangulo(5, 6);
8. mediante condicional if para devolver el
resultado según la opción elejida por el
usuario
9. si la opción elegida es agregar
variables , procedemos a agregar las
variables en los distintos alcances
9.1 como agregar variable en el alcance request
sintaxis:
[Link]("nombreDeLaVariables", valor);
para este ejemplo seria:
[Link]("rectanguloRequest", recRequest);
9.2 como agregar variables en el alcance
session;
sintaxis:
HttpSession sesion = [Link]();
[Link]("nombreDeLaVariables",
valor;
para este ejemplo seria;
HttpSession sesion = [Link]();
[Link]("rectanguloSesion",
recSesion);
9.3 como agregar variables en el alcance
aplication
sintaxis:
ServletContext application = [Link]();
[Link]("nombreDeLaVariable",
valor);
para este ejemplo seria:
ServletContext application = [Link]();
[Link]("rectanguloAplicacion",
recAplicacion);
10. agregamos un mensaje para ser
mostrado cuando volvamos a la pagina
[Link]
[Link]("mensaje", "Las variables fueron
agregadas");
11. mediante un Else verificamos si la
opción seleccionado en el [Link] fue
listar variables
else if("listarVariables".equals(accion))
en cuyo caso Redireccionamos al jsp que despliega las
variables, haciendo forward para re enviar los objetos
request y response, ya que estos son los objetos que
contienen la información que hemos agregado, en este
caso en los alcances de request, session y aplication,
todo va en este objeto de request,y también el objeto
response contiene la información de la respuesta si es
que hemos agregado algo, de lo contrario se propaga
este objeto para que podamos utilizarlo desde el jsp de
alcance variables
[Link]("WEB-INF/alcanceVariabl
[Link]").forward(request, response);
12. mediante un else, verificamos si la
opción elegida es "Link al servlet
controlador SIN parámetros"
else{
[Link]("mensaje", "Accion no
proporcionada o desconocida");
[Link]("[Link]").forward(requ
est, response);
en cuyo caso Redireccionamos a la pagina de inicio
en cuyo caso agregamos la variable mensaje en el
alcance de request con el valor "Acción no
proporcionada o desconocida" re direccionamos a la
página de inicio
[Link]("mensaje", "Accion no
proporcionada o desconocida");
[Link] a llamar el metodo
[Link]
[Link]ícanos cuál es el jsp que deseamos
utilizar
[Link]("[Link]")
15 .mandamos a llamar el metodo
forward, propagando los objetos de
request y response respectivamente
[Link]("[Link]").forward(requ
est, response);
el archivo ServletControlador quedaría asi;
package controlador;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/**
* @author CIRCET LANZAROTE
*/
@WebServlet("/ServletControlador")
public class ServletControlador extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//1. Procesamos parametros
String accion = [Link]("accion");
//2. Creamos los JavaBeans
Rectangulo recRequest = new Rectangulo(1, 2);
Rectangulo recSesion = new Rectangulo(3, 4);
Rectangulo recAplicacion = new Rectangulo(5, 6);
//3. Agregamos el javabean a algun alcance
//revisamos la accion proporcionada
if("agregaVariables".equals(accion)){
//Alcance request
[Link]("rectanguloRequest",
recRequest);
//Alcance session
HttpSession sesion = [Link]();
[Link]("rectanguloSesion",
recSesion);
//Alcance application
ServletContext application =
[Link]();
[Link]("rectanguloAplicacion",
recAplicacion);
//Agregamos un mensaje
[Link]("mensaje", "Las variables
fueron agregadas");
//4. redireccionamos al jsp de index
[Link]("[Link]").forward(requ
est, response);
}
else if("listarVariables".equals(accion)){
//4. Redireccionamos al jsp que despliega las
variables
[Link]("WEB-INF/alcanceVariabl
[Link]").forward(request, response);
else{
//4. Redireccionamos a la pagina de inicio
[Link]("mensaje", "Accion no
proporcionada o desconocida");
[Link]("[Link]").forward(requ
est, response);
//Esta linea no agregaria informacion al JSP,
//ya que no propaga los objetos request y
response
//[Link]("[Link]");
depositado en el paquete controlador
16. creamos el jsp que va a desplegar las variables, que
en este caso seria la vista en el modelo vista
controlador
se llama alcanceVariables y esta epositado en la
carpeta WEB-INF, para que se pueda acceder a el
externamente
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Alcance de Variables</title>
</head>
<body>
<h1>Alcance de Variables</h1>
<br/>
Variable request:
Base: ${[Link]}
Altura: ${[Link]}
Area: ${[Link]}
<br/><br/>
Variable sesion:
Base: ${[Link]}
Altura: ${[Link]}
Area: ${[Link]}
<br/><br/>
Variable aplicacion:
Base: ${[Link]}
Altura: ${[Link]}
Area: ${[Link]}
<br/><br/>
<a
href="${[Link]}/[Link]">R
egresar al inicio</a>
</body>
</html>
EJEMPLO COMO PASAR
VARIABLE REQUEST
DESDEN EL SERVLET A
UNA PAGINA JSP
1. JSP [Link]
<%--
Document : paginaLlamada
Created on : 17 oct 2023, 23:26:47
Author : Circet
--%>
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
// con [Link] recibo el parametro
que me envia el servlet
[Link]("el parametro es :" +
[Link]("var1"));
// como es una variable request, el valor de var1 no
se podria pasar desde aqui a otra pagina
// a mneos que rebotemos el valor de la sigioente
manera
// vamos a rebotar el parametro var1 a la pagina jsp
ultimaLlamada
RequestDispatcher
dispensador=[Link]("ultimaLla
[Link]");
[Link](request,response);
%>
</body>
</html>
2. pagina jsp [Link]
<%--
Document : ultimaLlamada
Created on : 17 oct 2023, 23:59:33
Author : Circet
--%>
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
ULTIMA LLAMADA
<br/>
<%
[Link]("el parametro es :" +
[Link]("var1"));
%>
</body>
</html>
3. servlet
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
* @author Circet
*/
public class NewServlet extends HttpServlet {
public String cadena="un valor";
public int contador=1;
* Processes requests for both HTTP
<code>GET</code> and <code>POST</code>
* methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error
occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest
request, HttpServletResponse response)
throws ServletException, IOException {
[Link]("text/html;charset=UTF-8");
try (PrintWriter out = [Link]()) {
/* TODO output your page here. You may use
following sample code. */
[Link]("<!DOCTYPE html>");
[Link]("<html>");
[Link]("<head>");
[Link]("<title>Servlet NewServlet</title>");
[Link]("</head>");
[Link]("<body>");
[Link]("<h1>Servlet NewServlet at " +
[Link]() + "</h1>");
[Link]("</body>");
[Link]("</html>");
contador++;
// envio el parametro contador al jsp pag
paginaLlamada
RequestDispatcher
dispensador=[Link]("paginaLla
[Link]");
[Link]("var1", contador);
[Link](request,response);
// <editor-fold defaultstate="collapsed"
desc="HttpServlet methods. Click on the + sign on the
left to edit the code.">
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error
occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error
occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
COMO PASAR VARIABLE SESION DESDE
SERVLET A OTRAS PAGINAAS
1. PAGINA JSP [Link]
<%--
Document : paginaLlamada
Created on : 17 oct 2023, 18:32:59
Author : Raquel
--%>
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%--
[Link]("el parametro es:"+
[Link]("var1"));
//[Link]("[Link]");
RequestDispatcher dispensador =
[Link]("[Link]");
//[Link]("var1", contador);
[Link](request, response);
--%>
<%
HttpSession sesion = [Link](false);
[Link]("Contador:"+[Link]().getAttribut
e("contador")+"<br/>");
[Link]("Contador:"+[Link]().getAttribut
e("otracosa"));//otracosa
[Link]("[Link]");
%>
</body>
</html>
2. pagina ultimaLlamada,jsp
<%--
Document : ultimaLlamada
Created on : 17 oct 2023, 18:48:37
Author : Raquel
--%>
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
ULTIMA LLAMADA<br/>
<%
//[Link]("el parametro es:"+
[Link]("var1"));
HttpSession sesion = [Link](false);
[Link]("Contador:"+[Link]().getAttribut
e("contador")+"<br/>");
[Link]("Contador:"+[Link]().getAttribut
e("otracosa"));//otracosa
%>
</body>
</html>
3. servlet
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
* @author Raquel
*/
public class Session extends HttpServlet {
* Processes requests for both HTTP
<code>GET</code> and <code>POST</code>
* methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error
occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest
request, HttpServletResponse response)
throws ServletException, IOException {
[Link]("text/html;charset=UTF-8");
int cont = 0;
try (PrintWriter out = [Link]()) {
/* TODO output your page here. You may use
following sample code. */
[Link]("<!DOCTYPE html>");
[Link]("<html>");
[Link]("<head>");
[Link]("<title>Servlet Session</title>");
[Link]("</head>");
[Link]("<body>");
[Link]("<h1>Servlet Session at " +
[Link]() + "</h1>");
[Link]("</body>");
[Link]("</html>");
HttpSession sesion = [Link]();
[Link]("contador", cont++);
[Link]("otracosa","llega llega");
[Link]("[Link]");
// <editor-fold defaultstate="collapsed"
desc="HttpServlet methods. Click on the + sign on the
left to edit the code.">
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error
occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error
occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
JDBC (Java Database
Connectivity)
PASOS PARA CONECTAR
NUESTRA BASE DE
DAGTOS CON NEATBEANS
[Link] NEATBEANS E IR A SERVICIOS
2. IR A LA PESTAÑA DE SERVISIO , CLKIC DERECHO
SOBRE DATABASE , NEW CONNECTION
[Link] EL DESPLEGABLE SELECCIONAMOS
MySQL8connector/jdriver)
4. si no nos aparece esta opcion,
4.1 vamos a en esta url
[Link]
4.2 seleccionamos en el desplegable Select Operating
System:platform independent,No thanks, just start my
download.
4.3 descargamos el conector, descomptimimos y lo
guardamos en una carpeta en c: que la ruta no sea muy
larga
5. regresamos a netbeans, services,database,
newconnetion seleccionamos add y buscamos la
carpeta del conector que acabamos de descargar y
seleccionamos el coenctor
[Link]
[Link] el password y en database escribimos el
nombre de la base de datos que nos queremos
conectar, para este ejemplo vapos a usar la base de
datos test, Y EN JDBC URL PRGAMOS LO SIGUIENTE :
jdbc:mysql://localhost:3306/mysql?zeroDateTimeBehav
ior=CONVERT_TO_NULL&useSSl=false&useTimezone=tr
ue&serverTimezone=UTC. le damos click en test
connection para comprobar la conexion y debe
aparecernos una pestaña como esta
[Link]
9. next
[Link]: [root on Default schema] para que quede
con el nombre que pusimos en la pantalla anterior:
jdbc:mysql://localhost:3306/mysql?zeroDateTimeBehav
ior=CONVERT_TO_NULL&useSSl=false&useTimezone=tr
ue&serverTimezone=UTC.
11. finish
12. para comprobar los datos de la base de da tos vamo
a services, databse
,
PASOS PARA CREAR UN
ARCHIVO ,CLASS PARA QUE
SE CONECTE CON NUESTRA
BASE DE DATOS
JDBC
1, Creamos nuestra cadena de conexion a mysql
String url =
"jdbc:mysql://localhost:3306/test?useSSL=false&server
Timezone=UTC"; E MPORTAMOS import [Link].*;
ESTA CADENA ES LA MISMA QUE INTRODUJIMOS
CUANDO CREAMOS LA BASE DE DATOS EN EL PASO
NUMERO 7
[Link] el objeto de conexion a la base de datos
SINTAXIS
Connection NOMBRE VARIABLE =
[Link](url, "NOMBRE USUARIO
DE LA BASE DE DATOS MYSQL QUE VAMOS A USAR ",
"PASSWORD MYSQL");
PARA ESTE EJEMPLO SERIA:
Connection conexion =
[Link](url, "root", "123456");
3. EN ESTE PUNTO EL IDE NOS VA A SUGERIR
ENVOLVER ESTE BLOQUE EN UN TRY CATCH,
ACEPTAMOS LA SUGERENCIA Y EL IDE NOS DEVUELVE
ESTO
catch (SQLException ex) {
[Link]([Link]()).lo
g([Link], null, ex);
LO SUSTITUIMOS POR ESTO:
catch (SQLException ex) {
[Link]([Link]);
[Link] un objeto Statement
SINTAXIS
Statement VARIABLE STATMENT = VARIABLE
[Link]();
PARA ESTE EJEMPLO SERIA:
Statement instruccion = [Link]();
[Link] el query, OSEA, LA CONSUTA QUE LE
VAMOS A HACER A LA BASE DE DATOS
USAMOS LA VARIABLE LLAMADA SQL. Y ESCRIBIMOS
LOS DATOS CONTENIDOS en nuestra tabla de datos
test
sintaxis
String sql = "contenido de la tabla from tabla";
pra este ejemplo seria
String sql = "select id_Persona, nombre, apellido, email,
telefono from persona";
6. Ejecucion del query
siuntaxis
:
ResultSet variable = [Link](variable
strin con el congtenido de la tabla);
para este ejemplo seria:
ResultSet resultado = [Link](sql);
7. creamos un ciclo while para recorrer el contenido de
la tabla
while([Link]()){
[Link]("Id ersona:" +
[Link](1));
[Link](" Nombre:" +
[Link](2));
[Link](" Apellido:" +
[Link](3));
[Link](" Email:" +
[Link](4));
[Link](" Telefono:" +
[Link](5));
[Link] cada objeto que hemos utilizado
[Link]();
[Link]();
[Link]();
todo esto dentro del ciclo try catch
9. importamos el conector en el proyecto
9.1 clic derecho sobre la libreria del proyector y
selecionamos addjar/ folder
9.2 buscamos la carpeta don de esta el conector y lo
anexamos
debe quedar asi
[Link] estamos trabajando con MAVEN es necesario
modificar el archivo [Link].
tenemos que agregar las el sigiuente codigo entre el
bloque de codigo <dependencies> <dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
Debería quedar así:
ejemplo de todo lo anterior:
package introduccionjdc2;
import [Link].*;
* @author Circet
*/
public class IntroduccionJDC2 {
/
* @param args the command line arguments
*/
public static void main(String[] args) {
//Paso 1. Creamos nuestra cadena de conexion a
mysql
String url =
"jdbc:mysql://localhost:3306/test?useSSL=false&server
Timezone=UTC";
try {
//Paso 2. Creamos el objeto de conexion a la
base de datos
Connection conexion =
[Link](url, "root", "123456");
//Paso 3. Creamos un objeto Statement
Statement instruccion =
[Link]();
//Paso 4. Creamos el query
String sql = "select id_Persona, nombre, apellido,
email, telefono from persona";
//Paso 5. Ejecucion del query
ResultSet resultado =
[Link](sql);
//Paso 6. Procesamos el resultado
while([Link]()){
[Link]("Id ersona:" +
[Link](1));
[Link](" Nombre:" +
[Link](2));
[Link](" Apellido:" +
[Link](3));
[Link](" Email:" +
[Link](4));
[Link](" Telefono:" +
[Link](5));
//Cerramos cada objeto que hemos utilizado
[Link]();
[Link]();
[Link]();
} catch (SQLException ex) {
[Link]([Link]);
}
MANEJO DE JDBC
Ahora vamos a revisar el uso de Statement en JDBC. La
interface de statement tiene
varios métodos. Existen métodos para hacer un
SELECT, para ejecutar alguna
instrucción DML(Data Manipulation Language), DDL
(Data Definition Language) o
para cualquier otra sentencia de tipo SQL.
El método de executeQuery se utiliza para ejecutar
sentencias de tipo select y por
ello el método regresa un objeto ResultSet, el cual
almacena el resultado en forma
de una matriz de dos dimensiones, es decir, en
renglones y columnas, así podemos
procesar el resultado del query sin ningún problema.
El método executeUpdate se utiliza para ejecutar
sentencias DML (Data
Manipulation Language) como son las sentencias insert,
update y delete. También
nos va a permitir ejecutar sentencias de tipo DDL (Data
Definition Language) como
son las sentencias create table, truncate table, entre
otras. La función
executeUpdate regresa un entero, indicando el número
de registros afectados como
resultado de ejecutar el query deseado.
Por último, el método de execute nos sirve para ejecutar
cualquier tipo de
sentencia SQL. Este método regresa un valor boleano, el
cual regresa true si el
resultado es un ResulSet, esto es, si se ejecutó un
select, y regresa false si se
ejecutó alguna otra sentencia, como insert, update,
delete, o alguna otra.
En la figura mostrada podemos observar algunas de las
clases de
excepciones en el API de JDBC.
La clase SQLException es la más utilizada para procesar
excepciones al
utilizar JDBC. Existen más clases de excepción, las
cuáles se encuentran
en el paquete [Link].
Debido a que la clase SQLException desciende de la
clase Exception
estamos obligados a procesar dicha excepción por un
bloque try/catch o
debemos declararla como parte de la firma del método
que hace uso del
API JDBC.
PASOS PARA MANEJO DE
JDBC
SELECT INSERT UPDATE DELETE
1. creamos el proyecto maven , lo llamamos ManjeJDBC
e importamos import [Link].*;
2. VAMOS A LA CARPETA PROJECT FILES, CLIC
DERECHO SOBRE [Link] MODIFICAMOS las
dependencias y copiamos esto;
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
donde <version>8.0.33</version>, es la version del
conector jdbc que estamos usando
3. vamos a separar las responsabilidades en cada una
de nuestras clases, por un lado tendremos la clase
[Link] que se va a encargar de la cadena de
conexion y de la conexion , tambien tendremos una
clase llamada [Link], que se va a encargar de
modificar o listar nuestra base de datos (seleccionar,
insertar,actuaizar y borrar
4. empezamos creando la clase [Link] ,
encargada de la conexion
5. creamos la clase Coenxion y la depositamos en el
paquete datos
6. configuramos las variables para realizar la conexion a
nuestra base de datos,:
private static final String JDBC_URL =
"jdbc:mysql://localhost/test?useSSL=false&serverTimez
one=UTC";
private static final String JDBC_USER = "root";
private static final String JDBC_PASS = "123456";
donde
"jdbc:mysql://localhost/test?useSSL=false&serverTimez
one=UTC";, es nuestra base de datos
root. es nuestro usuario de la base de datos y password
la contraseña de nuestra base de datos mysql
7. creamos el metodo getconection con su respectiva
excepcion y regresamos la conexion
public static Connection getConnection() throws
SQLException {
return [Link](JDBC_URL,
JDBC_USER, JDBC_PASS);
con esto establecemos la conexion a la base de datos
8. defiinmos los metodos para cerrar los objetos de
tipo ResultSet, PreparedStatment y Connection que son
los objetos que vamos a biir al momento de trabajar con
la base de datos, cada uno con sus excepciones
public static void close(ResultSet rs){
try {
[Link]();
} catch (SQLException ex) {
[Link]([Link]);
public static void close(PreparedStatement stmt){
try {
[Link]();
} catch (SQLException ex) {
[Link]([Link]);
public static void close(Connection conn){
try {
[Link]();
} catch (SQLException ex) {
[Link]([Link]);
la clase Conexion completo quedaria asi
package datos;
import [Link].*;
public class Conexion {
private static final String JDBC_URL =
"jdbc:mysql://localhost/test?useSSL=false&serverTimez
one=UTC";
private static final String JDBC_USER = "root";
private static final String JDBC_PASS = "123456";
public static Connection getConnection() throws
SQLException {
return [Link](JDBC_URL,
JDBC_USER, JDBC_PASS);
public static void close(ResultSet rs){
try {
[Link]();
} catch (SQLException ex) {
[Link]([Link]);
public static void close(PreparedStatement stmt){
try {
[Link]();
} catch (SQLException ex) {
[Link]([Link]);
public static void close(Connection conn){
try {
[Link]();
} catch (SQLException ex) {
[Link]([Link]);
}
9. creamos la clase Persona,java dentro del paquete
domain, en esta clase vamos a definir los atributos que
corresponden a cada una de las columnas de la tabla
de persona de nuestra base de datos
private int id_persona;
private String nombre;
private String apellido;
private String email;
private String telefono;
10: creamos los metodos get, set y toString
public int getId_persona() {
return id_persona;
public void setId_persona(int id_persona) {
this.id_persona = id_persona;
public String getNombre() {
return nombre;
public void setNombre(String nombre) {
[Link] = nombre;
public String getApellido() {
return apellido;
public void setApellido(String apellido) {
[Link] = apellido;
}
public String getEmail() {
return email;
public void setEmail(String email) {
[Link] = email;
public String getTelefono() {
return telefono;
public void setTelefono(String telefono) {
[Link] = telefono;
}
@Override
public String toString() {
return "Persona{" + "id_persona=" + id_persona + ",
nombre=" + nombre + ", apellido=" + apellido + ", email="
+ email + ", telefono=" + telefono + '}';
la clase Persona quedaria asi:
package domain;
public class Persona {
private int id_persona;
private String nombre;
private String apellido;
private String email;
private String telefono;
public int getId_persona() {
return id_persona;
public void setId_persona(int id_persona) {
this.id_persona = id_persona;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
[Link] = nombre;
public String getApellido() {
return apellido;
public void setApellido(String apellido) {
[Link] = apellido;
public String getEmail() {
return email;
public void setEmail(String email) {
[Link] = email;
public String getTelefono() {
return telefono;
public void setTelefono(String telefono) {
[Link] = telefono;
@Override
public String toString() {
return "Persona{" + "id_persona=" + id_persona + ",
nombre=" + nombre + ", apellido=" + apellido + ", email="
+ email + ", telefono=" + telefono + '}';
}
}
11:creamos la clase PersonaJDBC,java dentro del
paquete datos, esta clase se va a encargar de realizar
las operaciones sobre la tabla de datos de persona de
nuestra base de datos, osea listar, añadir. eliminar,
modificar.
12. esta clase CONTIENE los metodos
SELECT,INSERT,UPDATE Y DELETE, para la tabla de
persona, asi que definimos los atributos, definimos las
sentencias sql para cada una de las
acciones(SELECT,INSERT,UPDATE Y DELETE,)
public class PersonaJDBC {
private static final String SQL_SELECT = "SELECT
id_persona, nombre, apellido, email, telefono FROM
persona";
private static final String SQL_INSERT = "INSERT INTO
persona(nombre, apellido, email, telefono) VALUES(?, ?,
?, ?)";
private static final String SQL_UPDATE = "UPDATE
persona SET nombre=?, apellido=?, email=?, telefono=?
WHERE id_persona = ?";
private static final String SQL_DELETE = "DELETE
FROM persona WHERE id_persona=?";
en INSERT no colocamos el atributo [Link] porque
es una llave primaria, este se incrementa directamente
por la base de datos cuando agregamos un nuevo
registro, usam os simbolo de imterrogacion por cada
parametro que vamos a sutituir ejemplo
private static final String SQL_INSERT = "INSERT INTO
persona(nombre, apellido, email, telefono) VALUES(?, ?,
?, ?)";
13. definimos el metodo select para modificar un
registro
public List<Persona> select
[Link]:
import [Link];
import [Link];
14. definimos las variables
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
Persona persona = null; y creamos una lista de
objetos de tipo persona, un array list que luego nos va a
permitir imprimir el contenido de nuestra base de datos
15. importamos:
import [Link].*;
16. obteneos la conexion a labase de datos con la ayuda
de uiestra variable Conexion que definimos
anteriormente, ,anda os a llamar al metodo getconection
conn = [Link]();
17, aceptamos la excepcion que nos sugiere el ide
y en ado caso de error, imprimimos la excepcion
catch (SQLException ex) {
[Link]([Link]);
18. continuamos dentro del try catch, vamos a inicializar
nuestro objeto de tipo statment, stmt con juestra
variable conn mandamos a llamar al metodo
PreparedStatement, posteriormente especificamos cual
es la sentencia que vamos a usar, en este caso es la
sentencia de sql SELECT.
stmt = [Link](SQL_SELECT);
19; ejecutamos el query y lo asignamos a nuestra
variable rs y con es¡to ya tenemos el resultado en
nuestra variable Resultset
rs = [Link]();
20, con el metodo next vamos recorriendo cada uno de
los registro que nos ha decvuelto esta sentencia
while([Link]()){
int id_persona = [Link]("id_persona");
String nombre = [Link]("nombre");
String apellido = [Link]("apellido");
String email = [Link]("email");
String telefono = [Link]("telefono");
persona = new Persona();
persona.setId_persona(id_persona);
[Link](nombre);
[Link](apellido);
[Link](email);
[Link](telefono);
[Link](persona);
con el metodo add nos agrega el objeto persona que
estamos leyendo al array list de tipo persona
21. creamos el metodo finally para cerarra las
conexiones
finally{
[Link](rs);
[Link](stmt);
[Link](conn);
22. regresamos el listado de personas
return personas; METODO SELECTY COMPLETO
public List<Persona> select(){
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
Persona persona = null;
List<Persona> personas = new
ArrayList<Persona>();
try {
conn = [Link]();
stmt = [Link](SQL_SELECT);
rs = [Link]();
while([Link]()){
int id_persona = [Link]("id_persona");
String nombre = [Link]("nombre");
String apellido = [Link]("apellido");
String email = [Link]("email");
String telefono = [Link]("telefono");
persona = new Persona();
persona.setId_persona(id_persona);
[Link](nombre);
[Link](apellido);
[Link](email);
[Link](telefono);
[Link](persona);
} catch (SQLException ex) {
[Link]([Link]);
finally{
[Link](rs);
[Link](stmt);
[Link](conn);
return personas;
23. creamos nuestro main llamado ManejoPersonas
dentro del paquete test, esta clase se va a encargar
[Link] un objeto de tipo PersonaJDBC
PersonaJDBC personaJDBC = new PersonaJDBC();
25. importamos:
import [Link];
25. mandamos a llamar el metodo select que hemos
definido
List<Persona> personas = [Link]();
26. recorrem s el array list con un for
for(Persona persona:lista personas){
[Link]("persona:" + persona);
}
CREACION METODO INSERT
EN JDBC
[Link] NUESTRA CLASE [Link] vamo a crear
el metodo para insertar registrso en nuestra base de
datos
el metodo se va a llamar insert y va a ser de tipo int
porque va a devolver un entero, y este entero nos va a
indicar cuantos regsitros de nuestra base de datos
fueron afectados, y va a recibir un objeto de tipo
persona, el cjual ya debe tener los elementos que
queremos insertar en nuestra base de datos
public int insert(Persona persona){
2. declaramos las variables que vamos a usar
Connection conn = null;
PreparedStatement stmt = null;
int rows = 0;
la variable row nos va a indicar cuan tos registros fueron
afectados una vez que hallamos ejecutado nuestra
sentencia
obtenemos la conexion a nuestra base de datos con el
objeto conn
conn = [Link]();
3. aceptamos la sugerencia de envolver en un bloque
tray catch
4. despues de obtener la conexion obtenemos nuestro
objeto prepareStatement y le pasamos la sentencia
insert
stmt = [Link](SQL_INSERT);
5, dedfinimos cada uno de los parametros en el mismo
orden que estan en nuestra base de datos:
[Link](1, [Link]());
[Link](2, [Link]());
[Link](3, [Link]());
[Link](4, [Link]());
stm es nuestro objeto de tipo statement
no proporcion amos el id porque esto lo proporciona el
ide
6. mandamos un mensaje a la consola
[Link]("ejecutando query:" + SQL_INSERT);
[Link] a ejecutar por medio de la variable
statment selecionamos el metodo executeUpdate, y la
cadena que usamos es sql insert, y esto lo que nos
regresa es un entero con la cantidad de registros que se
han modificado y lo asignamos a la varable row
rows = [Link]();
8, imprimimos la cantidad de registros que han sido
afectados
[Link]("Registros afectados:" + rows);
9. cerramos el bloque try catch
catch (SQLException ex) {
[Link]([Link]);
10: agregamos el bloque finally para cerar nuestros
objetos de conexion a la base de datos
finally{
[Link](stmt);
[Link](conn);
11. regresamos el numero de reghistros afectados
return rows;
12. vamos al main [Link] y creamos el
objeto que vamos a insertar en la base de datos
13. Persona persona = new Persona();
[Link]("PIPO");
[Link]("peleyteiro");
[Link]("pele@[Link]");
[Link]("76869696");
14. mandamos a llamar el metodo insert y le
proporcionamos el obeto a insertar
[Link](persona);
15, el id persona nos lo da en automatico la base de
datos
METODO INSERT COMPLETO
public int insert(Persona persona){
Connection conn = null;
PreparedStatement stmt = null;
int rows = 0;
try {
conn = [Link]();
stmt = [Link](SQL_INSERT);
[Link](1, [Link]());
[Link](2, [Link]());
[Link](3, [Link]());
[Link](4, [Link]());
[Link]("ejecutando query:" +
SQL_INSERT);
rows = [Link]();
[Link]("Registros afectados:" + rows);
} catch (SQLException ex) {
[Link]([Link]);
finally{
[Link](stmt);
[Link](conn);
return rows;
METODO UPDATE EN
JDBC(se usa para modificar
los registros de nuestra base
de datos)
ES LO MISMO QUE INSERT, LO UNICO QUE CAMBIA ES
EN
[Link]("ejecutando query: " + SQL_UPDATE);
stmt = [Link](SQL_UPDATE);
QUEDARIA ASI
public int update(Persona persona){
Connection conn = null;
PreparedStatement stmt = null;
int rows = 0;
try {
conn = [Link]();
[Link]("ejecutando query: " +
SQL_UPDATE);
stmt = [Link](SQL_UPDATE);
[Link](1, [Link]());
[Link](2, [Link]());
[Link](3, [Link]());
[Link](4, [Link]());
[Link](5, persona.getId_persona());
rows = [Link]();
[Link]("Registros actualizado:" +
rows);
} catch (SQLException ex) {
[Link]([Link]);
finally{
[Link](stmt);
[Link](conn);
}
return rows;
Y EN EL MAIN PROPORCIONAMOS EL OBJETO Y ,ANDA
MOS A LLMATR EL METODO UPDATE
Persona persona = new Persona();
persona.setId_persona(3);
[Link]("Mayra");
[Link]("Lara");
[Link]("mlara@[Link]");
[Link]("55668899");
[Link](persona);
METODO ELIMINAR EN JDBC
1. VAMOS A LA CLASE PersonaJDBC Y CREAMOS EL
METODO delete y recibimos el objeto persona que
vamos a borrar, aunque solo nos interesa el id eprsona
que es la llave primaria ya que es todo lo wue
necesigtamos en este caso para borrar un regsitro de
nuestra base de datos
public int delete(Persona persona){
2. declaramos la variables que vamos a usar
Connection conn = null;
PreparedStatement stmt = null;
int rows = 0;
[Link] conexion con la base de datos e
imprimimos un mendsaje por pantalla
conn = [Link]();
[Link]("Ejecutando query:" +
SQL_DELETE);
configuramos el objeto preapredstatment
y le pasamos la cadena de lo que queremos ejeutar en
este case es delete
stmt = [Link](SQL_DELETE);
4. proporcionamos el parametro que necesitamos para
borrar el regsitro de nuestra base de datos, en este caso
solo necesitamos el id persona
[Link](1, persona.getId_persona());
5. ejecutamos nuestra sentencia
rows = [Link]();
5. imprimimos numeros de objetos afectados
[Link]("Registros eliminados:" + rows);
6. cerramos catch
} catch (SQLException ex) {
[Link]([Link]);
6. cerramos conexion
finally{
[Link](stmt);
[Link](conn);
7. regresamos numeros de registros afectados
return rows;
EJEMPLO CORTO MANEJO
BASE DE DATOS
import [Link];
import [Link];
import [Link];
import [Link].*;
/**
*
* @author Raquel
*/
public class Main {
public static void main(String[] args) throws Exception
{
// Establecemos la conexion a la base de datos
String cadenaConn =
"jdbc:mysql://localhost:3306/";
String dbName = "Hotel";
String driver = "[Link]";
String user = "root";
String pass = "123456";
Connection conn;
[Link](driver).getDeclaredConstructor().newIns
tance();
conn = [Link](cadenaConn
+ dbName, user, pass);
Statement stmt = [Link]();
// PARA IMPRIMIR CONTENIDO DE LA BASE DE
DATOS
ResultSet rset = [Link]("Select * from
clientes");
while ([Link]()) {
[Link]([Link]("dni"));
[Link](" ");
[Link]([Link]("Nombre"));
[Link](" ");
[Link]([Link]("Apellidos"));
[Link]("\n\n\n");
// PARA IMPRIMIR UN VALOR ESPECIFICO DE LA
BASE DE DATOS, EN ESTE CASO EL VALOR QUE
CONTENGA EL DNI 1001
String select = "Select * from Clientes where dni=?";
PreparedStatement pstmt =
[Link](select);
[Link](1, "10001");
ResultSet se = [Link]();
if ([Link]()) {
[Link]([Link]("dni"));
[Link](" ");
[Link]([Link]("Nombre"));
[Link](" ");
[Link]([Link]("Apellidos"));
// // PARA INSERTAR UN REGISTRO
// Statement stt = [Link]();
// // DEVUELVE UN NUMERO ENTERO, OSEA , EL
NUMERO DE REGISTROS INSERTADOS
// int filasAfectadas = [Link]("INSERT
INTO CLIENTES VALUES ('100045','juan','perez')");
// [Link]("El numero de filas insertadas
es:"+filasAfectadas);
//DELETE FROM NOMBRE_TABLE WHERE
dni='10008';
//UPDATE NOMBRE_TABLA SET nombre='kaka'
WHERE dni='10001'
// PARA BORRAR UN REGISTRO DE LA BASE DE
DATOS
String selet = "DELETE FROM CLIENTES WHERE
dni=?";
PreparedStatement pstm =
[Link](selet);
[Link](1, "100050");
[Link]("Total de filas borradas: " +
[Link]());
// para actualizar un registro
String update = "UPDATE clientes set " + "nombre" +
"='" + "pepita" + "' WHERE dni='" + "100030" + "'";
[Link](update);
PreparedStatement pstm1 =
[Link](selet);
pstm1 = [Link](select);
[Link](update);
// CERRAMOS CONEXION
[Link]();
[Link]();
[Link]();
}
TRANSACCIONES CON
JDBC
Una transacción es un conjunto de instrucciones SQL
como pueden ser select,
insert etc, las cuales son agrupadas en bloques de
ejecución. Si alguna de las
instrucciones falla, podemos dar marcha atrás haciendo
un rollback a todo el
bloque ejecutado, esto es, sin alterar el estado de la
base de datos. Por otro lado, si
todo es correcto guardamos los cambios haciendo
commit de todo el bloque
ejecutado.
Por default JDBC utiliza la instrucción autocommit=true,
pero también podemos
utilizar el método [Link](false) para poder
modificar el estado de la
bandera del autocommit.
Una nota importante en el uso de transacciones es que
si cerramos la conexión se
hace un commit en automático incluso si
deshabilitamos la propiedad autocommit,
esto de alguna manera nos garantiza que los cambios
que hayamos hecho se van a
almacenar en la base de datos, por lo que debemos de
poner mucha atención en la
manera en que codificamos el concepto de
transacciones en JDBC, y así evitar
errores o inconsistencias en la base de datos.
Pablo 9180 Cableven:
Es común que envolvamos una transacción en un
bloque try/catch, y una vez que
un error sucede apliquemos rollback a toda la
transacción, así que la combinación
del uso del manejo de excepciones y las transacciones
de JDBC nos permitirán
codificar correctamente este concepto.
UNA TRANSACCION JDBC ES EJECUTAR VARIAS
SENTENCIAS SQL
ROLLBACK: NO GUARDA LOS CAMBIOS EN LA BASE DE
DAOS, TODAS LAS SENTENCIAS QUE MODIFICAN LA
BASE D DATOS NO SE VAN A EJECUTAR
COMMIT: REAÑIZA LOS CAMBIOS EN LA BASE DE
DATOS
TRANSACCIONES EN JDBC
PASOS PARA REALIZAR
TRANSACCIONES EN JDBC
USAREMOS UN TRY CATCH PARA CONTROLAR EL
COMMIT Y EL ROLLBACK
1. ESTABLECEMOS LA CONEXION A LA BASE DE
DATOS
public static void main(String[] args) throws Exception {
String cadenaConn="jdbc:mysql://localhost:3306/";
String dbName = "Hotel";
String driver = "[Link]";
String user = "root";
String pass = "123456";
Connection conn;
[Link](driver).getDeclaredConstructor().newIns
tance();
conn =
[Link](cadenaConn+dbName,us
er, pass);
DONDE: dbName es el nombre de mi base de datos
driver es la clase del driver de mi conector a la base de
datos
user; es el usuario de mi base de datos
pass; es el password de mi base de datos
conn; es la variable de conexion
2. creamos un bloque try catch donde el
try va a controlar el commit y el catch me
va a controllar el rollback
si la transaccion total es correcta se ejecuta la
tranasaccion
si la transaccion es incorrecta el bloque catch me hace
un rollback y la transaccion no se realiza
3. ponemos a falso el autocommit para
que no me efectue los cambios en la base
de datos hasta que yo se lo indique:
[Link](false);
try{
[Link](false);
String sentencia="INSERT INTO CLIENTES VALUES
('1000399','pino','panjo')";
String sentencia2="INSERT INTO CLIENTES
VALUES ('1000400','ronald','reagan')";
String sentencia3="INSERT INTO CLIENTES
VALUES ('1000401','pino','panjo')";
Statement stmt = [Link]();
[Link](sentencia);
[Link](sentencia2);
[Link](sentencia3);
[Link]();
[Link](true);
[Link]("Se han agregado los
registros");
catch(Exception ex){
[Link]("Ha fallado la transaccion" +
[Link]());
[Link]();
donde:
a) las variables String sentencia son los comandos sql
que nuestra base de datos va a ejecutar si se pone a tru
el commit
b) Statement stmt; ejecutamos el statement para que
nos devbuelva una conexion a traves del metodo
createStatement
c. stmt-execute; a traves del statemet hacemos el
execute update osea, ejecutamos las sentencias
[Link](); hacemos el commit , osea accedemos
a la base de datos y ejecutamos los inserts
E) si algo SALE MAL se nos ejecuta el bloque del catch y
os hace un rollback, osea, no nos hace los inserts, la
base de datos no se modifica
catch(Exception ex){
[Link]("Ha fallado la transaccion" +
[Link]());
[Link]();
F) [Link](true); volvemos el commit a
true
ejemplo completo
package jdbc;
import [Link];
import [Link];
import [Link];
import [Link].*;
/**
*
* @author Raquel
*/
public class Main {
/*
jdbc:mysql://HOST/DATABASE db_driver =
[Link] db_username = USERNAME
db_password =
*/
public static void main(String[] args) throws Exception
{
String cadenaConn="jdbc:mysql://localhost:3306/";
String dbName = "Hotel";
String driver = "[Link]";
String user = "root";
String pass = "123456";
Connection conn;
[Link](driver).getDeclaredConstructor().newIns
tance();
conn =
[Link](cadenaConn+dbName,us
er, pass);
try{
[Link](false);
String sentencia="INSERT INTO CLIENTES VALUES
('1000399','pino','panjo')";
String sentencia2="INSERT INTO CLIENTES
VALUES ('1000400','ronald','reagan')";
String sentencia3="INSERT INTO CLIENTES
VALUES ('1000401','pino','panjo')";
Statement stmt = [Link]();
[Link](sentencia);
[Link](sentencia2);
[Link](sentencia3);
[Link]();
[Link](true);
[Link]("Se han agregado los
registros");
catch(Exception ex){
[Link]("Ha fallado la transaccion" +
[Link]());
[Link]();
}
IMPLEMENTACION
TRANSACCION JDBC EN EL
MODELO MVC
1. CREAMOS UNA CAPA DE DATOS QUE NOS VA A
SERVIR PARA CUALQUIER TIUPO DE BASE DE DATOS,
YA SEA MYSQL, ORACLE ETC
CREAMOS EL PAQUETE bbdd
2. CREAMOS LA INTERFACE CapaDatos
3. CFREAMOS LOS METODOS QUE VA A EJECUTAR LA
CLASE QUE IMPLEMENTE ESTA INTERFACE
public boolean connect();
public boolean discConnect();
public ResultSet ejecuteSelect(String select);
public int ejecutaSQL(String sql) throws
SQLException;
public boolean ejecutaTransaction(ArrayList<String>
sentencias) throws SQLException;
public int ejecutaSentenciaPreparada(String sql,
HashMap<Integer, String> parametros);
DONDE:
a)public boolean connect(); me va a realizar la conexion
a la base de datos
b) public boolean discConnect(); me va arealizar la
desconexion
c) public ResultSet ejecuteSelect(String select);
devuelve un result set y ejecuta el select que se le envia
como parametro
d)public int ejecutaSQL(String sql) throws
SQLException; ejecuta sentencias sql como insert,
delete, update
e) public boolean ejecutaTransaction(ArrayList<String>
sentencias) throws SQLException; ejecuta
transancciones sql
recibe un arrayLIst con todas las tranasacciones que
tiene que realizar
f) public int ejecutaSentenciaPreparada(String sql,
HashMap<Integer, String> parametros); ejecuta
sentencias preparadas de sql
EJEMPLO COMPLETO DE LA INTERFACE
package bbdd;
import [Link].*;
import [Link];
import [Link];
/**
* @author Raquel
*/
public interface CapaDatos {
public boolean connect();
public boolean discConnect();
public ResultSet ejecuteSelect(String select);
public int ejecutaSQL(String sql) throws
SQLException;
public boolean ejecutaTransaction(ArrayList<String>
sentencias) throws SQLException;
public int ejecutaSentenciaPreparada(String sql,
HashMap<Integer, String> parametros);
4. CREAMOS LA CLASE QUE VA A IMPLEMENGTAR
TODOS LOS METODOS DE LA INTERFACE, EN ESTE
CASO LA LLAMARE,MOS CapaDatosImpl
5. DEBE IMPLEMENTAR LA INTERFACE POR
EJEMÑPLO ;
public class CapaDatosImpl implements CapaDatos {
6. CREAMOS LSA VARIABLES conn y stmt
public Connection conn;
public Statement stmt;
7, CREAMOS EL CONSTRUCTOR CON SU RESPECTIVO
Throws Exception, ESTE CONTRUCTOR VA A RECIBIR
ENTRE OTRAS COSAS LA CANDENA DE CONEXION
public CapaDatosImpl(String driver, String cadenaConn,
String user, String pass) throws Exception {
[Link](driver).getDeclaredConstructor().newIns
tance();
conn = [Link](cadenaConn,
user, pass);
stmt = [Link]();
}
ESTE CONSTRUCTOR ARROJA UNA EXCEPCION Y EL
METODOS QUE LO INOQUE TIENE QUE ENCARGARSE
DE CAPTURARLA
8;creamos el metodo para desconectar la
base e datos
public boolean discConnect() {
try {
[Link]();
return true;
} catch (SQLException ex) {
return false;
}
8, creamos metodos ejecutaSql
public int ejecutaSQL(String sql) throws SQLException {
return [Link](sql);
9: creamos metodo ejecuta transaccion
public boolean ejecutaTransaction(ArrayList<String>
sentencias) throws SQLException {
try {
[Link](false);
for (String sentencia : sentencias) {
[Link](sentencia);
[Link]();
[Link](true);
return true;
} catch(SQLException ex) {
[Link](true);
try {
[Link]();
} catch (SQLException e) {
throw new SQLException("NO se han podido
deshacer los cambios");
return false;
clase bbdd completa
package bbdd;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
*/
* @author Raquel
*/
public class CapaDatosImpl implements CapaDatos {
public Connection conn;
public Statement stmt;
//public PreparedStatement;
//public CallableStatement; //opcional
public CapaDatosImpl(String driver, String
cadenaConn, String user, String pass) throws Exception
{
[Link](driver).getDeclaredConstructor().newIns
tance();
conn = [Link](cadenaConn,
user, pass);
stmt = [Link]();
@Override
public boolean discConnect() {
try {
[Link]();
return true;
} catch (SQLException ex) {
return false;
@Override
public ResultSet ejecuteSelect(String select) {
throw new UnsupportedOperationException("Not
supported yet."); // Generated from
nbfs://nbhost/SystemFileSystem/Templates/Classes/C
ode/GeneratedMethodBody
@Override
public int ejecutaSQL(String sql) throws SQLException
{
return [Link](sql);
@Override
public boolean ejecutaTransaction(ArrayList<String>
sentencias) throws SQLException {
try {
[Link](false);
for (String sentencia : sentencias) {
[Link](sentencia);
[Link]();
[Link](true);
return true;
} catch(SQLException ex) {
[Link](true);
try {
[Link]();
} catch (SQLException e) {
throw new SQLException("NO se han podido
deshacer los cambios");
return false;
@Override
public int ejecutaSentenciaPreparada(String sql,
HashMap<Integer, String> parametros) {
throw new UnsupportedOperationException("Not
supported yet."); // Generated from
nbfs://nbhost/SystemFileSystem/Templates/Classes/C
ode/GeneratedMethodBody
}
@Override
public boolean connect() {
return false;
10. creamos el main
11; establecemos las variables de
conexion
String
cadenaConn="jdbc:mysql://localhost:3306/Hotel";
String driver = "[Link]";
String user = "root";
String pass = "123456";
12, creamos el objeto que va a manejar la
conexion(objeto de la clase capaDatos)
y le pasamos los parametros
CapaDatos cd=new
CapaDatosImpl(driver,cadenaConn,user,pass);
SIMPEMENTE ES UN OBJETO PARA PODER MANEJAR
LA CONEXION Y LAS SENTENCIAS A LA BASE DE
DATOS
13. CREAMOS UN ARRAYLIST QUE VA A GUARDAR
TODAS LAS SENTECIAS QUE LE VAMOS A PASAR LA
bbd PARA QUE LAS EJECUTE
14: CREAMOS LAS SENTENCIAS QUE VA A EJECUTAR
LA BASE DE DATOS
String insertCliente="INSERT INTO CLIENTES VALUES
('1000402','jose','velez')";
String insertReservas="INSERT INTO Reservas
VALUES ('1000402',3)";;
String updateHabitacion="UPDATE Habitaciones
set ocupada=1 WHERE num_hab=3";
15. LAS AGREGAMOS AL ARRAYLIST
[Link](insertCliente);
[Link](insertReservas);
[Link](updateHabitacion);
16. UTILIZAMOS EL OBJETO CD PARA MANDAR A
LLAMAR EL METODO QUE VA A EJECUTAR LA
TRANSACCION Y LE PASAMOS EL ARRAYLIST CON
TODAS LAS SENTENCIAS QUE TIENE QUE EJECUTAR
y como el metodo arroja un booleano, utilizamods un if
para enviar un mnesjae si la transaccion se jecuta
correctaemte
if([Link](sentencias)){
[Link]("La transaccion se ha
ejecutado correctamente");
else{
[Link]("La transaccion mo se ha
realizado");
ejemplo main completo
package jdbc;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link].*;
import [Link];
/**
* @author Raquel
*/
public class Main {
/*
jdbc:mysql://HOST/DATABASE db_driver =
[Link] db_username = USERNAME
db_password =
*/
public static void main(String[] args) throws Exception
{
String
cadenaConn="jdbc:mysql://localhost:3306/Hotel";
String driver = "[Link]";
String user = "root";
String pass = "123456";
CapaDatos cd=new
CapaDatosImpl(driver,cadenaConn,user,pass);
ArrayList<String> sentencias = new ArrayList<>();
String insertCliente="INSERT INTO CLIENTES
VALUES ('1000402','jose','velez')";
String insertReservas="INSERT INTO Reservas
VALUES ('1000402',3)";;
String updateHabitacion="UPDATE Habitaciones
set ocupada=1 WHERE num_hab=3";
[Link](insertCliente);
[Link](insertReservas);
[Link](updateHabitacion);
if([Link](sentencias)){
[Link]("La transaccion se ha
ejecutado correctamente");
else{
[Link]("La transaccion mo se ha
realizado");
}
COMO TRABAJAR CON
HIBERNATE
Hibernate es una herramienta de mapeo
objeto-relacional (ORM) para la plataforma Java (y
disponible también para .Net con el nombre
de NHibernate) que facilita el mapeo de atributos entre
una base de datos relacional tradicional y el modelo
de objetos de una aplicación, mediante archivos
declarativos (XML) o anotaciones en los beans de las
entidades que permiten establecer estas relaciones.
OPEACIONES BASICAS CON
HIBERNATE
1. CREAMOS UN NUEVO PROYECTO TIPO MAVEN
APLICACION
POR EJEMPLO LLAMADO
HibernateOperacionesBasicas4
2. CAMBIAMOS AL JDK 1.8
3. AGREGAMOS LOS SIGIOENTES TAGS AL ARCHIVO
[Link]
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.0.0.Alpha4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.0</version>
</dependency>
</dependencies>
4. CREAMOS EL ARCHIVO persistence
4.1 CLIC DERECHO SOBRE EL PROYECTO
4.2 NEW- XML DOCUMENT
4.2 NOMBRE DEL ARCHIVO persistence
4.3 LO DEPOSITAMOS EN LA CARPETA :
src\main\resources\META-INF
4.4 NEXT- FINISH
4.5 ACCEDMOS AL ARCHIVO [Link] ,
borramos todo excepto la primera linea
4.6 COPIAMOS EL SIGUIENTE BLOQUE DE TAGS
<persistence version="2.2"
xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
stence
[Link]
<persistence-unit name="HibernateEjemplo1"
transaction-type="RESOURCE_LOCAL">
<provider>[Link]
er</provider>
<class>[Link]</class>
<properties>
<property name="[Link]"
value="jdbc:mysql://localhost:3306/hibernate4?useSSL
=true&useTimezone=true&serverTimezone=U
TC"/>
<property name="[Link]"
value="root"/>
<property name="[Link]"
value="123456"/>
<property name="[Link]"
value="[Link]"/>
<property name="hibernate.show_sql" value="true"/>
<property name="[Link]"
value="[Link]"/>
</properties>
</persistence-unit>
</persistence>
4.7 DONDE:
4.7.1 <class>[Link]</class> ENTIDAD ES EL
NOMBRE DEL PAQUETE DONDE SE ENCUENTRA
NUESTRA CLASE DE ENTIDAD
4.7.2 Clilente: es nuestra calse de entidad de la base de
datos
4.7.3, hibernate4: es el nombre de nuestra base de
datos
4.7.4 user y password; usuario y password de nuestra
base de datos en Mysql
4.7.5: <property name="[Link]"
value="[Link]"/>: es la clase del driver
de coenxion a nuestra base de datos
4.7.6: name="HibernateEjemplo1" ; es el nombre de
nuestra unidad de persistencia
5. CREAMOS NUEXTRA CLASE DE ENTIDAD QUE SE VA
A CONECTAR CON NUESTRA BASE DE DATOS, LA
VAMOS A LLAMAR Cliente(igual que el nombte de
nuestra tabla de base de datos en Myql) Y LA VAMOS A
DEPOSIYAR EN EL PAQUETE entidad
ESTA VA A SER LA CLASE DE ENTIDAD QUE SE VA A
CONECTAR CON NUESTRA BASE DE DATOS
LA TABLA DE cliuente ya le hemos creado en Mysql
6. LA TABLA DE BASE DE DATOS QUE HEMOS CREADO
EN MYSQL DEBE TENER PRIMARY KEY , EN ESTE
CLASO ES Cliente_id
7. VAMOS A LA CLASE DE [Link] PARA
CONVERTIRLA EN UNA CLASE DE ENTIDAD
7.1 AGREGAOS LA ANOTACION @Entity E
IMPORTAMOS import [Link];
7.2 IMPLEMETAMOS LA INTERFACE DE SERIALIZABLE
E IMPORTAMOS import [Link];
7.3 IMPLEMENTAMOS EL METODO DE LA CLASE
SERIALIZABLE
7.4 DEFINIMOS LOS CAMPOS DE NUESTRA CLASE,
DEBEN SER LOS MISMO D ENUESTRA BASE DE DATOS
DE MYSQL
EMPEZAMOS CON LA PRIARY KEY DE NUESTRA BASE
DE DSATOS DE MYSQL
ADEMAS DEBE SER EL CAMPO DE LA PRIMEA
COLUMNA DE NUEDSTRA BASE DE DATOS
EN ESTE CASO LA PRIMERA COLUMNA DE NUESTRA
BASE DE DATOS ES Cliente_id
7.5 IMPORTAMOS EL PAQUETE DE JAVAPERSISTENCE:
import [Link].*;
7.6 AGEGAMOS LA COLUMNA ID, ya que esta Columna
VA A SER EL ID DE NUESTRA BASE DE DATOS O MEJOR
DICJO NUESTRA PRIMARY KEY
Cliente_id es la LLAVE PRIMARIA DE NUESTRA BASE DE
DATOS
7.7 AQUI VEMOS EN NUESTRA BASE DE DATOS QUE
Cliente_id ES LA LLAVE PRIARIA DE NUESTRA BASDE
DE DATOS Y ADEMAS ES AUTO INCREMENTABLE
7.8 DEFINIMOS LAS DEMAS COLUMNAS DE NUESTRA
BASDE DE DATOS
private String nombre;
private String apellidos;
private String dni;
DEBEN SER DEL MISMO TIPO DE NUESTROS CAMPOS
EN LA BASE DE DSTOS(INT. VAR,LONG,ETC)
7.9 AGREGAMOS LA COLUMNA @Table(name =
"cliente"), DONDE cliente, ES LE NOMBRE DE NUESTRA
TABLA
7.10 AGREGAMOS NOS CONSTRUCTOR VACIO Y LOS
METODOS GETTER, SETTER, TO STRING
EJEMPO COMPLETO
package entidad;
import [Link];
import [Link].*;
@Entity
@Table(name = "cliente")
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="Cliente_id")
@Id
private int clienteId;
private String nombre;
private String apellidos;
private String dni;
public Cliente(){}
public int getClienteId() {
return clienteId;
public void setClienteId(int clienteId) {
[Link] = clienteId;
}
public String getNombre() {
return nombre;
public void setNombre(String nombre) {
[Link] = nombre;
public String getApellidos() {
return apellidos;
public void setApellidos(String apellidos) {
[Link] = apellidos;
}
public String getDni() {
return dni;
public void setDni(String dni) {
[Link] = dni;
@Override
public String toString() {
return "Cliente{" + "clienteId=" + clienteId + ",
nombre=" + nombre + ", apellidos=" + apellidos + ", dni="
+ dni + '}';
}
}
8 CREAMOAS UNA CLASE QUE VA A APLICAR EL
PATRON DE DISEÑO DAO,(DATA ACCESS OBJETC) QU
NOS VA A PERMITIR CONECTAR CON NUESTRA BASE
DE DTAOS
EL CUAL VA A CONTENER LAS OPERACIONES
BASISCAS DE ACCAESO A NUESTRA BASE DE DATOS ,
COMO PUEDEN SER SELECT, UPDATE, CREATE Y
DELETE
8.1 VAMOS A SOUCE PACKAGE, CREAMOS LA CLASE
ClienteDAO EN EL PAQUETE dao
8.2 UTILIZAMOS LAS CLASE DE EntityManagerFactory Y
EntityManager PARA CREAR UNA INSTANCIA Y PODER
CONECARNOS A NUESTRA BASE DE DATOS
8.3 DECLARAMOS UNA VARIABLE D TIPO
EntityManagerFactory LLAMADA emf
8.4 DELARAMOS OTRA VARIABLE DE TIUPO
EntutyManager LAMADA em
private EntityManager em;
8.5 IMPORTRAMOS LOS PAQUETES QUE NOS SUGIERE
EL IDE
import [Link];
import [Link];
8.6 CREAMOS UN CONSTRUCTOR, Y EN ESTA CLASE
ES DONDE VAMOS A CREAR LA INSTANCIA DE
NUESTRA FABRICA PARA PODER CONECTARNOS A LA
UNIDAD DE PERSISTENCIA DE HIBERNATE
AGREGAMOS CONTRUCTOR VACIO
8.7 UTILIZAMOS LA UNIDAD DE PERSISTENCIA PARA
ASIGNARLA A NUESTRA VARIABLE DE ENTITY
MANAGER FACTORY
emf =
[Link]("HibernateEje
mplo1");
DONDE HibernateEjemplo1, ES EL NOMBRE DE
NUESTRA UNIDAD DE PERSISTENCIA
EL NOMBRE DE LA UNIDAD DE PERSISTENCIA LO
ENCONTRAMOS EN EL ARCHIVO [Link]
8.8 INSTANCIAMOS NUESTRA FABRICA ASIGNADOLO
A NUESTRA VARIABLE DE ENTITY MANAGER
UTILIZANDO EL OBJETO ENTUTY MANAGER FAC TORY
em = [Link]();
Y POR MEDIO DE ESTA VARIABLE DE ENTUTY
MANAGER FACTORY ES QUE PODEMOS HACER LAS
CONSUTAS O LAS OPERRACIONES QUE VAYAMOS A
REALIZAR CON HIBERNATE
8.9 AHORA PODEMOS CREAR LOS METODOS DE
ACCESO A NUESTRA BASE DE DATOS
8.9.1 CREAMOS EL METODO DE LISTAR
8.9.2 DEFINIMOS LA CONSULTA QUE QUEREMOS
EJECUTAR
String hql = "SELECT p FROM Cliente p";
QUE ES DE TIPO hql
DONDE P= ES EL ALIAS
Cliente; ES LA CLASE QUE VAMOS A UTILIZAR
8.9.3 EJECUTAMOS EL QUERY
Query query = [Link](hql);
CON ESTO SE EJECUTA NUESTRO QUERY PARA
SELECCIOPNAR TODOS LOS OBJETOS DE TIPO
CLIENTE
RECORDEMOS QUE ESTAMO RECUPERANDO OBJETOS
COMPLETOS Y NO COLUMNAS DE MANERA
INDEPENDIENTE
8.9.4 RECUPERAMOS ESTA LISTA DE OBJETOS DE TIPO
PERSONA y POR DMEDIO DEL OBJETO QUERY
MANDAMOS A LLAMAR EL METODO GETRESULTLIST
PARA QUE NOS REGRESO LOSOBJETOS DEL TIUPO
Cliente QUE ESTAMOS RECUPERANDO
List<Cliente> personas = [Link]();
8.9.5 IMPORTAMOS import [Link];
import [Link];
8.9.6 IETERAMOS MEDIANTE FOR
for (Cliente p : personas) {
[Link]("p = " + p);
ejemplo completo cliente dao
package dao;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/**
* @author Circet
*/
public class ClienteDAO {
private EntityManagerFactory emf;
private EntityManager em;
public ClienteDAO() {
emf =
[Link]("HibernateEje
mplo1");
em = [Link]();
public void listar() {
String hql = "SELECT p FROM Cliente p";
Query query = [Link](hql);
List<Cliente> personas = [Link]();
for (Cliente p : personas) {
[Link]("p = " + p);
9. CREAMOS EL ARCHIVO log4j2 en la ruta
src\main\resources\META-INF, OSEA EN LA MISMA
RUTA DONDE ESTA EL ARCHIVO [Link]
9. BORRAMOS TODAS LAS LINEAS MEN OS LA
PRIMERA
:
9.1 COPIAMOS LOS SIGUIENTES TAGS EN EL ARCHIVO
log4j2
LA RUTA DEL ARCHIVO log4j2 ES LA MISMA QUE LA
DEL ARCHIVO persistence. Xml osea:
src\main\resources\META -INF
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t]
%-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="[Link]" level="debug"
additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Logger
name="[Link]"
level="trace" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
10 CREAMOS UN MAIN
10.1 PARA PODER LLAMAR A LOS METODOS DE
NUESTRA CLASE ClienteDAO, CREAMOSMUN OBJETO
DE TIPO ClienteDAO
ClienteDAO personaDao = new ClienteDAO();
10.2 LLAMAMOS EL METODO LISTAR DESDE EL MAIN
[Link]();
10.3 EJECUTAMOS
RUN
11. COMO CREAR METODO
INSERTAR CON HIBERNATE
11.1 pegamos el siguiente código en el archivo
[Link]
public void insertar(Cliente persona) {
try {
[Link]().begin();
[Link](persona);
[Link]().commit();
} catch (Exception ex) {
[Link]([Link]);
[Link]().rollback();
}
DONDE Cliente es le nombre de nuestra clase de
entidad, este metodo recibe un objeto de tipo Cliente
lalmado persona
11.2 mandamos a llmar este metodo desde el main
11.2.2 creamosm un objeto del tipo Cliente
Cliente persona = new Cliente();
11.2.3. ASIGNAMOS LOS VALORES DE LAS VARIABLES
Y MANDAMOS A LLMAR EL METODO
[Link]("PERPEERA");
[Link]("GOMEZ");
[Link]("7778");
[Link](persona);
11.2.4. EJECUTAMOS Y VEMOS COMO SE GREGA EL
OBJETO A NUESTRA BASE DE DATOS
12 COMO CRERAR METODO
PARA MODIFICAR CON
HIBERNATE
12.1 VAMOS AL ARCHIVO ClienteDAO Y ANEXAMOS EL
SIGUIENTE CODIGO UTILIZANDO EL METODO MERGE
public void modificar(Cliente persona) {
try {
[Link]().begin();
[Link](persona);
[Link]().commit();
} catch (Exception ex) {
[Link]([Link]);
[Link]().rollback();
}
}
12.2 VAMOS AL METODO MAIN, PARA PODER
MODIFICAR UN REGISTRO NECESITANOS
PROPORCIONAR EL Cliente_id
12.2.1 asignamos a nuestro objeto el Cliente_id QUE
QUEREMOS MODIFICAR
[Link](6);
12.2.2. ASIGNAMOS LOS CAMPOS QUE QIETREMOS
MODIFICAR
[Link]("PAPILLA");
[Link]("PETREZ");
[Link]("1");
12.2.3. MANDAMOS A LLAMAR EL METODO
MODIFICAR Y LE PASEMOS EL OBJETO DAO CON LOS
PARAMETROS Y EL CLIente id a modificar
[Link](persona);
12.2.4. LISTAMOS
[Link]();
13. COMO CREAR UN
METODO EN HIBERNATE
PARA BSUCAR POR
Cliente_id
13.1 VAMOS AL ARCHIVO ClienteDAO
PEGAMOS EL SIGUIENTE CODIFO, PARA ESTO USAMO
EL METODO FIND Y PROPORCIIONAMOS EL ID DEL
TIPO PERSONA QUE QUEREMOS CONSULTAR
public Cliente buscarPersonaPorId(Cliente p) {
return [Link]([Link], [Link]());
}
ESTE METODO RECIBE UN PARAMETRO DEL TIUPO
PERSONA PERO SOLO DEBE CONTENER EL
PARAMETRO Cliente_id, ESTE PARAMETRO SE LO
ASIGNAMOS EN EL MAIN Y LO ENVIAMOS AQUI
RECORDEMOS QUE EL Cliente:id ES LA LLAVE
PRIMARIA
13.2 VAMOS AL MAIN
13.3 CREAMOS UN OBJETO DELTIPO ClienteDAO para
poder acceder al metodo
ClienteDAO personaDao = new ClienteDAO();
13.4 CREAMOS UN OBJETO DEL TUPO DE LA CLASE DE
NUESTRA CLASE DE ENTIDAD
Cliente persona = new Cliente();
13.5 AL OBJETO DE ENTIDAD LE ASIGNAMOS EL
Cliente_id que querems ocnsultar
[Link](2);
13-5 MEDIANTE EL OBJETO personaDAO del tipo
Cliente DAO ACCEDEMOS AL METODO
buscarPersonaPorId y le pasamos el objeto persona que
vamos a consultar
13.6 EL OBJERO ENCONTRADO LO ASIGNAMOS A
NUESTRA VARIABLE persona
persona = [Link](persona);
13.7 IMPRIMIMOS LA VARIABLE DEL TIPO persona con
los valores recuperados de la base de datos
13.8 RUN
14. COMO CREAR METODO
ELIMINAR CON HIBERNATE
EL METODO QUE USAMOS ES EL REMOVE
1. COPIAMOS EL SIGUIENTE CODIFO EN ClienteDAO
public void eliminar(Cliente persona) {
try {
[Link]().begin();
[Link]([Link](persona));
[Link]().commit();
} catch (Exception ex) {
[Link]([Link]);
[Link]().rollback();
}
}
EL UNICO VALOR QUE TENEMOS QUE PASARLE AL
METODO ES UN OBJETO DEL TIPO Cliente llamadfa
persona QUE CONTENGA EL Cliente_id
14.1 VAMOS AL MAIN Y COPIAMOS EL SIGUIENTE
CODIGO
ClienteDAO personaDao = new ClienteDAO();
Cliente persona = new Cliente();
[Link](2);
[Link](persona);
[Link]();
CODIGO COMPLETO
NOMBRE PROYECTO HibernateOperacionesBasicas4
paquete dao:
en este paquete va la clase [Link]
package dao;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/**
* @author Circet
*/
public class ClienteDAO {
private EntityManagerFactory emf;
private EntityManager em;
public ClienteDAO() {
emf =
[Link]("HibernateEje
mplo1");
em = [Link]();
public void listar() {
String hql = "SELECT p FROM Cliente p";
Query query = [Link](hql);
List<Cliente> personas = [Link]();
for (Cliente p : personas) {
[Link]("p = " + p);
public void insertar(Cliente persona) {
try {
[Link]().begin();
[Link](persona);
[Link]().commit();
} catch (Exception ex) {
[Link]([Link]);
[Link]().rollback();
}
public void modificar(Cliente persona) {
try {
[Link]().begin();
[Link](persona);
[Link]().commit();
} catch (Exception ex) {
[Link]([Link]);
[Link]().rollback();
public Cliente buscarPersonaPorId(Cliente p) {
return [Link]([Link], [Link]());
public void eliminar(Cliente persona) {
try {
[Link]().begin();
[Link]([Link](persona));
[Link]().commit();
} catch (Exception ex) {
[Link]([Link]);
[Link]().rollback();
PAQUETE entidad; en este paquete va la clase
Cliente,java
package entidad;
import [Link];
import [Link].*;
import [Link];
import [Link];
@Entity
@Table(name = "cliente")
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="Cliente_id")
@Id
private int clienteId;
private String nombre;
private String apellidos;
private String dni;
public Cliente() {
public int getClienteId() {
return clienteId;
public void setClienteId(int clienteId) {
[Link] = clienteId;
public String getNombre() {
return nombre;
public void setNombre(String nombre) {
[Link] = nombre;
}
public String getApellidos() {
return apellidos;
public void setApellidos(String apellidos) {
[Link] = apellidos;
public String getDni() {
return dni;
public void setDni(String dni) {
[Link] = dni;
}
@Override
public String toString() {
return "Cliente{" + "clienteId=" + clienteId + ",
nombre=" + nombre + ", apellidos=" + apellidos + ", dni="
+ dni + '}';
PAQUETE test; en este paquete va el main [Link]
package test;
import [Link];
import [Link];
/**
*
* @author Circet
*/
public class prueba {
public static void main(String[] args) {
//
// ClienteDAO personaDao = new ClienteDAO();
// [Link]();
// Cliente persona = new Cliente();
// [Link]("PERPEERA");
// [Link]("GOMEZ");
// [Link]("7778");
// [Link](persona);
// BLOQUE DE CODIGO PARA MODIFICAR
PERSONA
// [Link](6);
// [Link]("PAPILLA");
// [Link]("PETREZ");
// [Link]("1");
//
// [Link](persona);
// [Link]();
// METODO PARA BSUCAR UNA PERSONA POR ID
// ClienteDAO personaDao = new ClienteDAO();
// Cliente persona = new Cliente();
// [Link](2);
// persona =
[Link](persona);
// [Link]("persona encontrada = " +
persona);
// BLOQUE PARA ELIMINAR UN REGISTRO
PROPORCIONANDO Cliente_id
ClienteDAO personaDao = new ClienteDAO();
Cliente persona = new Cliente();
[Link](2);
[Link](persona);
[Link]();
ARCHIVO log4j2 va en la ruta
src\main\resources\META-INF
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t]
%-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="[Link]" level="debug"
additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Logger
name="[Link]"
level="trace" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
ARCHIVO persistence va en la misma ruta de log4j2
<persistence version="2.2"
xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
stence
[Link]
<persistence-unit name="HibernateEjemplo1"
transaction-type="RESOURCE_LOCAL">
<provider>[Link]
er</provider>
<class>[Link]</class>
<properties>
<property name="[Link]"
value="jdbc:mysql://localhost:3306/hibernate4?useSSL
=true&useTimezone=true&serverTimezone=U
TC"/>
<property name="[Link]"
value="root"/>
<property name="[Link]"
value="123456"/>
<property name="[Link]"
value="[Link]"/>
<property name="hibernate.show_sql" value="true"/>
<property name="[Link]"
value="[Link]"/>
</properties>
</persistence-unit>
</persistence>
DEPENDECIAS QUE VA EN EL ARCHIVO [Link]
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.0.0.Alpha4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.0</version>
</dependency>
</dependencies>
ARCHIVO [Link]
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"[Link]
[Link]">
<!-- Version 8 MySQL [Link] example for
Hibernate 5 -->
<hibernate-configuration>
<session-factory>
<property
name="connection.driver_class">[Link]
er</property>
<property
name="[Link]">jdbc:mysql://localhost:3306/hib
ernate4</property>
<property
name="dialect">[Link]</pr
operty>
<property
name="[Link]">root</property>
<property
name="[Link]">123456</property>
<property name="connection.pool_size">1</property>
<property
name="current_session_context_class">thread</propert
y>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!--<property
name="[Link]">update</property>-->
<mapping resource="[Link]"/>
</session-factory>
</hibernate-configuration>
EN EL SIGUIENTE PANTALLAZO PODEMOS VER LA
RUTA DE LOS ARCHIVOS
PASOS PARA TRABAJAR
CON HIBERNATE WEB
[Link] UN NUEVO PROYECTO WEB TIPO MAVEN,
PARA ESTE EJEMPLO LO LLAMAREMOS
PersonasWebHibernate2
2, VAMOS A PROPIEDADES DEL PROYECTO Y LE
CAMBIAMOS EL JDK A 1.8 Y GLASSFISH 5.0
3. VAMOS A EL ARCHIVO [Link] Y COPIAMOS LOS
SIGIUENTES TAGS
<dependency>
<groupId>[Link]</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.0.0.Alpha4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.0</version>
</dependency>
4. LE DAMOS CLEAN AND BUILD
5. CREAMOS UN A CLASE LLAMADA Cliente DENTRO
DEL PAQUETE LLAMADO entidad , ESTA ES LA CLASE
QUE V A CONTENER NUESTRA CLÑASE DE ENTIDAD DE
BASE DE DATOS
VER SECCION ANTERIOR PARA CREAR ESTA CLASE
package entidad;
import [Link];
import [Link].*;
import [Link];
import [Link];
@Entity
@Table(name = "cliente")
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="Cliente_id")
@Id
private int clienteId;
private String nombre;
private String apellidos;
private String dni;
public Cliente() {
public int getClienteId() {
return clienteId;
public void setClienteId(int clienteId) {
[Link] = clienteId;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
[Link] = nombre;
public String getApellidos() {
return apellidos;
public void setApellidos(String apellidos) {
[Link] = apellidos;
public String getDni() {
return dni;
}
public void setDni(String dni) {
[Link] = dni;
@Override
public String toString() {
return "Cliente{" + "clienteId=" + clienteId + ",
nombre=" + nombre + ", apellidos=" + apellidos + ", dni="
+ dni + '}';
4. CREAMOS EL DATA ACCES OBJECT DENTTRO DEL
PAQUETE DAO, ESTA CLASE SE VA A LLAMAR
ClienteDAO, PARA MAS DETALLES VER SECCION
ANTERIOR
package dao;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/**
* @author Circet
*/
public class ClienteDAO {
private EntityManagerFactory emf;
private EntityManager em;
public ClienteDAO() {
emf =
[Link]("HibernateEje
mplo1");
em = [Link]();
public List<Cliente> listar() {
String hql = "SELECT p FROM Cliente p";
Query query = [Link](hql);
List<Cliente> personas = [Link]();
return personas;
public void insertar(Cliente persona) {
try {
[Link]().begin();
[Link](persona);
[Link]().commit();
} catch (Exception ex) {
[Link]([Link]);
[Link]().rollback();
public void modificar(Cliente persona) {
try {
[Link]().begin();
[Link](persona);
[Link]().commit();
} catch (Exception ex) {
[Link]([Link]);
[Link]().rollback();
public Cliente buscarPersonaPorId(Cliente p) {
return [Link]([Link], [Link]());
public void eliminar(Cliente persona) {
try {
[Link]().begin();
[Link]([Link](persona));
[Link]().commit();
} catch (Exception ex) {
[Link]([Link]);
[Link]().rollback();
5. CREAMOS LA CLASE ServicioPersonas DENTRO DEL
PAQUETE servicio, PARA MAS DETALLES VER SECCION
ANTERIOR
package servicio;
import [Link];
import [Link];
import [Link];
public class ServicioPersonas {
private ClienteDAO personaDao;
public ServicioPersonas(){
[Link] = new ClienteDAO();
public List<Cliente> listarPersonas(){
return [Link]();
}
5. CREAMOS EL ARCHIVO [Link], borramos
todas las lineas y dejamos solo la primera l y copiamos
los siguientes tags, PARA VER MAS DETTALLES VER
SECCIOJMN ANTERIOR
<persistence version="2.2"
xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
stence
[Link]
<persistence-unit name="HibernateEjemplo1"
transaction-type="RESOURCE_LOCAL">
<provider>[Link]
er</provider>
<class>[Link]</class>
<properties>
<property name="[Link]"
value="jdbc:mysql://localhost:3306/hibernate4?useSSL
=false&useTimezone=true&serverTimezone=U
TC&allowPublicKeyRetrieval=true"/>
<property name="[Link]"
value="root"/>
<property name="[Link]"
value="123456"/>
<property name="[Link]"
value="[Link]"/>
<property name="hibernate.show_sql" value="true"/>
<property name="[Link]"
value="[Link]"/>
</properties>
</persistence-unit>
</persistence>
PARA MAS DETTALLES VER SECCION ANETRIOR
[Link] EL ARCHIVO log4j2 y COPIAMOS EL
SIGUIENTE TAG
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t]
%-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="[Link]" level="debug"
additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Logger
name="[Link]"
level="trace" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
[Link] AL ARCHIVO [Link] QUE SE
ENCUENTRA EN LA CARPETA WEB-INF Y BORRAMOS
TODAS LAS LINERAS EXCEPTO LA PRIMERA, Y
COPIAMOS LOS SIGUIENTES TAGS
<web-app version="4.0"
xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
e
[Link]
<servlet>
<servlet-name>ServletControlador</servlet-name>
<servlet-class>[Link]</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletControlador</servlet-name>
<url-pattern>/ServletControlador</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
DONDE
<servlet-name>ServletControlador</servlet-name> EN
ESTE TAGS VA EL NOMBRE DEL SEVLET
CONYTROLADOR
8. CREAMOS EL CONTROLADOR QUE EN ESTE CASO SE
VA LLAMAR ServletControlador
9, RECUPERAMPOS UNA INSTANCIA DE NUESTRA
CAPA DE DATOS A TRAVES DE UNA VARIABLE DEL
TIPO ServicioPersonas
ServicioPersonas servicioPersonas = new
ServicioPersonas();
10. RECUPERAMOS EL LISTADO DE CLIENTES,
UTILIZANDO NUESTRA VARIABLE DE ServicioPersonas
y mandando a llamar el metodo LISTAR PEROSNAS QUE
HEMOS DEFINIDO ANTERIORMENYTE, CON ESTO YA
ESTAMOS RECUPERANDO NUESTRO LISTADO DE
CLIENTES
List<Cliente> personas =
[Link]();
[Link] ESTA VARIABLE DE LISTADO DE
PERSONAS EN ALGUN ALCANCE, EN ESTE CASO
VAMOS A SELECCIONAR EL ALCANCE DE REQUEST Y
MANDAM OS A LLMAR EL METODO SetAtribute, la
variable se va a llmar personas, asi es como la vamos a
recuperar desde [Link]
[Link]("personas", personas);
12 RE DIRECCIONAMOS AL JSP QUE QUEREMOS
SELECCIONAR, EN ESTE CASO VAMOS A RE DIRIGIR AL
JSP listado,jsp
[Link]("/WEB-INF/[Link]").f
orward(request, response);
donde /WEB-INF/ es la ruta
13, ESTO PUEDE GENERAR UNA EXCEPCION ASI QUE
LO ENVOLVEMOS EN UN TRY CATCH
try {
[Link]("/WEB-INF/[Link]").f
orward(request, response);
} catch (ServletException ex) {
[Link]([Link]);
} catch (IOException ex) {
[Link]([Link]);
}
EJEMPLO COMPLETO DEL SERVLET
/*
* Click
nbfs://nbhost/SystemFileSystem/Templates/Licenses/l
[Link] to change this license
* Click
nbfs://nbhost/SystemFileSystem/Templates/JSP_Servl
et/[Link] to edit this template
*/
package web;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
* @author Circet
*/
public class ServletControlador extends HttpServlet {
protected void processRequest(HttpServletRequest
request, HttpServletResponse response)
throws ServletException, IOException {
[Link]("text/html;charset=UTF-8");
try (PrintWriter out = [Link]()) {
/* TODO output your page here. You may use
following sample code. */
[Link]("<!DOCTYPE html>");
[Link]("<html>");
[Link]("<head>");
[Link]("<title>Servlet
ServletControlador</title>");
[Link]("</head>");
[Link]("<body>");
[Link]("</body>");
[Link]("</html>");
[Link]("hika");
ServicioPersonas servicioPersonas = new
ServicioPersonas();
List<Cliente> personas =
[Link]();
[Link]("personas", personas);
try {
[Link]("/WEB-INF/[Link]").f
orward(request, response);
} catch (ServletException ex) {
[Link]([Link]);
} catch (IOException ex) {
[Link]([Link]);
// <editor-fold defaultstate="collapsed"
desc="HttpServlet methods. Click on the + sign on the
left to edit the code.">
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error
occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error
occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
14. AHORA VAMOS AL ARCHIVO [Link] Y LO
MODIFICAMOS PARA GENERAR UN LINK PARA RE
DIRECCIONAR A NUESTRO SERVLET
<a
href="/PersonasWebHibernate2/ServletControlador">Lis
tar Personas con Hibernate y JPA</a>
15. BORRAMOS EL ARCHIVO [Link] QUE SE
ENCUENTRA EN LA CARPETA WEB-INF
[Link] EL ARCHIVO listado,jsp DENTRO D ELA
CARPETA WEB-INF
17. VAMOS A UTILIZAR EL TAG DE CORE DE JSP PARA
PODER ITERAR LAS PERSONAS QUE VAMOS A RECIBIR
EN ESTE JSP, P`R LO TANTO IMPORTAMOS ESTA
LIBRERIA
<%@taglib prefix="c"
uri="[Link] %>
18. CREAMOS UNA TABLA CON LOS ENCABEZADOS DE
LAS COLUMNAS PARA NUESTRA TABLA
<tr>
<th>Cliente id</th>
<th>Nombre</th>
<th>Apellidos</th>
<th>Dnil</th>
</tr>
ESTOS VAN A SER LOS CABECEROS DE NUESTRA
TABLA
[Link] LOS ELEMNTOS UTILIZANDO UN CICLO
FOR
<c:forEach var="persona" items="${personas}" >
</c:forEach> DONDE persona es el nombre de la
variable que vamos a utoizar para iterar y la variable
personas es la que hemos compartido desde el servlet
[Link] UN RENCGLOIN QUE SE VA A REPETIR
TANTNAS VECES COMO TENGA REGISTRO MI BASE DE
DATOS
<tr>
</tr>
21. accedemos a cada unos de los elementos del tipo
Cliente
<td>${[Link]}</td>
<td>${[Link]}</td>
<td>${[Link]}</td>
<td>${[Link]}</td>
ESTAS SON LAS MISMAS NOMBRES DE COLUMNAS
QUE TENEMOS EN NUESTRA BASE DE DATOS
22. CLEAN AND BUILD
23. EJECUTAMOS
EJEMPLO COMPLETO DE
LAS PAGINAS
listado,jsp; DENTRO DE CARPETA WEB-INF
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<%@taglib prefix="c"
uri="[Link] %>
<!DOCTYPE html>
<html>
<head>
<title>Listado de Personas</title>
</head>
<body>
<table border="1">
<caption>Listado de Personas</caption>
<tr>
<th>Cliente id</th>
<th>Nombre</th>
<th>Apellidos</th>
<th>Dnil</th>
</tr>
<c:forEach var="persona" items="${personas}" >
<tr>
<td>${[Link]}</td>
<td>${[Link]}</td>
<td>${[Link]}</td>
<td>${[Link]}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
[Link] DENTRO DE CARPETA WEB-INF
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0"
xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
e
[Link]
<servlet>
<servlet-name>ServletControlador</servlet-name>
<servlet-class>[Link]</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletControlador</servlet-name>
<url-pattern>/ServletControlador</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
[Link] dentro de carpeta WEB PAGES
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo Personas Web Hibernate JPA</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Ejemplo Personas Web Hibernate JPA!</h1>
<br/>
<a
href="/PersonasWebHibernate2/ServletControlador">Lis
tar Personas con Hibernate y JPA</a>
</body>
</html>
ClienteDAO DENTRO DE PAQUETE DAO
package dao;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/**
*
* @author Circet
*/
public class ClienteDAO {
private EntityManagerFactory emf;
private EntityManager em;
public ClienteDAO() {
emf =
[Link]("HibernateEje
mplo1");
em = [Link]();
public List<Cliente> listar() {
String hql = "SELECT p FROM Cliente p";
Query query = [Link](hql);
List<Cliente> personas = [Link]();
return personas;
}
public void insertar(Cliente persona) {
try {
[Link]().begin();
[Link](persona);
[Link]().commit();
} catch (Exception ex) {
[Link]([Link]);
[Link]().rollback();
public void modificar(Cliente persona) {
try {
[Link]().begin();
[Link](persona);
[Link]().commit();
} catch (Exception ex) {
[Link]([Link]);
[Link]().rollback();
public Cliente buscarPersonaPorId(Cliente p) {
return [Link]([Link], [Link]());
public void eliminar(Cliente persona) {
try {
[Link]().begin();
[Link]([Link](persona));
[Link]().commit();
} catch (Exception ex) {
[Link]([Link]);
[Link]().rollback();
}
}
[Link] DENTRO DEL PAQUETE entidad
package entidad;
import [Link];
import [Link].*;
import [Link];
import [Link];
@Entity
@Table(name = "cliente")
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="Cliente_id")
@Id
private int clienteId;
private String nombre;
private String apellidos;
private String dni;
public Cliente() {
public int getClienteId() {
return clienteId;
}
public void setClienteId(int clienteId) {
[Link] = clienteId;
public String getNombre() {
return nombre;
public void setNombre(String nombre) {
[Link] = nombre;
public String getApellidos() {
return apellidos;
public void setApellidos(String apellidos) {
[Link] = apellidos;
public String getDni() {
return dni;
public void setDni(String dni) {
[Link] = dni;
@Override
public String toString() {
return "Cliente{" + "clienteId=" + clienteId + ",
nombre=" + nombre + ", apellidos=" + apellidos + ", dni="
+ dni + '}';
}
}
ServicioPersonas DENTRO DEL PAQUETE servicio
import [Link];
import [Link];
import [Link];
public class ServicioPersonas {
private ClienteDAO personaDao;
public ServicioPersonas(){
[Link] = new ClienteDAO();
}
public List<Cliente> listarPersonas(){
return [Link]();
ServletControlador DENTRO DEL PAQUETE web
/*
* Click
nbfs://nbhost/SystemFileSystem/Templates/Licenses/l
[Link] to change this license
* Click
nbfs://nbhost/SystemFileSystem/Templates/JSP_Servl
et/[Link] to edit this template
*/
package web;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
* @author Circet
*/
public class ServletControlador extends HttpServlet {
protected void processRequest(HttpServletRequest
request, HttpServletResponse response)
throws ServletException, IOException {
[Link]("text/html;charset=UTF-8");
try (PrintWriter out = [Link]()) {
/* TODO output your page here. You may use
following sample code. */
[Link]("<!DOCTYPE html>");
[Link]("<html>");
[Link]("<head>");
[Link]("<title>Servlet
ServletControlador</title>");
[Link]("</head>");
[Link]("<body>");
[Link]("</body>");
[Link]("</html>");
[Link]("hika");
ServicioPersonas servicioPersonas = new
ServicioPersonas();
List<Cliente> personas =
[Link]();
[Link]("personas", personas);
try {
[Link]("/WEB-INF/[Link]").f
orward(request, response);
} catch (ServletException ex) {
[Link]([Link]);
} catch (IOException ex) {
[Link]([Link]);
}
}
// <editor-fold defaultstate="collapsed"
desc="HttpServlet methods. Click on the + sign on the
left to edit the code.">
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error
occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error
occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
log4j2 DENTRO DE LA CARPETA
src\main\resources\META-INF
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t]
%-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="[Link]" level="debug"
additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Logger
name="[Link]"
level="trace" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
[Link] dentro de carpera
src\main\resources\META-INF
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
stence
[Link]
<persistence-unit name="HibernateEjemplo1"
transaction-type="RESOURCE_LOCAL">
<provider>[Link]
er</provider>
<class>[Link]</class>
<properties>
<property name="[Link]"
value="jdbc:mysql://localhost:3306/hibernate4?useSSL
=false&useTimezone=true&serverTimezone=U
TC&allowPublicKeyRetrieval=true"/>
<property name="[Link]"
value="root"/>
<property name="[Link]"
value="123456"/>
<property name="[Link]"
value="[Link]"/>
<property name="hibernate.show_sql" value="true"/>
<property name="[Link]"
value="[Link]"/>
</properties>
</persistence-unit>
</persistence>
[Link]
<dependency>
<groupId>[Link]</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.0.0.Alpha4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.0</version>
</dependency>
COMO TRABAJAR CON
STRUTS
[Link] UN PROYECTO APPLICACION TIPOI
MAVEN
POR EJEMPLOHolaMundoStruts
2. VAMOS AL ARCHIVO [Link] Y AGREGAMOS LAS
SIGUIENTES DEPENDENCIAS
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.22</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.0</version>
</dependency>
3. DETENER EL SERVIDOR DE GLASSFISH Y LE DAMOS
CLEAN AND BUILD
4. SI NO DESCARGA CORRECTAMENTE LAS LIBRERIAS
DRSACTIVAMOS CUALQUIE ANTIVUROS O FIREWALL
[Link] AL ARCHIVO [Link] QUE SE ENCUENTRA
EN LA RUTA WEB PAGES-> WEB-INF
5.1 BORRAMOS LAS LINEAS Y DEJAMOS SOLO LAS
QUE VEMOS A CONTINUACION
5.2 AGREGAMOS LOS SIGUIENTES TAGS
<filter>
<filter-name>struts2</filter-name>
<filter-class>[Link]
repareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
DONDE <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>: INDICA LAS URLS QUE VAMOS A
PROCESAR CON EL FRAMEWORK STRUTS
/*: SIGNIFICA QUE VA A PROCESAR TODAS LAS URL
ESTA APLICACION WEB
6. CREAMOS UNA CLASE DE JAVA EN LA CUAL VAMOS
A PROCESAR LA PETICION DE NUESTRA APLICACION
WEB LA CUAL SE VA A LLAMR HolaMundoAction, Y LA
VAMOS A DEPOSITAR EN EL PAQUETE BEAN
7. UTILIZAMOS EL API DE log4j PARA MANADAR
INFORMACION A LA CONSOLA
Logger log =
[Link]([Link]
DONDE : ([Link]); ES EL NOMBRE DE
LA CLASE CON LA QUE ESTAMOS TRABAJANDO
8. IMPORTAMOS import [Link].log4j.*;
9. CREAMOS EL ATRIBUTO saludosAtr QUE ES EL QUE
VAMOS A UTILIZAR DESDE EL JSP PARA PODER
MANDAR INFORMACION HACIA EL CLIENTE
private String saludosAtr;
10. AGEGAMOS LOS METODOS GET Y SET PARA
PODER ACCEDER DESDE EL JSP A ESTE ATRIBUTO
YA QUE ESTAMOS TRABAJANDO CON EL CONCEPTP
DE JAVA BEANS
public String getSaludosAtr() {
return saludosAtr;
public void setSaludosAtr(String saludosAtr) {
[Link] = saludosAtr;
}
11. AGREGAMOS EL METODO QUE VA A EJECUTAR EL
FRAMWORK DE STRUTS CUANDO SE EJECUTE ESTA
CLASE JAVA , ESTE METODO SE VA A LLAMAR execute
public String execute(){
[Link]("ejecutando metodo execute desde
struts2");
[Link] = "Hola desde Struts2";
return "exito";
DONDE 11. 1 execute es el nombre del metodo
[Link], se usa para enviar mensaje a la consola
11.3 saludosAtr: se modifica el valor de esta variable
para enviar esta variable al jsp
11.4: return "exito"; exito ES EL NOMBRE DEL JSP QUE
VAMOS A HJECUTAR
12. VAMOS AL ARCHIVO [Link] y modificamos el
H1 Y el titulo Y EL PONEMOS INICIO
12.1 AGREGAMOS UN LINK PARA RE DIRECCIONAR A
LA CLASE DE STRUTS QUE HEMOS CONFIGURADO
ESTE LINK SE LLAMA saludar, LUEGO EN EL ARCHIVO
[Link] VAMOS A INDICAR QUE CUANDO SE
EJECUTE EL PATH DE saludarENTONCES SE DEBE DE
EJECUTAR LA CLASE DE HolaMundoAction
ASI ES COMO IMPLEMENTA EL PATRON MVC
NUESTRO FRAMWORK DE STRUTS 2
<a href="saludar">Ir a Struts 2</a>
13. CREAMOS EL ARCHIVO [Link] QUE A SER LA
VISTA QUE VA A ENVIAR LA INFORMACION AL
USUSARIO
14. IMPORTAMOS <%@taglib prefix="s"
uri="/struts-tags" %> PARA PODER PONER EN
PRACTICA EL CPNCEPTO DE TAGS DE STRUTS PARA
PODER TRABAJAR CON LOS TAGS DE STRUTS
[Link] EL TAG DE PROPERTY PARA MOSTRAR EL
CONTENIDO DE LA VARIABLE QUE ESTAMOS
ENVIANDO DESDE EL ARCHIVO HolaMundoAction
<h1><s:property value="saludosAtr"></s:property></h1>
NO ES QUE ESTEMOS ACCEDIENDPO DIRECTAENTE AL
ATRIBUTO. LO QUE APSA ES QUE ESTAMOS LLANDO
AL METODO GET DESDE EL ARCHIVO HolaMundoAtion
16. BORRAMOS EL ARCHIVO [Link] QUE SE
ENCUENTRA EN LA CARPERA src\main\resources
17. BORRAMOS EL ARCHIVO [Link] EL CUAL S
ENCEUNTRA EN LA CARPERTA WEB-INF
[Link] EL ARCHIVO [Link] EN LA RUTA
src\main\resources
18.1 BORRAMOS TODAS LAS LINEAS Y DEJAMOS SOLO
LA PRIMERA LINEA
18.2 AGREGAMOS LOS SIGUIENTES TAGS
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts
Configuration 2.5//EN"
"[Link]
<struts>
<package name="struts2" extends="struts-default">
<action name="saludar"
class="[Link]">
<result name="exito">/[Link]</result>
</action>
</package>
</struts>
DONDE
18.1.1<action name="saludar"
class="[Link]"> ;: saludar es el
nombre del path que pusimos en el [Link]
HolaMundoAction= es la clase java que se va a ejecutar
cuando le demos click en el context path del archivo
[Link]
beans= es el nombre del paquete dond se se encuentra
la clase HolaMuindoAction
18.1.2 exito= CAPTURAMOS EL RETURN QUE
ENVIAMOS DESDE EL METODO execute EN EL LA
CLASE HolaMundoStruts
[Link]; ES EL JSP QUE SE VA A EJECUTAR
UNA VEZ QUE SE HALLA EJECUTADO LA ACCION DE
APACHE STRUTS
19. RESUMIENDO:
19.1 EL ARCHIVO [Link] VA A MANDAR A LLAMR
EL ARCHIVO [Link]
19.2 EL ARCHIVO [Link] CAPTURA LA ACCION
saludar QUE LE ENVIA EL [Link]
19.3 LA ACCION SALUDAR DEL [Link] INDICA LA
CLASE QUE SE VA A EJECUTAR QUE EN ESTE CASO EN
HolaMundoStruts
19.4 SE EJECUTA EL METODO execute de la clase
HolaMUndoStruts
19.5. LA VARIABLE saludosAtr ADQUIERE EL VALOR DE
"Hola desde Struts2";
19.6 EL METODO execute DEVUELVE LA CADENA "exito"
19. 7 EL ARCHIVO [Link] CAPTURA EL RESULTADO
"exito" Y COMO CONSECUENCIA MANDA A LLAMAR AL
ARCHIVO [Link]
20, POR ULTIMO CREAMOS EL ARCHIVO log4j EN LA
RUTA src\main\resources
20-.1 BORRAMOS TODAS LAS LINEAS EXCEPTO LA
PRIMERA
20.2 COPIAMOS LOS SIGUIENTES TAGS
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="(%F:%L) - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="[Link].xwork2"
level="info"/>
<Logger name="[Link].struts2" level="info"/>
<Root level="info">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
DONDE:
20.2.1 <Console name="STDOUT"
target="SYSTEM_OUT">; INDICA QUE A INFORMACION
SE VA A MOSTRAR POR CONSOLA
20.2 <Logger name="[Link].struts2" level="info"/>:
PIEDE ESTAR A NIVEL DE info o A NIVEL DE debug
20.3 CLEAN AND BUILD
RUN
EJEMPLO COMPLETO:
ARCHIVO [Link]
[Link]<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
e [Link]
version="4.0">
<filter>
<filter-name>struts2</filter-name>
<filter-class>[Link]
repareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
ARCHIVO [Link]
<!DOCTYPE html>
<html>
<head>
<title>Inicio</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<h1>Inicio</h1>
<a href="saludar">Ir a Struts 2</a>
</body>
</html>
ARCHIVO [Link]
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Saludos desde Struts 2</title>
</head>
<body>
<h1><s:property
value="saludosAtr"></s:property></h1>
</body>
</html>
CLASE HolaMundoAction
package beans;
import [Link].log4j.*;
public class HolaMundoAction {
Logger log =
[Link]([Link]);
private String saludosAtr;
public String execute(){
[Link]("ejecutando metodo execute desde
struts2");
[Link] = "Hola desde Struts2";
return "exito";
}
public String getSaludosAtr() {
return saludosAtr;
public void setSaludosAtr(String saludosAtr) {
[Link] = saludosAtr;
}
ARCHIVO [Link]
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="(%F:%L) - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="[Link].xwork2"
level="info"/>
<Logger name="[Link].struts2" level="info"/>
<Root level="info">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
ARCHIVO [Link]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts
Configuration 2.5//EN"
"[Link]
<struts>
<package name="struts2" extends="struts-default">
<action name="saludar"
class="[Link]">
<result name="exito">/[Link]</result>
</action>
</package>
</struts>
ARCHICVO [Link]
<project xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
0.0 [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>HolaMundoStruts</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<name>HolaMundoStruts</name>
<properties>
<[Link]>1.8</[Link]>
<[Link]>1.8</[Link]>
<[Link]>${[Link]}/endorsed</end
[Link]>
<[Link]>UTF-8</[Link]
rceEncoding>
<failOnMissingWebXml>false</failOnMissingWebXml>
<jakartaee>8.0</jakartaee>
</properties>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${jakartaee}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.22</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArguments>
<endorseddirs>${[Link]}</endorseddirs>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>[Link]</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>[Link]</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${[Link]}</outputDirectory>
<silent>true</silent>
<artifactItems>
<artifactItem>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${jakartaee}</version>
<type>jar</type>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
ACCIONES EN STRUTS 2
COMO TRABAJAR CON
CONVENCIONES y
ACCIONES EN STRUTS
El uso de convenciones nos permite utilizar
configuraciones por defaults en struts 2, algunas de las
convenciones que podemos utilizar son;
1. MAPEO DE VISTAS(RESULTADO O JSP A UTILIZAR)
2. MAPEO DE ACCIONES
PODEMOS MAPEAR LAS VISTAS SI DEPOSITAMOS LOS
JSP EN LA CARPETA WEB-INF/content
ejemplo:
Si tenemos el path llamado saludar en el archivo
[Link], una vez que de mos click sobre el link, se va
a ejecutar el archivo [Link] automaticamente
MAPEO DE ACCIONES
PODEMOS MAPEAR LA ACCIONES DE LA SIGUIENTE:
MANERA
1. EL PAQUETREB JAVA DEBE DE CONTENER ALGUNAS
DE LAS SIGUIENTES PALABRAS:
struts
struts2
action
actions
EJEMPLO
SI LA URL ES [Link] el
nombre del paquete y de la clase action que
corresponderia con esta url deberia ser:
1. EL NOMBRE DEL PAQUETE DEBERIA ACABAR CON
LA PALABRA action Y EL NOMBRE DE LA CLASE
DEBERIA SER EL MISMO QUE EL HREF QUE TENEMOS
EN EL ARCHIVO [Link] ACABADO DE LA
PALABRA action por ejemplo
[Link]
DONDE;
[Link]-actions ES EL NOMBRE DEL PAQUETE
Y
SaluldarAction: es el nombre de la clase
OSEA QUE AL EJECUTAR ESTE PATH
[Link] DESDE EL
[Link], STRUTS VA A BUSCAR UNA ACCION CON EL
MISMO NOMBRE PARA EJECUTARLA, OSEA STRUTS
MAMNADFA ALLMAR DE MANERA AUTOMATICA A LA
CLASE QUE SE LLAME GUAL AL PATH QUE TENEMOS
EN EL [Link]
PASOS PARA TRABAJAR
CON CONVENCIONES y
ACCIONES EN STRUTS
EN STRUTS 2 UNA ACCION REPRESENTA EL
CONTRALADOR EN EL PATRON DE DISEÑO MVC1.
[Link] AL ARCHIVO [Link] y agregamos las
siguientes dependecias
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.20</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.22</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>asm</artifactId>
<version>7.2</version>
</dependency>
3. BORRAMOS EL ARCHIVO [Link] SI NO
VAMOS A TRABAJAR CON HIBERNATE
4. CREAMOS LE ARCHIVO log4j EN LA RUTA
src\main\resouces
4.1 BORRAN OS TODAS LAS LINEAS MENOS LA
PRIMERA
4.2 COPIAMOS LOS SIGUIENTES TAGS
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="{%F:%L} - %m%n" />
</Console>
<Loggers>
<Logger name="[Link].xwork2"
level="info"/>
<Logger name="[Link].struts2" level="info"/>
<Root level="info">
<AppederRef ref="STDOUT"/>
</Root>
</Loggers>
</Appenders>
</Configuration>
5, VAMOS AL ARCHIVO [Link] Y BORRAMOS TODAS
LAS LINEAS EXCEPTO LA PRIMERA
5.1 COPIAMOS LOS SIGUIENTES TAGS
A Pablo Vodafone:
6. BORRAMOS EL ARCHIVO [Link]
7. VAMOS AL ARCHIVO [Link] y creamos el path
<a href="mostrar-persona">Ir a mostrar Persona<
RECORDEMOS QUE PARA QUE ESTRUTS LLAME DE
MANERA AUTOMATICA A LOS ARCHIVOS .JAVA Y .JSP,
DEBEN LLAMARSE TAMBIEN COMO EL PARTH, EN
ESTE CASO ES mostrar-persona
EN EL HREF SI LLEVA MAS DE UNA PALABRA ESTAS SE
VAN A SEPARAR POR UN GUION POR EJEMPLO
mostrar-peesona, PERO LA CLASE SE DEBEA LLAMAR
MostrarPersonaAction, RESPETANDO CAMEL CASE
8 . CREAMOS UN PAQUETE, CUYO NOMBRE ACABE
POR Action, por ejemplo [Link], TAMBIEM
PODRIA ACABAR CON LAS PALABRAS struts, struts2 ,
actions
[Link] CLASE SE TIENE QUE LLAMAR
MostrarPersonaAction, OSEA EL MISMO NOMBRE DEL
PATH QUE SE ENCUENTRA EN [Link], ESTO ES ASI
PARA QUE PUEDA SER LLAMADO POR STRUTS DE
MANERA AUTOMATICA
9.1 CREAMOS LA VARIABLE QUE VAMOS A
RECUPERAR DESDE EL ARCHIVO JSP
private String nombre;
9.2 CREAMOS LOS METODOS SETTER A GETTER
9.3 HACEMOS extends ActionSupport
9.4 IMPORTAMOS import
[Link];
import [Link].log4j.*;
9.5 ESCRIBIOS EL SIGUIENTE CODIGO PARA QUE LA
INFORMACION SE MESTRE POR PANTALLA
Logger log =
[Link]([Link]);
9.5 CREAMOS UN METODO QUE SE VA A LLMAR
execute
public String execute(){
}
A Pablo Vodafone:
9.6 MANDAMOS ESTE MENSAJE A LA SALIDA JUNTO
CON EL VALOR DE LA VARIABLE NOMBRE
[Link]("El nombre es:" + [Link]);
9.7 RETORNAMOS LA CONSTANTE SUCCES
return SUCCESS;
EJEMPLO COMPLETO
package [Link];
import [Link];
import [Link].log4j.*;
public class MostrarPersonaAction extends
ActionSupport {
Logger log =
[Link]([Link]);
private String nombre;
public String execute(){
[Link]("El nombre es:" + [Link]);
return SUCCESS;
public String getNombre() {
return nombre;
public void setNombre(String nombre) {
[Link] = nombre;
10. CREAMOS UNA CARPETA LLAMADA content
DENTRO D ELA CARPETA WEB-INF
11. DENTRO DE LA CARPETA content CREAMOS EL JSP
CORRESPONDIENTE, TIENE QUE LLAMARSE IGUAL QUE
EL PATH DE [Link] Y TAMBIEN TIENE QUE
LLAMARSE IGUAL QUE LA CLASE ACTION, EN ESTE
CASO SERIA [Link]
A Pablo Vodafone:
11.1 IMPORTAMOS <%@taglib prefix="s"
uri="/struts-tags" %>
11.2 CREAMOS UN FORMULARIO PARA QUE EL
USUARIO INTRODUZCA SU NOMBRE
<s:form>
<s:textfield name="nombre" />
<s:submit value="Enviar" />
</s:form>
<div>
11.3 IMPRIMIMO EL VALOR DE NOMBRE
Nombre proporcionado: <s:property value="nombre" />
A Pablo Vodafone:
<%@page contentType="text/html"
pageEncoding="UTF-8" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<title>Mostrar Persona con Struts 2</title>
</head>
<body>
<h1>Personas con Struts 2</h1>
<s:form>
<s:textfield name="nombre" />
<s:submit value="Enviar" />
</s:form>
<div>
Nombre proporcionado: <s:property
value="nombre" />
</div>
</body>
</html>
RUN
A Pablo Vodafone:
CODIGO COMPLETO
ARCHIVO mostrar_persona.jsp
<%@page contentType="text/html"
pageEncoding="UTF-8" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<title>Mostrar Persona con Struts 2</title>
</head>
<body>
<h1>Personas con Struts 2</h1>
<s:form>
<s:textfield name="nombre" />
<s:submit value="Enviar" />
</s:form>
<div>
Nombre proporcionado: <s:property
value="nombre" />
</div>
</body>
</html>
ARCHIVO [Link]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
e [Link]
version="4.0">
<filter>
<filter-name>struts2</filter-name>
<filter-class>[Link]
repareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
ARCHIVO [Link]
<!DOCTYPE html>
<html>
<head>
<title>INICIO</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<a href="mostrar-persona">Ir a mostrar Persona<
</body>
</html>
ARCHIVO MostrarPersonaAction DENTRO D EPAQUETE
[Link]
package [Link];
import [Link];
import [Link].log4j.*;
public class MostrarPersonaAction extends
ActionSupport {
Logger log =
[Link]([Link]);
private String nombre;
public String execute(){
[Link]("El nombre es:" + [Link]);
return SUCCESS;
public String getNombre() {
return nombre;
public void setNombre(String nombre) {
[Link] = nombre;
}
ARCHIVO log4j
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="{%F:%L} - %m%n" />
</Console>
<Loggers>
<Logger name="[Link].xwork2"
level="info"/>
<Logger name="[Link].struts2" level="info"/>
<Root level="info">
<AppederRef ref="STDOUT"/>
</Root>
</Loggers>
</Appenders>
</Configuration>
ARCHIVO [Link]
<project xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
0.0 [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>PersonasStruts3</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<name>PersonasStruts3</name>
<properties>
<[Link]>1.8</[Link]>
<[Link]>1.8</[Link]>
<[Link]>${[Link]}/endorsed</end
[Link]>
<[Link]>UTF-8</[Link]
rceEncoding>
<failOnMissingWebXml>false</failOnMissingWebXml>
<jakartaee>8.0</jakartaee>
</properties>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${jakartaee}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.20</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.22</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>asm</artifactId>
<version>7.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArguments>
<endorseddirs>${[Link]}</endorseddirs>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>[Link]</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>[Link]</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${[Link]}</outputDirectory>
<silent>true</silent>
<artifactItems>
<artifactItem>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${jakartaee}</version>
<type>jar</type>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
PASOS PARA TRABAJAR
CON MENSAJES EN STRUTS
2
1. CREAMOS EL PROYECTO WEB TIPO MAVEN
2. SEGUIMOS LOS PASOS DESCRITOS EN LA SECCION
DE COMO TRABAJAR CON STRUTS CONVECOINES Y
ACCIONES PARA MODOFICAR LOS ARCHIVOS [Link]
[Link] log4j etc
3. SOBRE EL PAQUETE src\main\resources CREAMOS
UN FOLDER Y LO VAMOS A LLAMAR IGUAL QUE EL
PAQUETE DONDE SE ENCUENTRA NIESTRA CLASE
ACTION, EN ESTE CAOS LO LLAMAREMOS
[Link]
4. CLICK DERECHO SOBRE LA CARPERA [Link]
QUE ACABAMOS DE CREAR Y CREAMOS UN ARCHIVO
TIPO property files
5. a este archivo lo vamos a llamar
MostrarPersonaAction
EL CUAL ES EL MIMO NOMBRE DE UIESTRA CLASE
JAVA
6, VAMOS AL [Link] QUE ACABAMOS DE
CREAR Y DEFINIMOS LAS SIGUIENTES PROPIEDADES
[Link]:Personas con Struts
[Link]:Nombre proporcionado
[Link]:Enviar Formulario
DONDE [Link] ES LA LLAVE Y Personas con
Struts ES EL VALOR ASOCIADO A ESTA LLAVE
BASICAMENTE LO QUE VAMOS A HACER ES UTILIZAR
ESTAS LLAVES EN EL FORMULARIO PERO LO QUE SE
VA A MOSTRAR ES EL VALOR ASOCIADO A LA LLAVE
DE MANERA QUE TODOS LOS MENSAJES QUE VAMOS
A MOSTRAR EN NUESTRA APLICACION LOS ESTAMOS
DEPOSITANDO EN UN ARCHIVO DE MANERA
INDEPENDIENTE
AHORA TENEMOS QUE DEFINIR ESTAS PROPIEDADES
EN LA CLASE ACTION,MostrarPersonaAction ,
DEBEMOS DE DEFINIR LOS METODOS GET YSET PARA
ESTAS PROPIEDADES
7. VAMOS A LA CLASE ACTION Y DEFINIMOS LOS
METODOS GET Y SET
7.1 IMPORTAMOS LOS PAQUETES
import [Link];
import [Link].log4j.*;
7,2 HACEMOS EXTENDS
extends ActionSupport
7.3 CREAMOS LA VARIABLE CON LA QUE VAMOS A
TRABAJAR
private String nombre;
7.4 ESCRIBIMOS LA LINEA
Logger log =
[Link]([Link]);
7.4 CREAMOS EL METODO EXECUTE
public String execute(){
[Link]("El nombre es:" + [Link]);
return SUCCESS;
ESTE EL EL MENSAJE QUE SE VA A MOSTRAR
7,5 CREAMOS LOS METODOS GET Y SET DE NOMBRE Y
TAMBIEN EL METETODO GET Y SET DE LA
SPROPIEDADES DE NUESTRO ARCHIVO .properties
ejemplo completo d ela clase action
package [Link];
import [Link];
import [Link].log4j.*;
public class MostrarPersonaAction extends
ActionSupport {
Logger log =
[Link]([Link]);
private String nombre;
public String execute(){
[Link]("El nombre es:" + [Link]);
return SUCCESS;
public String getNombre() {
return nombre;
public void setNombre(String nombre) {
[Link] = nombre;
public String getTitulo(){
return getText("[Link]");
}
public String getValor(){
return getText("[Link]");
public String getBoton(){
return getText("[Link]");
8. VAMOS AL JSP PARA MANDAR A LLMAR LOS
METODOS GET Y SET DE LAS PROPIEDADES QUE
ACABAMOS DE CREAR
8.1 CREAMOS LA CARPERA content DENTRO D ELA
CARPETA WEB-INF
8.1 CREAMOS EL JSP DENTRO DE LA CARPERA content
8.2 IMPORTAMOS <%@taglib prefix="s"
uri="/struts-tags" %> PARA PODER USAR LOS TAGS DE
STRUTS
8.3 COPIAMOS EL SIGUIENTE BLOQUE EN EL ARCHIVO
JSP
<html>
<head>
<title><s:property value="titulo" /></title>
</head>
<body>
<h1><s:property value="titulo"/></h1>
<s:form>
<s:textfield name="nombre" />
<s:submit key="[Link]" name="submit" />
</s:form>
<div>
<s:property value="valor"/> :
<s:property value="nombre" />
</div>
</body>
</html>
<html>
<head>
<title><s:property value="titulo" /></title>
</head>
<body>
<h1><s:property value="titulo"/></h1>
<s:form>
<s:textfield name="nombre" />
<s:submit key="[Link]" name="submit" />
</s:form>
<div>
<s:property value="valor"/> :
<s:property value="nombre" />
</div>
</body>
</html>
AQUIE ESTAMOS LLAMANDOLOS NOMBRE DE LOS
METODOS QUE ESTAN EN LA C LASE DE ACTION
OSEA h1><s:property value="titulo"/></h1>, ESTA
MANDANDO A LLMAR EL METODO getTitulo, del
archivo [Link]
ARCHIVOS COMPLETOS
[Link]
<%@page contentType="text/html"
pageEncoding="UTF-8" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<title><s:property value="titulo" /></title>
</head>
<body>
<h1><s:property value="titulo"/></h1>
<s:form>
<s:textfield name="nombre" />
<s:submit key="[Link]" name="submit" />
</s:form>
<div>
<s:property value="valor"/> :
<s:property value="nombre" />
</div>
</body>
</html>
ARCHIVO [Link]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
e [Link]
version="4.0">
<filter>
<filter-name>struts2</filter-name>
<filter-class>[Link]
repareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
ARCHIVO [Link]
<!DOCTYPE html>
<html>
<head>
<title>Start Page</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<a href="mostrar-persona">Ir a mostrar
Persona</a>
</body>
</html>
ARCHIVO MostrarPersonaAction .java DENTRO DEL
PAQUETE [Link]
package [Link];
import [Link];
import [Link].log4j.*;
public class MostrarPersonaAction extends
ActionSupport {
Logger log =
[Link]([Link]);
private String nombre;
@Override
public String execute(){
[Link]("El nombre es:" + [Link]);
return SUCCESS;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
[Link] = nombre;
public String getTitulo(){
return getText("[Link]");
public String getValor(){
return getText("[Link]");
public String getBoton(){
return getText("[Link]");
}
}
ARCHIVO log4j
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="{%F:%L} - %m%n" />
</Console>
<Loggers>
<Logger name="[Link].xwork2"
level="info"/>
<Logger name="[Link].struts2" level="info"/>
<Root level="info">
<AppederRef ref="STDOUT"/>
</Root>
</Loggers>
</Appenders>
</Configuration>
ARCHIVO [Link] DENTRO
DEL PAQUETE A [Link]
[Link]:Personas con Struts
[Link]:Nombre proporcionado
[Link]:Enviar Formulario
DEPENDENCIAS PARA AGREGAR AL ARCHIVO [Link]
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.22</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.22</version>
</dependency>
TAGS DE STRUTS
PARAB PODER USAR LOS TAGS DE STRUTS EN LOS
ARCHIVOS .JSP PRIMERO TENEMOS QUE IMPORTAR
EL PAQUETE
<%@taglib prefix="s" uri="/struts-tags" %>
DESDE LOS JSPO PODEMOS ACCEXDER A LAS
PROPIUEDAS DEFINIDAS EN LOS ARCHIVOS .properties
DIRECTAMENTE O A TRAVES DE LOS METODOS
DECLARADOS EN LOS [Link]
1. TAG PROPERTY: TRAVES DE ESTE TAGS PODEMOS
ACCEDER ALAS `RPÌEDADES DE L ARCHIVO .properties
A TRAVES DE LOS METODOS DEFINIDOS EN EL .JAVA
ACTION LA SINTAXIS ES
<title><s:property value="NOMBRE DEL METODO"
/></title>
EJEMPLO
<title><s:property value="formTitulo" /></title>
2. TAG textfield: A TRAVES DE ESTA ETIQUETA
PODEMOS ACCEDER DIRECTAMENTE AL VALOR DE
UNA PROPIEDAD DECLARADA EN EL ARCHIVO
.properties. LA SINTAXIS ES
<s:textfield key="NOMBRE DE LA LLAVE DECLARADA
EN EL ARCHIVO .properties" name="usuario" />
ejemplo
<s:textfield key="[Link]" name="usuario" />
RAMBIEN, CON ESTE MISMO FIN PODEMOS USAR EL
TAG name ejemplo
<s:text name="[Link]"/>:
3- CON EL TAG property, TAMBIEN OPDEMOS ACCEDER
A LAS VARIABLES DEFINIDAS EN EL METODO
[Link]
ejemplo
<s:property value="usuario"/>
CON ESA LINEA DE CODIGO PODEMOS ACCEDER A LA
VARIABLE USUARIO
4, PODEMOS USAR DOS PUENTOS PARA PONER UNA
TAG AL LADO D EOTRO
EJEMPOLI
<s:property value="formUsuario"/> : <s:property
value="usuario"/>
COMO RE DIRECCIONAR CON
ANOTACIONES EN STRUTS2
1. TENEMOS EL [Link] con este path:
<a href="login">Entrar al Sistema</a>
2. COMO ESTAMOS TRABAJANDO CON STRUTS 2,
CUANDO LE DEMOS AL PATH DE login, EL SERVIDOR
NOS VA A RE DIRECCIONAR AUTOMATICAMENTE A
UNA CLASE QUE SE LLAME [Link], LO QUE
REALMENTE DETERMINA QUE NOS RE DIRIJA A ESTE
ARCHIVO NO ES EL HECHO QUE SE LLAME IGAUL ,
SINO QUE TENGA LA ANOTACION @Action("login")
3. ESTA CLASE DEBE TENER LA ANOTACION
@Action("login"). LO QUE SINGIFICA ES QUE CUANDO
LE DEMOS AL PATH DE login EN [Link], SE VA A
EJECUTAR ESTA ACCION Y EL RESULTADO, OSEA EL
return SUCCESS;
LO VA A RE TOMAR LA ANOTACION DE @Result
Y COMO EL RESULTADO DEL RETURN ES SUCCESS,
NOS VA A RE DIRIGIR AL JSP CON ESTA RUTA
"/WEB-INF/content/[Link]"
4. UNA VEZ QUE ESTAMOS EL EL JSP [Link], VAMOA
TENER UN FORMULARIO, CUYA ACCION ES RE
DIRECCIONAR AL ARCHIVO .JAVA validarUsuarioAction
<s:form action="validarUsuario">
5, DESPUES QUE HALLAMOS INTRODUCIDO USUARIO Y
PASSWORD NOS VA A REDIRECICONAR AL ARCHIVO
[Link]
LO QUE HACE QUE NOS RE DIRIJA AL
ValidarUsuarioAction ES EL HECHJO QUE TENGA LA
ANOTACION @Action("validarUsuario"), DE HECHO EL
ARCHI ValidarUsuarioAction PODRIA TENER OTRO
NOMBRE, PERO SI TIENE LA ANOTACION
@Action("validarUsuario") NOS VA A RE DIRIGIR A
[Link] QUE TENGA LA ANOTACION
@Action("validarUsuario")
6. ESTANDO EN EL ARCHO ValidarUsuarioSAction, SE
EJECUTA EL METODO execute, Y EN EL CONDICIONAL
VA A APREGUNTAR SI LA VARIABLE usuario, ES IGUAL
A ADMIN, DE SER ASI RETORNA SUCCESS; Y DE NOI
SER ASI RETORNA INPUT;
7. ESTE RETURN LO TOMA LA ANOTACION @Result
SI EL EL RETURN ES SUCCESS , RE DIRECCIONA A
[Link]"
SI EL RETURN ES INPUT RE DIRECCION DE NUEVO AL
LOGIN
@Result(name="input", location="login",
type="redirectAction")
8. SI NO RE DIRECCIONA AL [Link]
CODIGO COMPLETO
ARCHIVO [Link] DENTRO DE LA CARPETA
content, QUE A SU VEZ ESTA DENTRO D ELA CARPETA
WEB-INF
<html>
<head>
<title><s:text name="[Link]"/></title>
</head>
<body>
<h1><s:text name="[Link]"/></h1>
<h2>
<s:text name="[Link]"/>:
</h2>
<br/>
<s:text name="[Link]"/>: <s:property
value="usuario"/>
<br/>
<s:text name="[Link]"/>: <s:property
value="password"/>
<br/>
<a href="<s:url action="login" />"><s:text
name="[Link]"/></a>
</body>
</html>
ARCHIVO [Link] DENTRO DE LA CARPETA content,
QUE A SU VEZ ESTA DENTRO D ELA CARPETA WEB-INF
<%@page contentType="text/html"
pageEncoding="UTF-8" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<title><s:text name="[Link]"/></title>
</head>
<body>
<h1><s:text name="[Link]"/></h1>
<s:form action="validarUsuario">
<s:textfield key="[Link]" name="usuario" />
<s:password key="[Link]"
name="password"/>
<s:submit key="[Link]" name="submit" />
</s:form>
</body>
</html>
ARCHIVO [Link]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
e [Link]
version="4.0">
<filter>
<filter-name>struts2</filter-name>
<filter-class>[Link]
repareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
ARCHIVO [Link]
<!DOCTYPE html>
<html>
<head>
<title>Inicio</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<a href="login">Entrar al Sistema</a>
</body>
</html>
ARCHIVO LoginAction DENTRO DEL PAQUETE
[Link]
package [Link];
import [Link];
import [Link].log4j.*;
import
[Link];
import [Link];
@Result(name="success",
location="/WEB-INF/content/[Link]")
public class LoginAction extends ActionSupport {
@Action("login")
@Override
public String execute(){
return SUCCESS;
ARCHIVO ValidarUsuarioAction DENTRO DEL PAQUETE
[Link]
package [Link];
import static [Link].*;
import [Link];
import [Link].log4j.*;
import [Link].*;
@Results({
@Result(name="success",
location="/WEB-INF/content/[Link]"),
@Result(name="input", location="login",
type="redirectAction")
})
public class ValidarUsuarioAction extends
ActionSupport {
Logger log =
[Link]([Link]);
private String usuario;
private String password;
@Action("validarUsuario")
public String execute() {
if ("admin".equals([Link])) {
return SUCCESS;
} else {
return INPUT;
}
public String getUsuario() {
return usuario;
public void setUsuario(String usuario) {
[Link] = usuario;
public String getPassword() {
return password;
public void setPassword(String password) {
[Link] = password;
}
ARCHIVO [Link]
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="{%F:%L} - %m%n" />
</Console>
<Loggers>
<Logger name="[Link].xwork2"
level="info"/>
<Logger name="[Link].struts2" level="info"/>
<Root level="info">
<AppederRef ref="STDOUT"/>
</Root>
</Loggers>
</Appenders>
</Configuration>
ARCHIVO [Link] DENTRO DE LA
CARPETA [Link] QUE A SU VEZ SE
ENCEUNTRA DENTRO D ELA CARPETA
src\main\resources
[Link]=Usuario
[Link]=Password
[Link]=Enviar
[Link]=Login
ARCHIVO ValidarUsuarioAction DENTRO DE LA
CARPETA [Link] QUE A SU VEZ SE
ENCEUNTRA DENTRO D ELA CARPETA
src\main\resources
[Link]=Bienvenido
[Link]=Usuario correcto
[Link]=Regresar
[Link]=Usuario
[Link]=Password
DEPENDENCIAS PARA AGREGAR AL ACHIVO [Link]
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.22</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.22</version>
</dependency>
RUTAS
MANEJO DE ONGL EN
STRUTS 2
OGNL es el acrónimo de Object Graph Navigation
Language, un lenguaje de expresiones muy poderoso
que nos permite leer valores de objetos Java. Este
lenguaje nos permite leer valores y ejecutar métodos
(que regresen algún valor) para mostrar los valores o
resultados de los mismos en nuestras páginas JSP
creadas usando las etiquetas de Struts. Además
proporciona una conversión automática de tipos que
permite convertir datos desde texto HTTP a objetos
Java.
BASICAMENTE ONGL TRATA DE POSER ACCEDER A
LAS INSTANCIAS DE UN OBJETO DIRECTAMENTE
DESDE LOS JSP
PASOS PARA TRABAJAR CON
ONGL
[Link] LA APLICACION WEB TIPO MAVEN
2. VAMOS A PROPIEDADES Y LE CAMBIAMOS AL JDK
1.8 Y GLASSFISH 5.0
3. COPIAMOS LAS SIGUIENTES DEPENDECIAS AL
ARCHIVO [Link]
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.20</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.22</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>asm</artifactId>
<version>7.2</version>
</dependency>
4, CLEAN AND BUID
5. COPIAMOS EL SIGUIENTE BLOQUE EN EL ARCHIVO
[Link]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
e [Link]
version="4.0">
<filter>
<filter-name>struts2</filter-name>
<filter-class>[Link]
repareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
6. CREAMOS EL ARCHIVO log4j EN LA RUTA
src\main\resorces\META-INF Y COPIAMOS EL
SIGUIENTE BLOQUE
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="{%F:%L} - %m%n" />
</Console>
<Loggers>
<Logger name="[Link].xwork2"
level="info"/>
<Logger name="[Link].struts2" level="info"/>
<Root level="info">
<AppederRef ref="STDOUT"/>
</Root>
</Loggers>
</Appenders>
</Configuration>
7. VAMOS AL ARCHIVO [Link] Y AGREGAMOS EL
LINK EL CUAL VA A SER REFERENCIA AL PATH DE
PERSONAS
<a href="mostrar-persona">Ir a mostrar Persona<
8 CREAMOS LA CLASE Domicilio, QUE VA A SER UN
ATRIBUTO A SU VEZ DE LA CLASE Persona Y LO
DEPOSITAMOS EN EL PAQUETE LLAMADO modelo
8.1 CREA,MOS LAS VARIABLES CON LAS QUE VAMOS A
TRABAJAR
private String calle;
private int numeroCalle;
private String pais;
8.2 CREAMOS LOS METODOS GETTER Y SETTER Y
TPSTRING
package modelo;
public class Domicilio {
private String calle;
private int numeroCalle;
private String pais;
public String getCalle() {
return calle;
public void setCalle(String calle) {
[Link] = calle;
public int getNumeroCalle() {
return numeroCalle;
public void setNumeroCalle(int numeroCalle) {
[Link] = numeroCalle;
public String getPais() {
return pais;
public void setPais(String pais) {
[Link] = pais;
}
@Override
public String toString() {
return "Domicilio{" + "calle=" + calle + ",
numeroCalle=" + numeroCalle + ", pais=" + pais + '}';
8.3 CREAMOS LA CLASE Persona DENTRO DEL
PAQUETE modelo
private String nombre;
Domicilio domicilio;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
[Link] = nombre;
public Domicilio getDomicilio() {
return domicilio;
public void setDomicilio(Domicilio domicilio) {
[Link] = domicilio;
@Override
public String toString() {
return "Persona{" + "nombre=" + nombre + ",
domicilio=" + domicilio + '}';
9. CREAMOS NUESTRA CLASE DE ACTION QUE SE VA A
LLMAR Personas Y LO DEPOSITAMOS EN EL PAQUETE
[Link]
RECORDEMOS QUE EL NOMBRE DEL PAQUETE DEBE
ACABAR EN LA PALABRA ACTIONS Y QUE LA CLASE
ACTIOm tambien debe ACABR EN ACTION
9.1 HACEMOS EXTENDS DE ACTION SUPPORT
extends ActionSupport
9.2 IMPORTAMOS LE PAQUETE
import [Link];
9.2 DEFINIMOS UN ELEMNTO DE TIPO LOGGER PARA
QUE NOS MJUESTRE LA INFORMACION POR
PANTALLA
Logger log =
[Link]([Link]); DONDE
[Link] es el nombre de esta clase)
9.3 IMPORTAMOS import [Link].log4j.*;
9.4 DEFINIMOS UNA VARIABLE DE TIPO PERSONA,
RECORDEMOS QUE ESTA VARIABLE DE TIPO
PEERSONA RIEN INTERNAMENTE UNA VARIABLE DE
TIPO DOMICILIO
private Persona persona;
9.5 IMPORTAMOS EL PAQUETE [Link]
9.6 SOBRE ESCRIBIMOS EL METODO execute,
RECORDEMOS QUE CUANDO TRABAJAMOS CON
STRUTS ESTE METODO ES OBLIGATORIO, EN ESTE
METODO VAMOS A VWRIFICAR SI EL VALOR DE
PERSONA ES NULO Y REGERSAMOS EL VALO DE LA
CONSTANTE SUCCESS
@Override
public String execute() {
if([Link] != null){
[Link]("\n");
[Link]("persona:" + persona);
else{
[Link]("Persona con valor nulo");
return SUCCESS;
}
9.7 AGREGAMOS LOS METODOS GET Y SET Y TO
STRING PARA LA VARIABLE Persona
10. AGREGAMOS LA CARPETA DE content EN LA RUTA
WEB-PAGE\[Link]
11. EN LA CARPETA content CREAMOS UN JSP
LLAMADO Personas
11.1 IMPORTAMOS EL PAQUETE DE TAGS DE STRUTS
PARA PODE TRABAJAR CON ELLOS
<%@taglib prefix="s" uri="/struts-tags" %>
11.2 BORRAMOS ESTA LINEA
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
11.3 CAMBIAMOS EL TITULO
11. 4 VAMOS A CREAR UN FROMULARIO QUE SE VA A
ENCARGAR DE MOSTTRAR LOS VALORES DE CLASE DE
PERSONA PERO TAMBIEN LOS VALORES INTERNOS DE
LA CLASE DOMICILIO
11.5 PARA AGREGAR LSO ESTILOS DE STRUTS
AGREGAMOS LA ETIQUETA <s:head/>
11.5ABRIMOS Y CERRAMOS LAS ETIQUETAS <s:form>
</s:form> PARA AGREGAR UN FORMULARIO
11.6 USAMOS EL TAG <s:textfield PARA MANDAR A
LLAMAR LOS METODOS SET DE LAS VARIABLES QUE
SE ENCEUNTRAN DEFINIDAS EN NUESTRO PAQUETE
DE [Link]
<s:textfield label="Nombre" name="[Link]" />
<s:textfield label="Calle"
name="[Link]" />
<s:textfield label="No. Calle"
name="[Link]" />
<s:textfield label="Pais"
name="[Link]"/>
AQUI USAMOS "[Link]" /> PORQUE EN
LA CLASE PERSONA HEMOS DEFINIDO UNA VARIABLE
QUE SE LLAMA domicilo DEL TIPO Domicilio
11.7 PARA QUE SE ENVIEN ESTOS VALORES Y SE
RECIBAN EN EL SERVIDOR AGREGAMOS EL BOTON SE
SUMMIT
<s:submit value="Enviar"/>
11.8 USAMOS EL TAG <s:property PARA MANDAR A
LLAMAR LOS METODOS GET DE LA CLASE
PersonasAction
11.8 USAMOS EL TAG <s:property PARA MANDAR A
LLAMAR LOS METODOS GET DE LA CLASE
PersonasAction
CODIGO COMPLETO
ARCHIVO [Link]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
e [Link]
version="4.0">
<filter>
<filter-name>struts2</filter-name>
<filter-class>[Link]
repareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
ARCHIVO [Link]
<!DOCTYPE html>
<html>
<head>
<title>Inicio</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<a href="personas">Entrar al Sistema</a>
</body>
</html>
ARCHIVO PersonasAction DENTRO DEL PAQUETE
[Link]
package [Link];
import [Link];
import [Link];
import [Link].log4j.*;
public class PersonasAction extends ActionSupport {
Logger log =
[Link]([Link]);
private Persona persona;
@Override
public String execute() {
if([Link] != null){
[Link]("\n");
[Link]("persona:" + persona);
else{
[Link]("Persona con valor nulo");
return SUCCESS;
public Persona getPersona() {
return persona;
public void setPersona(Persona persona) {
[Link] = persona;
}
}
ARCHIVO Domicilio DENTRO DEL PAQUERE modelo
package modelo;
public class Domicilio {
private String calle;
private int numeroCalle;
private String pais;
public String getCalle() {
return calle;
public void setCalle(String calle) {
[Link] = calle;
}
public int getNumeroCalle() {
return numeroCalle;
public void setNumeroCalle(int numeroCalle) {
[Link] = numeroCalle;
public String getPais() {
return pais;
public void setPais(String pais) {
[Link] = pais;
}
@Override
public String toString() {
return "Domicilio{" + "calle=" + calle + ",
numeroCalle=" + numeroCalle + ", pais=" + pais + '}';
ARCHIVO Persona DENTRO DEL PAQUETE modelo
package modelo;
public class Persona {
private String nombre;
Domicilio domicilio;
public String getNombre() {
return nombre;
public void setNombre(String nombre) {
[Link] = nombre;
public Domicilio getDomicilio() {
return domicilio;
public void setDomicilio(Domicilio domicilio) {
[Link] = domicilio;
@Override
public String toString() {
return "Persona{" + "nombre=" + nombre + ",
domicilio=" + domicilio + '}';
ARCHIVO [Link] DENTRO DELA CARPETA
WEB-INF
<%@page contentType="text/html"
pageEncoding="UTF-8" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<title>Formulario Personas</title>
<s:head/>
</head>
<body>
<h1>Formulario de Personas (OGNL)</h1>
<s:form>
<s:textfield label="Nombre"
name="[Link]" />
<s:textfield label="Calle"
name="[Link]" />
<s:textfield label="No. Calle"
name="[Link]" />
<s:textfield label="Pais"
name="[Link]"/>
<s:submit value="Enviar"/>
</s:form>
<h2>Valores proporcionados:</h2>
Nombre: <s:property value="[Link]" />
<br/>
Calle: <s:property value="[Link]" />
<br/>
No. Calle: <s:property
value="[Link]"/> <br/>
Pais: <s:property value="[Link]"/>
</body>
</html>
ARCHIVO log4j2 DENTRO DE LA RUTA
src\main\resources
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="(%F:%L) - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="[Link].xwork2"
level="info"/>
<Logger name="[Link].struts2" level="info"/>
<Root level="info">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
ARCHIVO DE DEPENDENCIAS EN [Link]
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${jakartaee}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.22</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>[Link].log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.22</version>
</dependency>
</dependencies>
PASO PARA RE
DIRECCIONAR CON STRUTS
USANDO ARCHIVO XML
1- CREAMOS EL PROYECTO APLICACION WEB TIPO
MAVEN, LO LLAMAREMOS StrutsXml
2. VAMOS A PROPIEDADES Y CONFIGURAMOS SERVER
GLASSFISH 5.0 Y JAVA 1.8
3. VAMOS AL ARCJHIVO [Link] Y BORRAOS TODAS
LAS LINEAS MENOS LA PRIMERA Y LUEGO COPIAMOS
EL SIGUIENTE BLOQUE DE CODIGO
<web-app xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
e
[Link]
version="3.1">
<filter>
<filter-name>struts2</filter-name>
<filter-class>
[Link]
ecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
4. VAS AL ARCHIVO [Link], BORRAMOS DESDE
PROPERTIES Y CPOIAMOS EL SIGIUENTE BLOQUE
<properties>
<[Link]>6.1.1</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-core</artifactId>
<version>${[Link]}</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-config-browser-plugin</artifactId>
<version>${[Link]}</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-junit-plugin</artifactId>
<version>${[Link]}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>[Link]-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.46.v20220331</version>
<configuration>
<stopKey>CTRL+C</stopKey>
<stopPort>8999</stopPort>
<scanIntervalSeconds>10</scanIntervalSeconds>
<webAppSourceDirectory>${basedir}/src/main/webapp/
</webAppSourceDirectory>
<webAppConfig>
<contextPath>/blank</contextPath>
<descriptor>${basedir}/src/main/webapp/WEB-INF/web
.xml</descriptor>
</webAppConfig>
</configuration>
</plugin>
</plugins>
</build>
</project>
5- CREAMOS EL ARCHIVO [Link], EN LA RUTA
src\main\resources
6. CREAMOS EL ARCHIVO [Link] , EL CUAL VA A SER
NUESTRO ARCHIVO DE INICIO
6.1 COPIAMOS EL SIGUIENTE CODIGO
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form action="guardar" method="GET">
Nombre:<input type="text" name="nombre"/>
Apllidos:<input type="text" name="apellidos"/>
<input type="submit" value="Enviar"/>
</form>
</body>
</html>
DONDE :
<form action="guardar" method="GET"> CUANDO
INGRESEMOS LOS DATOS NOS VA A RE DIRIGIR AL
ARCHIVO JAVA LLAMADO "GuardarAction" EL CUAL SE
ENCUENTRA EN EL PAQUETE action
7. EL ARCHIVO GuardarAction VA A RECIBIR LOS
PARAMETROS NOMBRE Y APELLIDO Y MEDIANTE UN
IF VA A COMPROBAR , MEDIANTO UN CICLO IF , SI EL
CONTENIDO DE LA VARIABLE NOMBRE COINCIDE CON
LA CADENA "PEPE",
public String execute(){
[Link]("Nombre: " +nombre);
[Link]("Apellidos: "+apellidos);
if([Link]("PEPE"))
return "exito";
else return "error";
public String getNombre() {
return nombre;
}
7. 2 SI LA VARIABLE NOMBRE COINCIDE CON LA
CADENA "PEPE". NOS VA A RE DIRIGIR HACIA AL JSP
LLAMADO EXITO, DE LO CONTRARIO NOS VA A RE
DIRIGIR AL JSP ERROR
7.3 LA CLASE GuardarAction debe contener tambien los
metodos get y set
package action;
import [Link];
public class GuardarAction extends ActionSupport{
private String nombre;
private String apellidos;
public String execute(){
[Link]("Nombre: " +nombre);
[Link]("Apellidos: "+apellidos);
if([Link]("PEPE"))
return "exito";
else return "error";
public String getNombre() {
return nombre;
public void setNombre(String nombre) {
[Link] = nombre;
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
[Link] = apellidos;
8, COPIAMOS EL SIGIUENTE CODIGO EN EL ARCHVO
[Link]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts
Configuration 2.5//EN"
"[Link]
<struts>
<package name="blank" extends="struts-default">
<action name="guardar"
class="[Link]" method="execute">
<result name="exito">/pages/[Link]</result>
<result name="error">/pages/[Link]</result>
</action>
</package>
</struts>
DONDE:
1.<action name="guardar" class="[Link]"
method="execute">: CUANDO ÑLE DEMOS ENVIAR AL
FORMULAERIO NOS VA A RE DIRIGIR A LA CLASE
GuardarAction
2.<result name="exito">/pages/[Link]</result>: SI EL
CONDICIONAL DE LA CLASE GuardarAction DEVUELVE
"exito", SE VA A EJECUTAR EL ARCJHIVO [Link]
3.<result name="error">/pages/[Link]</result>: SI EL
CONDICIONAL DE LA CLASE GuardarAction DEVUELVE
"error", SE VA A EJECUTAR EL ARCJHIVO [Link]
ES EN EL ARCHIVO [Link] DONDE DEFINIMOS A
DONDE VAMOS A RE DIRECCIONAR
ARCHIVOS COMPLETOS
ARCHIVO [Link]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="[Link]
xmlns:xsi="[Link]
nce"
xsi:schemaLocation="[Link]
e
[Link]
version="3.1">
<filter>
<filter-name>struts2</filter-name>
<filter-class>
[Link]
ecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
ARCHIVO [Link] DENTRO DE CARPETA
pages
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>ERROR</h1>
</body>
</html>
ARCHIVO JSP [Link]
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>EXITO!</h1>
</body>
</html>
ARCHIVO [Link]
<%@page contentType="text/html"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form action="guardar" method="GET">
Nombre:<input type="text" name="nombre"/>
Apllidos:<input type="text" name="apellidos"/>
<input type="submit" value="Enviar"/>
</form>
</body>
</html>
ARCHIVO [Link]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts
Configuration 2.5//EN"
"[Link]
<struts>
<package name="StrutsXml" extends="struts-default">
<action name="guardar"
class="[Link]" method="execute">
<result name="exito">/pages/[Link]</result>
<result name="error">/pages/[Link]</result>
</action>
</package>
</struts>
ARCHIVO [Link] DENTRO
DEL PAQUETE action
package action;
import [Link];
public class GuardarAction extends ActionSupport{
private String nombre;
private String apellidos;
public String execute(){
[Link]("Nombre: " +nombre);
[Link]("Apellidos: "+apellidos);
if([Link]("PEPE"))
return "exito";
else return "error";
public String getNombre() {
return nombre;
public void setNombre(String nombre) {
[Link] = nombre;
}
public String getApellidos() {
return apellidos;
public void setApellidos(String apellidos) {
[Link] = apellidos;
}
ARCHIVO [Link]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts
Configuration 2.5//EN"
"[Link]
<struts>
<package name="blank" extends="struts-default">
<action name="guardar"
class="[Link]" method="execute">
<result name="exito">/pages/[Link]</result>
<result name="error">/pages/[Link]</result>
</action>
</package>
</struts>
ARCHIVO [Link]
<properties>
<[Link]>6.1.1</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-core</artifactId>
<version>${[Link]}</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-config-browser-plugin</artifactId>
<version>${[Link]}</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>struts2-junit-plugin</artifactId>
<version>${[Link]}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>[Link]-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.46.v20220331</version>
<configuration>
<stopKey>CTRL+C</stopKey>
<stopPort>8999</stopPort>
<scanIntervalSeconds>10</scanIntervalSeconds>
<webAppSourceDirectory>${basedir}/src/main/webapp/
</webAppSourceDirectory>
<webAppConfig>
<contextPath>/blank</contextPath>
<descriptor>${basedir}/src/main/webapp/WEB-INF/web
.xml</descriptor>
</webAppConfig>
</configuration>
</plugin>
</plugins>
</build>
</project>
NOTA; EL ARCHIVO [Link] TENEMOS QUE
SUSTIRUIRLO COMPLETO DESDE PROPERTIES HASTA
ABAJO
EN LA SIGUIENTE FOTO PODEMOS VER LAS RUAS DE
LOSARCHIVOS
SPRINGBOOT
¿Qué es Java Spring Boot?
Java Spring Framework (Spring Framework) es un
popular marco de trabajo empresarial de código abierto
que sirve para crear aplicaciones autónomas de
producción que se ejecutan en una máquina virtual Java
(JVM).
Java Spring Boot (Spring Boot) es una herramienta que
acelera y simplifica el desarrollo de microservicios y
aplicaciones web con Spring Framework gracias a tres
funciones principales:
Configuración automática
Un enfoque de configuración obstinado
La capacidad de crear aplicaciones autónomas
Estas características, combinadas, conforman una
herramienta que le permite configurar una aplicación
basada en Spring con el mínimo de instalación y
configuración.
¿A qué se debe la gran popularidad de Spring
Framework?
Spring Framework ofrece una función de inyección de
dependencias que permite a los objetos definir
dependencias propias que luego les inyecta el
contenedor Spring. Esto permite a los desarrolladores
crear aplicaciones modulares que constan de
componentes sin conexión directa que son ideales para
microservicios y aplicaciones de red distribuida.
Spring Framework también ofrece soporte incorporado
para las tareas habituales que realiza una aplicación,
como enlace de datos, conversión de tipo, validación,
manejo de excepciones, gestión de recursos y sucesos
o internacionalización, entre otras. Se integra con varias
tecnologías Java EE, como por ejemplo RMI (invocación
a método remoto), AMQP (Advanced Message Queuing
Protocol) y Java Web Services. En suma, Spring
Framework proporciona a los desarrolladores todas las
herramientas y funciones que necesitan para crear
aplicaciones Java EE multiplataforma y sin conexión
directa que se ejecuten en cualquier entorno.
Qué aporta Spring Boot a Spring Framework
A pesar de lo completo que es Spring Framework y de
las capacidades que presenta, hacen falta un tiempo
considerable y conocimientos suficientes para
configurar, instalar y desplegar las aplicaciones Spring.
Spring Boot alivia este esfuerzo con tres importantes
prestaciones.
Configuración automática
La configuración automática significa que las
aplicaciones se inicializan con dependencias
predefinidas que no es necesario configurar
manualmente. Como Java Spring Boot lleva
prestaciones de configuración automática
incorporadas, configura automáticamente tanto los
paquetes de la base de Spring Framework como los
externos, según su configuración (y según las prácticas
recomendadas, que ayudan a evitar errores). Aunque
estos valores se pueden modificar temporalmente una
vez que se completa la inicialización, la función de
configuración automática de Java Spring Boot le
permite acelerar el inicio del desarrollo de sus
aplicaciones basadas en Spring y reduce la posibilidad
de que se produzcan errores humanos.
Enfoque obstinado
Spring Boot utiliza un enfoque obstinado para añadir y
configurar dependencias de iniciador, en función de las
necesidades del proyecto. Siguiendo su propio criterio,
Spring Boot elige qué paquetes instalar y qué valores
predeterminados utilizar, en lugar de que sea el usuario
quien deba tomar esas decisiones y configurarlo todo
manualmente.
Puede definir las necesidades de su proyecto durante el
proceso de inicialización; en él, se eligen varias
dependencias de iniciador —llamadas Spring Starters—
que corresponden a los casos de uso habituales. La
ejecución de Spring Boot Initializr se realiza mediante un
simple formulario web, sin programación.
Por ejemplo, la dependencia de iniciador "Spring web"
permite crear aplicaciones web basadas en Spring con
una configuración mínima añadiendo todas las
dependencias necesarias, como el servidor web Apache
Tomcat, al proyecto. "Spring Security" es otra popular
dependencia de iniciador que añade automáticamente
funciones de autenticación y control de acceso a la
aplicación.
Spring Boot incluye más de 50 Spring Starters, y hay
disponibles muchos más de terceras partes.
Aplicaciones autónomas
Spring Boot permite a los desarrolladores crear
aplicaciones que simplemente se ejecutan. En concreto,
permite crear aplicaciones autónomas que se ejecutan
por sí solas, sin depender de un servidor web externo,
integrando un servidor web como Tomcat o Netty en la
app durante el proceso de inicialización. En
consecuencia, puede iniciar su aplicación en cualquier
plataforma con el mandato Ejecutar (puede renunciar a
esta función para crear aplicaciones sin un servidor web
incorporado).
Spring Boot frente a Spring Framework
Como ya hemos mencionado, las mayores ventajas de
usar Spring Boot en lugar de solo Spring Framework son
la facilidad de uso y la rapidez de desarrollo. En teoría,
estas ventajas se obtienen a costa de perder la
flexibilidad que proporciona el trabajo directo con
Spring Framework.
Pero, en la práctica, a menos que necesite o desee
implementar una configuración especialmente
exclusiva, vale la pena hacer esta concesión a cambio
de poder utilizar Spring Boot. Aun así, puede utilizar el
popular sistema de anotación de Spring Framework, que
le permite inyectar fácilmente dependencias adicionales
(no cubiertas en Spring Starters) en la aplicación.
Además, también obtiene acceso a todas las funciones
de Spring Framework, que incluyen fácil manejo de
sucesos, validación, enlace de datos, conversión de tipo
y funciones de prueba y seguridad incorporadas. En
resumen, aunque el ámbito del proyecto esté
comprendido en un solo Spring Starter, Spring Boot
puede optimizar significativamente el desarrollo.
PASOS PARA TRABAJAR
CON SPRINGBOOT
PODEMOS CREAR AL PROYECTO DIRIGIENDONOS A LA
PAGINA WEB [Link]
O A TRAVES DE UN IDE, INSTALANDO EL PLUGIN DE
SPRINGBOOT, POR EJEMPLO EL PLUGIN PARA
NETBEANS SERIA ESTE
[Link]
EN LA SECCION DEL INITIALIZER DOND EPONEE
PROJECT METADATA PROPORCIONAMOS:
GROUP: ES EL NOMBRE DEL PAQUETE
ESTOS DATOS LUEGO PODEMOS VERLOS EN EL
ARCHIVO [Link]
SI CREAMOS EL PROYECTO DESDE ECLIPSE
TENDREMOS ESTA PANATALLA DE INICIO
Y EN ESTA PANTALLA PODEMOS AÑADIR LAS
DEPENDENCIAS CON LAS QUE VAMOS A TRABAJAR
PASOS PARA CREAR UN
HOLA MUNDO CON SPRING
BOOT
1. CREAMOS EL PROYECTO Y AÑADIMOS LAS
DEPENDENCIAS SPRING WEB, SPRING BOOT DEV
TOOLS,LOMBOK Y THYMELEAF
SI EL PROYECTO NOS MARCA UN WARNING O UN
ERROR TENDREMOS QUE DARLE CLENA AND BUILD SI
ESTAMOS TRABAJANDO DESDE NETBEANS
SI NOS SIGUIE MARCANDO ERROR TENEMOS QUE :
2.1 CERRAR SPRINGBOOT
2.2 IR LA CARPERA .m2 QUE SE ENCUENTRA EN LA
CARPETA C:\USERS\CIRCET
2.3 BORRAR LA CARPETA ,m2
2.4 ABRIR EL IDE DE SPRINGBOOT
2.5 CLICK DERECHO SOBRE EL PROYECTO -> MAVEN ->
UPDATE PROJECT
2.6 HACIENDO ESTO NOS VUELVE A DESCARHAR LAS
DEPENDENCIAS
2.7 SI AUN SIGUIE DANDO ERROR EL PRIOEYCTO
DEBEMOS DESACTIVAR CUALQUIER ANTIVIRUS O
WINDOWS DEFENDER Y REPETIR EL PROCESO
NUEVAMENTE
3. EL EL ARCHIVO [Link] PODEMOS OBSERVAR
TODAS LA S DEPENDENCIAS QUE HEMOS
AVGREAGADO EN EL STARTER CUANDO CREAMOS EL
PROYECTO
4. AUTOMATICAMENTE SE NOS CREA UN MAIN
Y SE NOS EJECUTA LA CLASE SpringAplication
5. AHORA VAMOS A CREAR UNA PRUEBA UTILIZANDO
UN CONTROLADOR DE TIPO REST EL CUAL NOS VA A
PERMITIR ENVIAR INFORMACION A NUESTRO
NAVEGADOR
EN ESTE CASO VAMOS A UTILIZAR EL METODO GET
PARA ENVIAR INFORMACION AL NAVEGADOR
PERO TAMBIEN PODRIAMOS UTILIZAR OTROS
METODOS COMO PODRIAS SER : EL METODO
POST,PUT ,DELETE , ETC
PARTE DE LAS CARACTRISTICAS DEL FRAMEWORK DE
SPRING ES QUE ES UN CPONTENEDOR DE CLASES
JAVA, ASI QUE PARA QUE SPRING RECONOZCA LAS
CLASES QUE VAMOS A A GREGAR A NUESTRA
APLICACION DEBEN DE ESTAR DENTRO DEL MISMO
PAQUETE DONDE SE ENCUENTRA NUESTRA CLASE, EN
ESTE CASO Holamundo2Application
O BASICAMENTE DONDE SE ENCUENTRA LA CLASE
ANOTADA CON @SpringBootApplication
TAMBIEN PUEDE ESTAR EN UN SUB-PAQUETE DE ESTE
PAQUETE
6. VAMOS A CREAR UN CONTROLADOR EN ESTE
MISMO PAQUETE. LO VAMOS A LLAMAR controlador
6.1 PARA QUE SPRING RECONOZAC ESTA CLASE
AGREGAMOS LA NOTACION @RestController
6.2 AGREGAMOS UN METODO, VA A SER UN METODO
PUBLICO, QUE REGRESA UN STRING , YA QUE ES LA
CADENA QUE SE VA MOSTRAR EN EL NAVEGADOR Y
EL PONEMOS UN NOMBRE AL METODO, EN ESTE CASO
inicio
6.3 ESTE METODO LO UNICO QUE VA A REGRESAR ES
UNA CADENA "HOLA MUNDO"
return "Hola Mundo";
6. 4PARA INDICARLE AL NAVEGADO QUE ESTE ES EL
METODO WUE SE VA A EJECUTAR TENEMOS QUE
INDICARLE LA RUTA DE EJECUCION, TENEMOS QUE
MAPEARLO A UN PATH
PARA ESTO AGREGAMOS LA ANOTACION
@GetMapping, INDICANDO LA RUTA ("/")
OSEA:
@GetMapping("/")
Y ESTO VA ENCIMA DEL METODO QUE VAM OS A
EJECUTAR
LA RUTA O PATH ("/") , SIGNIFICA QUE SE VA A
EJECUTAR EN LA DIRECCION [Link]
AL INDICAR GET EN LE MAPPING ESTAMOS
INDICANDO QUE LA PETICION QUE ESTAMOS
PROCESANDO ES DE TIPO GET
7. LO EJECUTAMOS DANDO CLICK DERECHO SOBRE EL
PROYECTO Y ELIJIENDO RUN AS -> spring boot app
8. EN NUESTRA CONSOLA NOS APARECE EL
SERVIDOR QUE ESTA EJECUTANDO NUESTRA
APLICACION Y EL PUERTO DONDE SE ESTA
EJECUTANDO
Tomcat started on port(s): 8080 (http) with context path
''
A Pablo Vodafone:
9. VAMOS AL NAVEGADOR Y ESCRIBIMOS LA DIRECION
IP [Link]
POARA VER LA EJECUCION DE NUESTRA APLICACION
10. SI EN EL @GetMapping HIBIESEMOS ESCRITO
@GetMapping("/HOLA"), PARA PODER VER NUESTRA
APLIACION EN NUESTRO NAVEGADOR ENTOVES
DEBERIAMOS ESCRIBIR [Link]
11. EN EL ARCHIVO [Link], podemos
cambiar la configuracion de neustro proyecto, podemos
decirle por ejemplo que le eapliacion se ejecute en el
puerto 9090
[Link]=9090
O QUE EL NIVEL DE LOG SEA SOLO INFO
[Link]=INFO
O EL FORMATO DE LA FECHA QUE SE N OS MUESTRA
EN CONSOLA
[Link]=hh:mm
EN CONCLUSION LA CLASDE Controlador DEBE TNER
LA ANOTACION @RestController ENCI,A DEL NOBRE DE
LA CLASE Y LA ANOTACION DE MAPEO ENCIMA DEL
METODO
@GetMapping("/hoja/hola")
COMO TRABAJAR CON
THYMELEAF
Thymeleaf se encarga de renderizar páginas html con la
información que obtenemos del servidor y permitir una
integración natural entre los datos del modelo MVC y
las páginas que soportan HTML5.
PASOS PARA TRABAJAR CON
THYMELEAF
PODEMOS CREAR AL PROYECTO DIRIGIENDONOS A LA
PAGINA WEB [Link]
O A TRAVES DE UN IDE, INSTALANDO EL PLUGIN DE
SPRINGBOOT, POR EJEMPLO EL PLUGIN PARA
NETBEANS SERIA ESTE
[Link]
EN LA SECCION DEL INITIALIZER DOND EPONEE
PROJECT METADATA PROPORCIONAMOS:
GROUP: ES EL NOMBRE DEL PAQUETE
ESTOS DATOS LUEGO PODEMOS VERLOS EN EL
ARCHIVO [Link]
SI CREAMOS EL PROYECTO DESDE ECLIPSE
TENDREMOS ESTA PANATALLA DE INICIO
Y EN ESTA PANTALLA PODEMOS AÑADIR LAS
DEPENDENCIAS CON LAS QUE VAMOS A TRABAJAR
PASOS PARA CREAR UN
HOLA MUNDO CON
THYMELEAF
1. CREAMOS EL PROYECTO Y AÑADIMOS LAS
DEPENDENCIAS SPRING WEB, SPRING BOOT DEV
TOOLS,LOMBOK Y THYMELEAF
2.
SI EL PROYECTO NOS MARCA UN WARNING O UN
ERROR TENDREMOS QUE DARLE CLENA AND BUILD SI
ESTAMOS TRABAJANDO DESDE NETBEANS
SI NOS SIGUIE MARCANDO ERROR TENEMOS QUE :
2.1 CERRAR SPRINGBOOT
2.2 IR LA CARPERA .m2 QUE SE ENCUENTRA EN LA
CARPETA C:\USERS\CIRCET
2.3 BORRAR LA CARPETA ,m2
2.4 ABRIR EL IDE DE SPRINGBOOT
2.5 CLICK DERECHO SOBRE EL PROYECTO -> MAVEN ->
UPDATE PROJECT
2.6 HACIENDO ESTO NOS VUELVE A DESCARHAR LAS
DEPENDENCIAS
2.7 SI AUN SIGUIE DANDO ERROR EL PRIOEYCTO
DEBEMOS DESACTIVAR CUALQUIER ANTIVIRUS O
WINDOWS DEFENDER Y REPETIR EL PROCESO
NUEVAMENTE
3. EL EL ARCHIVO [Link] PODEMOS OBSERVAR
TODAS LA S DEPENDENCIAS QUE HEMOS
AVGREAGADO EN EL STARTER CUANDO CREAMOS EL
PROYECTO
4. AUTOMATICAMENTE SE NOS CREA UN MAIN
Y S E OS EJECUTA LA CLASE SpringAplication
5. AHORA VAMOS A CREAR UNA PRUEBA UTILIZANDO
UN CONTROLADOR DE TIPO REST EL CUAL NOS VA A
PERMITIR ENVIAR INFORMACION A NUESTRO
NAVEGADOR
EN ESTE CASO VAMOS A UTILIZAR EL METODO GET
PARA ENVIAR INFORMACION AL NAVEGADOR
PERO TAMBIEN PODRIAMOS UTILIZAR OTROS
METODOS COMO PODRIAS SER : EL METODO
POST,PUT ,DELETE , ETC
PARTE DE LAS CARACTRISTICAS DEL FRAMEWORK DE
SPRING ES QUE ES UN CPONTENEDOR DE CLASES
JAVA, ASI QUE PARA QUE SPRING RECONOZCA LAS
CLASES QUE VAMOS A A GREGAR A NUESTRA
APLICACION DEBEN DE ESTAR DENTRO DEL MISMO
PAQUETE DONDE SE ENCUENTRA NUESTRA CLASE, EN
ESTE CASO Holamundo2Application
6. CREAMOS UNA CLASE JAVA DENTRO DEL PAQUETE
LLAMADA ControladorInicio
6.1 AGREGAMOS LA ANOTACION DE CONTROLADOR
DE SPRING MVC
@Controller
6.2 CREA,MPOS UN METODO LLAMADO INICIO, ESTE
METODO VA A DEVOLVER UN STRING LLAMADO index,
Y A DIFERENCIA DEL EJEMPLO ANTERIOR, ESTE
METODO NO NOS VA A DEVOLVER LITERALMENTE UN
STRING, CUANDO TRABAJAMOS CON LA ANOTACION
DE EL CONTROLADOR MVC @Controller, EN LOS
METODOS QUE REGRESAN return LO QUE SE DEVUELVE
ES EL NOMBRE DLE ARCHIVO HTML QUE SE AVA A
EJECUTAR CUANDO LLAMEMEOS ESTE METODO,
OSEA, CUANDO SE INVOQUE ESTE METODO SE VA A
MANDAR A LLMAR UN ARCHIVOLLLAMADO [Link],
LOS RETURN DE LOSMETODOS DE THYMELEAF
DEVUELVEN UN HTML AUNQUE NO INDIQUEN EL .html
public String inicio(){
return "index";
ESTE METODO MANDA A LLAMAR UN ARCHIVO
[Link]
6.2 MAPEAMOS EL METODO
@GetMapping("/")
7. CREAMOS EL ARCHIVO [Link] EN LA RUTA
src/main/resources/templates, EL NOMBRE DEL
ARCHIVO .TMHL DEBE SER EL MISMO QUE ESTAMOS
RETURNANDO DESDE EL CONTROLADOR
EN ESTA CARPETA SE AGREGAN TODAS LAS PAGINAS
DE LA TECNOLOGIA DE THYMELEAF
PODEMOS CREAR EL ARCHIVO .html DITRECTAMENTE
EN ESTA CARPETA O PODEMOS PONERLO TAMBIEN
EN UNA SUBCARPETA
7.1 PARA QUE PODAMOS MANEJAR INFORMACION
DINAMICA EN NUESTRAS PAGINA HTML DEBEMOS
AGREGAR LA ETIQUETA <html
xmlns:th="[Link]
7.2 AGREGAMOS UNA ETIQUETA DE PARRAFO
UTILIZANDO UN COMPONENTE DE THYMELEAF
<p th:text="HOLA DESDE THYMELEAF"></p>
ESTE SERIA EL MENDAJE QUE SE VA A IMPRIMIR EN
PANTALLA EN LA DIRECCION [Link]
8. EJECUTAMOS
CONCLUSION
1.@Controller POR ECIMA DEL NOMBRE DE LA CLASE
2. @GetMapping("/") POR ENCIMA DEL METODO
3. return "index"; DEVIELVE EL NOMBRE DEL ARCHIVO
HTNML QUE SE VA A EJECUTAR
COMO ENVIAR INFORMACION O VARIABLES DESDE EL
CONTROLADOR HACIA LA PAGINA DE INDEX
SEGUIMOS LOS PASOS DEL PUENTO ANTERIOR PARA
CREAR EL PROYECTO HASTA EL PUNTO 6.1
PODEMOS CREAR AL PROYECTO DIRIGIENDONOS A LA
PAGINA WEB [Link]
O A TRAVES DE UN IDE, INSTALANDO EL PLUGIN DE
SPRINGBOOT, POR EJEMPLO EL PLUGIN PARA
NETBEANS SERIA ESTE
[Link]
EN LA SECCION DEL INITIALIZER DOND EPONEE
PROJECT METADATA PROPORCIONAMOS:
GROUP: ES EL NOMBRE DEL PAQUETE
ESTOS DATOS LUEGO PODEMOS VERLOS EN EL
ARCHIVO [Link]
SI CREAMOS EL PROYECTO DESDE ECLIPSE
TENDREMOS ESTA PANATALLA DE INICIO
Y EN ESTA PANTALLA PODEMOS AÑADIR LAS
DEPENDENCIAS CON LAS QUE VAMOS A TRABAJAR
PASOS PARA CREAR UN
HOLA MUNDO CON
THYMELEAF
1. CREAMOS EL PROYECTO Y AÑADIMOS LAS
DEPENDENCIAS SPRING WEB, SPRING BOOT DEV
TOOLS,LOMBOK Y THYMELEAF
2.
SI EL PROYECTO NOS MARCA UN WARNING O UN
ERROR TENDREMOS QUE DARLE CLENA AND BUILD SI
ESTAMOS TRABAJANDO DESDE NETBEANS
SI NOS SIGUIE MARCANDO ERROR TENEMOS QUE :
2.1 CERRAR SPRINGBOOT
2.2 IR LA CARPERA .m2 QUE SE ENCUENTRA EN LA
CARPETA C:\USERS\CIRCET
2.3 BORRAR LA CARPETA ,m2
2.4 ABRIR EL IDE DE SPRINGBOOT
2.5 CLICK DERECHO SOBRE EL PROYECTO -> MAVEN ->
UPDATE PROJECT
2.6 HACIENDO ESTO NOS VUELVE A DESCARHAR LAS
DEPENDENCIAS
2.7 SI AUN SIGUIE DANDO ERROR EL PRIOEYCTO
DEBEMOS DESACTIVAR CUALQUIER ANTIVIRUS O
WINDOWS DEFENDER Y REPETIR EL PROCESO
NUEVAMENTE
3. EL EL ARCHIVO [Link] PODEMOS OBSERVAR
TODAS LA S DEPENDENCIAS QUE HEMOS
AVGREAGADO EN EL STARTER CUANDO CREAMOS EL
PROYECTO
4. AUTOMATICAMENTE SE NOS CREA UN MAIN
Y S E OS EJECUTA LA CLASE SpringAplication
5. AHORA VAMOS A CREAR UNA PRUEBA UTILIZANDO
UN CONTROLADOR DE TIPO REST EL CUAL NOS VA A
PERMITIR ENVIAR INFORMACION A NUESTRO
NAVEGADOR
EN ESTE CASO VAMOS A UTILIZAR EL METODO GET
PARA ENVIAR INFORMACION AL NAVEGADOR
PERO TAMBIEN PODRIAMOS UTILIZAR OTROS
METODOS COMO PODRIAS SER : EL METODO
POST,PUT ,DELETE , ETC
PARTE DE LAS CARACTRISTICAS DEL FRAMEWORK DE
SPRING ES QUE ES UN CPONTENEDOR DE CLASES
JAVA, ASI QUE PARA QUE SPRING RECONOZCA LAS
CLASES QUE VAMOS A A GREGAR A NUESTRA
APLICACION DEBEN DE ESTAR DENTRO DEL MISMO
PAQUETE DONDE SE ENCUENTRA NUESTRA CLASE, EN
ESTE CASO Holamundo2Application
6. CREAMOS UNA CLASE JAVA DENTRO DEL PAQUETE
LLAMADA ControladorInicio
6.1 AGREGAMOS LA ANOTACION DE CONTROLADOR
DE SPRING MVC
@Controller
6.2 CREA,MPOS UN METODO LLAMADO INICIO, ESTE
METODO VA A DEVOLVER UN STRING LLAMADO index,
Y A DIFERENCIA DEL EJEMPLO ANTERIOR, ESTE
METODO NO NOS VA A DEVOLVER LITERALMENTE UN
STRING, CUANDO TRABAJAMOS CON LA ANOTACION
DE EL CONTROLADOR MVC @Controller, EN LOS
METODOS QUE REGRESAN return LO QUE SE DEVUELVE
ES EL NOMBRE DLE ARCHIVO HTML QUE SE AVA A
EJECUTAR CUANDO LLAMEMEOS ESTE METODO,
OSEA, CUANDO SE INVOQUE ESTE METODO SE VA A
MANDAR A LLMAR UN ARCHIVOLLLAMADO [Link],
LOS RETURN DE LOSMETODOS DE THYMELEAF
DEVUELVEN UN HTML AUNQUE NO INDIQUEN EL .html
public String inicio(){
return "index";
ESTE METODO MANDA A LLAMAR UN ARCHIVO
[Link]
6.2 SOBRE NUESTRO METODO DE INICIO VAMOS A
RECINBIR UN OBJETO QUE SE LLAMA Model
IMPORTAMOS import [Link];
ESTE OBJETO Model ES EL QUE NOS VA A PERMITIR
COMPARTIR INFORMACION CON NUESTRAS PAGINAS
HTML
6.3
DEFINIMOS UNA VARIABLE LOCAL LLAMADA
MENSAJE
var mensaje = "Mensaje con Thymeleaf";
6.4 ESTA VARIABLE LA VAMOS A COMPARTIR
UYILIZANDO NUESTRA CLASE Model, este Model ES UN
MAPA POR LO TANTO ELEGIMOS LA OPCION STRING,
OBJECT(LLAVE-VALOR)
[Link]("mensaje", mensaje);
DONDE "mensaje" es la llave y mensaje es el valor de la
variable mensaje, osea "Mensaje con Thymeleaf"
7.3 PARA ACCEDER AL VALOR DE LAS VARIABLES
USAMOS EXPRESSION LANGUAGE
<p th:text="${mensaje}"></p>
DONDE LA VARIABLE mensaje, ES LA QUE ESTAMOS
COMPATIENDO DESDE EL CONTROLADOR
8. EJECUTAMOS
OUTPUT
9. TAMBIEN TENEMOS OTRA FORMA DE COMPARTIR
INFORMACION CON LA PAGINA INDEX Y ES
UTILIZANDO EL ARCHIVO PROPERTIES
9.1 VAMOS AL ARCHIVO PROPERTIES Y AGREGAMOS
UN MENSAJE(LLAVE-VALOR)
[Link]=Adios desde [Link]
10. PARA ACCEDER A ESTA VARIABLE DESDE
NUESTRO CONTROLADOR
10.1 VAMOS AL CONTROLADOR Y DECLARAMOS UNA
VARIABLE QUE VA A ALMACENAR EL VALOR
DECLARADO EN NUESTRO ARCHIVO DE PROPIEDADES
10.2 UTILIZAMOS LA ANOTACION DE @Value, PARA
PODER ACCEDER AL VALOR DE ESTA VARIABLE
DECLARADA EN NUESTRO ARHIVO PROPERTIES,
[Link] ES LA LLAVE DECLARADA EN NUESTRO
ARCHIVO DE PROPERTIES
@Value("${[Link]}")
10.3 IMPORTAMOS import
[Link];
SOLO HACE FALTA ESTO PARA QUE SPRING INYECTE
EL VALOR DE [Link] A LA VARIABLE saludo
10.4 COMPARTIMOS ESTA VARIABLE CON EL ARCHIVO
[Link] UTILIZANDO LA CLASE Model
UTILIZANDO EL METODO addAttribute
[Link]("saludo", saludo);
11 VAMOS AL ARCHIVO [Link] PARA RECIBIR ESTA
VARIABLE
<p th:text="${saludo}"></p>
12. EJECUTAMOS
ARCHiVOS COMPLETOS
CLASE ControladorInicio
package [Link];
import
[Link];
import [Link];
import [Link];
import
[Link];
@Controller
public class ControladorInicio {
@Value("${[Link]}")
private String saludo;
@GetMapping("/")
public String inicio(Model model){
var mensaje = "Mensaje con Thymeleaf";
[Link]("mensaje", mensaje);
[Link]("saludo", saludo);
return "index";
ARCHIVO [Link]
<!DOCTYPE html>
<html xmlns:th="[Link]
<head>
<title>Inicio</title>
<meta charset="UTF-8">
<head>
<title>Inicio</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Inicio</h1>
<p th:text="${mensaje}"></p>
<p th:text="${saludo}"></p>
</body>
</html>
ARCHIVO [Link]
[Link]=9090
#[Link]=INFO
#[Link]=DEBUG
[Link]=hh:mm
[Link]-mode=off
[Link]=false
[Link]=Adios desde [Link]
COMO MAPEAR VARIAS RUTAS A LAS VEZ
@GetMapping({"/index","/inicio","/"})
MODELO VISTA COTROLADOR(MVC) EN SPRINBOOT
SEGUIMOS LOS PASOS ANTERIORRES HASTA EL 6.2
PODEMOS CREAR AL PROYECTO DIRIGIENDONOS A LA
PAGINA WEB [Link]
O A TRAVES DE UN IDE, INSTALANDO EL PLUGIN DE
SPRINGBOOT, POR EJEMPLO EL PLUGIN PARA
NETBEANS SERIA ESTE
[Link]
EN LA SECCION DEL INITIALIZER DOND EPONEE
PROJECT METADATA PROPORCIONAMOS:
GROUP: ES EL NOMBRE DEL PAQUETE
ESTOS DATOS LUEGO PODEMOS VERLOS EN EL
ARCHIVO [Link]
SI CREAMOS EL PROYECTO DESDE ECLIPSE
TENDREMOS ESTA PANATALLA DE INICIO
Y EN ESTA PANTALLA PODEMOS AÑADIR LAS
DEPENDENCIAS CON LAS QUE VAMOS A TRABAJAR
1. CREAMOS EL PROYECTO Y AÑADIMOS LAS
DEPENDENCIAS SPRING WEB, SPRING BOOT DEV
TOOLS,LOMBOK Y THYMELEAF
2.. SI EL PROYECTO NOS MARCA UN WARNING O UN
ERROR TENDREMOS QUE DARLE CLENA AND BUILD SI
ESTAMOS TRABAJANDO DESDE NETBEANS
SI NOS SIGUIE MARCANDO ERROR TENEMOS QUE :
2.1 CERRAR SPRINGBOOT
2.2 IR LA CARPERA .m2 QUE SE ENCUENTRA EN LA
CARPETA C:\USERS\CIRCET
2.3 BORRAR LA CARPETA ,m2
2.4 ABRIR EL IDE DE SPRINGBOOT
2.5 CLICK DERECHO SOBRE EL PROYECTO -> MAVEN ->
UPDATE PROJECT
2.6 HACIENDO ESTO NOS VUELVE A DESCARHAR LAS
DEPENDENCIAS
2.7 SI AUN SIGUIE DANDO ERROR EL PRIOEYCTO
DEBEMOS DESACTIVAR CUALQUIER ANTIVIRUS O
WINDOWS DEFENDER Y REPETIR EL PROCESO
NUEVAMENTE
3. EL EL ARCHIVO [Link] PODEMOS OBSERVAR
TODAS LA S DEPENDENCIAS QUE HEMOS
AVGREAGADO EN EL STARTER CUANDO CREAMOS EL
PROYECTO
4. AUTOMATICAMENTE SE NOS CREA UN MAIN
Y S E OS EJECUTA LA CLASE SpringAplication
5. AHORA VAMOS A CREAR UNA PRUEBA UTILIZANDO
UN CONTROLADOR DE TIPO REST EL CUAL NOS VA A
PERMITIR ENVIAR INFORMACION A NUESTRO
NAVEGADOR
EN ESTE CASO VAMOS A UTILIZAR EL METODO GET
PARA ENVIAR INFORMACION AL NAVEGADOR
PERO TAMBIEN PODRIAMOS UTILIZAR OTROS
METODOS COMO PODRIAS SER : EL METODO
POST,PUT ,DELETE , ETC
PARTE DE LAS CARACTRISTICAS DEL FRAMEWORK DE
SPRING ES QUE ES UN CPONTENEDOR DE CLASES
JAVA, ASI QUE PARA QUE SPRING RECONOZCA LAS
CLASES QUE VAMOS A A GREGAR A NUESTRA
APLICACION DEBEN DE ESTAR DENTRO DEL MISMO
PAQUETE DONDE SE ENCUENTRA NUESTRA CLASE, EN
ESTE CASO Holamundo2Application
6. CREAMOS UNA CLASE JAVA DENTRO DEL PAQUETE
LLAMADA ControladorInicio
6.1 AGREGAMOS LA ANOTACION DE CONTROLADOR
DE SPRING MVC
@Controller
6.2 CREA,MPOS UN METODO LLAMADO INICIO, ESTE
METODO VA A DEVOLVER UN STRING LLAMADO index,
Y A DIFERENCIA DEL EJEMPLO ANTERIOR, ESTE
METODO NO NOS VA A DEVOLVER LITERALMENTE UN
STRING, CUANDO TRABAJAMOS CON LA ANOTACION
DE EL CONTROLADOR MVC @Controller, EN LOS
METODOS QUE REGRESAN return LO QUE SE DEVUELVE
ES EL NOMBRE DLE ARCHIVO HTML QUE SE AVA A
EJECUTAR CUANDO LLAMEMEOS ESTE METODO,
OSEA, CUANDO SE INVOQUE ESTE METODO SE VA A
MANDAR A LLMAR UN ARCHIVOLLLAMADO [Link],
LOS RETURN DE LOSMETODOS DE THYMELEAF
DEVUELVEN UN HTML AUNQUE NO INDIQUEN EL .html
public String inicio(){
return "index";
ESTE METODO MANDA A LLAMAR UN ARCHIVO
[Link]
6.2 SOBRE NUESTRO METODO DE INICIO VAMOS A
RECINBIR UN OBJETO QUE SE LLAMA Model
IMPORTAMOS import [Link];
ESTE OBJETO Model ES EL QUE NOS VA A PERMITIR
COMPARTIR INFORMACION CON NUESTRAS PAGINAS
HTML
7. CREAMOS LA CLASE Persona, DENTRO DEL
PAQUETE [Link]
7.1CREAMOS LAS VARIABLES
private String nombre;
private String apellido;
private String email;
private String telefono;
public String getNombre()
CON SUS RESPECTIVOS METODOS GETTER Y SETTER
8. EN ESTE PUNTO YA TENEMOS QUE TNER CREADO
NUESTR ARCHIVO JAVA LLAMADO ControladorInicio,
EL CUAL A A SER NUESTRO CONTROLADOR Y EL CUAL
VA A RECIBIR LA CLASE Model
8. AGREGAMOS LA ANOTACION @Controller
8.2 CREAMOS UN METODO LLAMADO inicio EL CUAL
VA A DEVOLVER EL NOBRE DEL ARCHIVO .HTML QUE
QEREMOS QUE SE EJECUTE CUANDO SE INVOQUE
ESTE METODO
public String inicio(Model model){
return "index";
}
8.3 MAPEAMOS LA RUTA
@GetMapping("/")
8.4 CREAMOS EL OBJETO DE TIPO Persona
var persona = new Persona();
8.5 LE ASIGNAMOS VALORES USANDO LOS METODOS
GETTER Y SETTER
[Link]("Juan");
[Link]("Perez");
[Link]("jperez@[Link]");
[Link]("55443322");
8.6 USANDO LA CLASE Model, COMPATIRMOS ESTAS
VARIABLES PARA PODER USARLAS EN NUESTRO
ARCHIVO HTML
[Link]("persona", persona);
9. VAMOS AL ARCHJCO [Link], EL CUAL ES EL
ARCHIVO DEL CUAL ESTAMOS HACIENDO RETURN
DESDE EL MAIN
9.1 CREAMOS EL ARCHIVO [Link] EN LA RUTA
src/main/resources/templates, EL NOMBRE DEL
ARCHIVO .TMHL DEBE SER EL MISMO QUE ESTAMOS
RETURNANDO DESDE EL CONTROLADOR
EN ESTA CARPETA SE AGREGAN TODAS LAS PAGINAS
DE LA TECNOLOGIA DE THYMELEAF
PODEMOS CREAR EL ARCHIVO .html DITRECTAMENTE
EN ESTA CARPETA O PODEMOS PONERLO TAMBIEN
EN UNA SUBCARPETA
9.2 PARA QUE PODAMOS MANEJAR INFORMACION
DINAMICA EN NUESTRAS PAGINA HTML DEBEMOS
AGREGAR LA ETIQUETA <html
xmlns:th="[Link]
9.3 NOS APOYAMOS DE LAS ETIQUETAS th PARA
RECUPERAR EL VALOR DE LAS VARIABLES QUE
ESTAMOS RECIBIENDO DESE EL CONTROLADOR
Y USAMOS LA ETIQUETA HTML SPAN PARA DARLE
FORMATO
Nombre: <span th:text="${[Link]}">Mostrar
Nombre</span>
Y ASI CON CADA UNA DE LAS VARIABLES
Nombre: <span th:text="${[Link]}">Mostrar
Nombre</span>
<br/>
Apellido: <span
th:text="${[Link]}">Mostrar Apellido</span>
<br/>
Email: <span th:text="${[Link]}">Mostrar
Email</span>
<br/>
Teléfono: <span
th:text="${[Link]}">Mostrar Teléfono</span>
10. EJECUTAMOS
DE ESTA MANERA COMPLETAMOS EL MODELO (MVC)
10. AHORA VAMOS A CREAR UNA LISTA DE TIPO
Persona ,LA VAMOS A IYTERAR Y VANOS A UTILIZAR
CONDICION ALES
10. CREAMOS OTRA VARIABLE DEL TIPO Persona
LLAMADA persona2 Y LE ASIGNAMOS VALORES
MEDIENTA LOS GETTER Y SETTER
var persona2 = new Persona();
[Link]("Karla");
[Link]("Gomez");
[Link]("kgomez@[Link]");
[Link]("13229900");
10.2 CREAMOS UNA VARIABLE DEL TIPO ARRAY LIST Y
AGREGAMOS LOS DOS OBJETOS DEL TIPO PERSONA
var personas = new ArrayList();
[Link](persona);
[Link](persona);
10.3 USAMOS LA VARIABLE model PARA COMPARTIR
LAS VARIABLES CON EL ARCHIVO [Link]
[Link]("personas", personas);
[Link] AL ARCHIVO [Link]
11.1 CREAMOS UNA TABLA
11.2 CREAMOS DOS CICLOS IF , UNO POR SI LA LISTA
DE Peersonas TIENE DATOS
<div th:if="${personas != null and ![Link]}">
</div>
Y OTRO POR SI LA LISTA DE Personas esta vacia
<div th:if="${personas == null or [Link]}">
La lista de personas está vacía
</div>
11.3 EN EL PRIMER BLOQUE IF AGREGAMOS UNA
TABLA
<table border="1">
<tr>
<th>Nombre</th>
<th>Apellido</th>
<th>Email</th>
<th>Teléfono</th>
</tr>
</table>
11.4 AGTREGAMOS UN CICLO FOR PARA IETERAR
CADA UNO D ELOS ELEMENTOS D ELA LISTA personas
<tr th:each="persona : ${personas}">
</tr>
11.5 accedem os a cada uno d elos valores de los
elementos de las lista personas
<td th:text="${[Link]}">Mostrar Nombre</td>
<td th:text="${[Link]}">Mostrar
Apellido</td>
<td th:text="${[Link]}">Mostrar
Email</td>
<td th:text="${[Link]}">Mostrar
Teléfono</td>
CODIGO COMPLETO ARCHIVO [Link]
<!DOCTYPE html>
<html xmlns:th="[Link]
<head>
<title>Inicio</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Inicio</h1>
<br/>
<div th:if="${personas != null and
![Link]}">
<table border="1">
<tr>
<th>Nombre</th>
<th>Apellido</th>
<th>Email</th>
<th>Teléfono</th>
</tr>
<tr th:each="persona : ${personas}">
<td th:text="${[Link]}">Mostrar
Nombre</td>
<td th:text="${[Link]}">Mostrar
Apellido</td>
<td th:text="${[Link]}">Mostrar
Email</td>
<td th:text="${[Link]}">Mostrar
Teléfono</td>
</tr>
</table>
</div>
<div th:if="${personas == null or [Link]}">
La lista de personas está vacía
</div>
</body>
</html>
EJECUTAMOS
ARCHIVOS COMPLETOS
ARCHIVO ControladorInicio
package [Link];
import [Link];
import [Link];
import [Link].slf4j.Slf4j;
import [Link];
import
[Link];
import [Link];
import [Link];
import
[Link];
@Controller
public class ControladorInicio {
@GetMapping("/")
public String inicio(Model model){
var persona = new Persona();
[Link]("Juan");
[Link]("Perez");
[Link]("jperez@[Link]");
[Link]("55443322");
var persona2 = new Persona();
[Link]("Karla");
[Link]("Gomez");
[Link]("kgomez@[Link]");
[Link]("13229900");
var personas = new ArrayList();
[Link](persona);
[Link](persona);
[Link]("personas", personas);
return "index";
ARCHIVO CLASE Persona
package [Link];
import [Link];
@Data
public class Persona {
private String nombre;
private String apellido;
private String email;
private String telefono;
public String getNombre() {
return nombre;
public void setNombre(String nombre) {
[Link] = nombre;
public String getApellido() {
return apellido;
public void setApellido(String apellido) {
[Link] = apellido;
public String getEmail() {
return email;
public void setEmail(String email) {
[Link] = email;
public String getTelefono() {
return telefono;
public void setTelefono(String telefono) {
[Link] = telefono;
ARCHIVO [Link]
<!DOCTYPE html>
<html xmlns:th="[Link]
<head>
<title>Inicio</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Inicio</h1>
<br/>
<div th:if="${personas != null and
![Link]}">
<table border="1">
<tr>
<th>Nombre</th>
<th>Apellido</th>
<th>Email</th>
<th>Teléfono</th>
</tr>
<tr th:each="persona : ${personas}">
<td th:text="${[Link]}">Mostrar
Nombre</td>
<td th:text="${[Link]}">Mostrar
Apellido</td>
<td th:text="${[Link]}">Mostrar
Email</td>
<td th:text="${[Link]}">Mostrar
Teléfono</td>
</tr>
</table>
</div>
<div th:if="${personas == null or [Link]}">
La lista de personas está vacía
</div>
</body>
</html>