0% encontró este documento útil (0 votos)
2 vistas1149 páginas

Manual Java

El manual de Java proporciona directrices sobre la declaración y uso de variables, incluyendo convenciones de nomenclatura y tipos de datos como enteros, decimales, cadenas y caracteres. También se abordan técnicas para imprimir en consola, formatear salidas y crear menús utilizando JOptionPane. Además, se explican estructuras de control como condicionales y bucles, así como la captura de entradas del usuario.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2 vistas1149 páginas

Manual Java

El manual de Java proporciona directrices sobre la declaración y uso de variables, incluyendo convenciones de nomenclatura y tipos de datos como enteros, decimales, cadenas y caracteres. También se abordan técnicas para imprimir en consola, formatear salidas y crear menús utilizando JOptionPane. Además, se explican estructuras de control como condicionales y bucles, así como la captura de entradas del usuario.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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 (![Link]("secreto"));
. 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&&nota<=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>&nbsp;</td><td
align='right'><input type='reset'
value='Limpiar'></td></tr>";

html += "<tr><td>&nbsp;</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&amp;useTimezone=true&amp;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&amp;useTimezone=true&amp;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&amp;useTimezone=true&amp;serverTimezone=U
TC&amp;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&amp;useTimezone=true&amp;serverTimezone=U
TC&amp;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>

También podría gustarte