Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DESARROLLO
DE SOFTWARE
MANUAL DE APRENDIZAJE
LENGUAJE DE
PROGRAMACIÓN V
CÓDIGO: 89001726
Profesional Técnico
LENGUAJE DE PROGRAMACIÓN V
ÍNDICE
I. JavaScript / HTML.
EQUIPOS Y MATERIALES:
- Computadora con microprocesadores core 2 Duo ó de mayor capacidad.
- Sistema operativo Windows.
- Acceso a internet.
- Software de maquetación y desarrollo de páginas web.
ORDEN DE EJECUCIÓN:
- Métodos Eventos.
- Arrays.
- Aplicaciones validaciones.
Estos elementos son los medios por los que ahora la interfaz con las
aplicaciones. La buena noticia es que se pueden incluir muchos de estos tipos
de elementos en su página web - y aún mejor, es muy fácil de hacerlo. Cuando
se tiene un elemento tal - por ejemplo, un botón - dentro de su página, se
puede luego atar código para sus eventos. Por ejemplo, cuando se ejecuta el
evento clic en el botón, puede encender el método de un JavaScript que ha
creado.
Formulario HTML
Para crear un formulario, utilice la etiqueta <form> y </ form> etiquetas para
declarar dónde comienza y dónde termina.
Estos elementos tienen una serie de atributos de acción, lo que determina que
el formulario se envía el atributo del método, lo que determina la forma de
presentación de la información y el atributo de destino.
Por lo tanto, para crear un formulario en blanco, las etiquetas necesarias sería
algo como esto:
[ejemploFormulario1.html]
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Tema01</title>
5 <script language="javascript" type="text/javascript">
function
6 cargarventana()
7 {
8 var numformularios = document.forms.length;
9 var contador=0;
10 for(contador = 0; contador < numformularios; contador++)
11 {
12 alert(document.forms[contador].name);
13 }
14 }
15 </script>
16 </head>
17 <body onload="cargarventana()" >
18 <form action="" name="formulario1">
19 <p>
20 Esto está dentro de Formulario1.
21 </p>
22 </form>
23 <form action="" name="formulario2">
24 <p>
25 Esto está dentro de Formulario2.
26 </p>
27 </form>
Resultado:
Realmente, porque usted sabe cuántas formas hay, sólo puede escribir el
número en. Sin embargo, este ejemplo utiliza la propiedad de longitud, ya que
hace que sea más fácil para añadir a la colección sin tener que cambiar la
función. Generalizando su código como este es una buena práctica para entrar.
function cargarventana()
{
var numformularios = document.forms.length;
var contador=0;
for(contador = 0; contador < numformularios; contador++)
{
alert(document.forms[contador].name);
}
}
Dentro del código del bucle, se pasa el índice del formulario que desee (es
decir, contador) para document.forms[], que le da el objeto Form en ese índice
en la colección de formularios. Para acceder a la propiedad nombre del
formulario del objeto, se puso un punto al final del nombre de la propiedad.
Esta propiedad es muy útil para el bucle a través de cada uno de los elementos
en un formulario. Por ejemplo, se puede recorrer cada elemento para
comprobar que no contiene datos válidos antes de enviar un formulario.
Esto hace que el código del controlador de eventos onsubmit un gran lugar
para hacer la validación de formularios. Es decir, para comprobar que lo que el
usuario ha ingresado en el formulario es válido. Por ejemplo, si se le pregunta
por las edades de los usuarios y que entren en la mente de su propio negocio,
se puede ver que se trata de texto en lugar de una número válido y que no
lleven adelante.
Como se puede ver, la mayoría de los elementos del formulario son creados
por medio del elemento <input>. Uno de los elementos <input> los atributos del
El nombre de la propiedad.
Una de las propiedades que todos los objetos de los elementos de formulario
tienen en común es la propiedad de nombre. Puedes usar el valor de esta
propiedad para hacer referencia a ese elemento en particular en el script.
Además, si usted está enviando la información en forma de un servidor, la
propiedad nombre del elemento se envía junto con cualquier valor del
formulario, para que el servidor pueda saber lo que el valor se refiere.
El valor de la propiedad.
La mayoría de los objetos de elementos de formulario también tienen la
propiedad de valor, que devuelve el valor del elemento. Por ejemplo, para un
cuadro de texto, la propiedad del valor devuelve el texto que el usuario escribe
en el cuadro de texto. También estableciendo el valor de la propiedad del valor
le permite poner texto dentro del cuadro de texto. Sin embargo, el uso del valor
de la propiedad es específicar para cada elemento.
[ejemploJavaScript2.html]
1 <!DOCTYPE html>
2
3 <html>
4 <head>
5 <title>Tema01: Ejemplo 2</title>
6 <script language="javascript" type="text/javascript">
7 var totalclic = 0;
8 function miboton_onclick()
9 {
10 totalclic++;
11 document.form1.miboton.value = "Boton presionado " +
12 totalclic + " veces";
13 }
14 </script>
15 </head>
16 <body>
17
18 <form action="" name="form1">
Resultado:
function miboton_onclick()
{
totalclic++;
}
[ejemploJavaScript3.html]
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Tema01: Ejemplo3</title>
5 <script language="javascript" type="text/javascript">
6 function miboton_onmouseup()
7 {
8 document.form1.miboton.value = "Botón va para arriba";
9 }
10
11 function miboton_onmousedown()
12 {
13 document.form1.miboton.value = "Botón va para abajo";
14 }
15 </script>
16 </head>
17 <body>
18 <form action="" name="form1">
19 <input type="button" name="miboton"
20 value="Boton va para arriba"
21 onmouseup="miboton_onmouseup()"
22 onmousedown="miboton_onmousedown()" />
23 </form>
24 </body>
25 </html>
Resultado:
Tan pronto como se suelta el botón, el texto cambia a " Botón va para abajo."
No hay que olvidar que, al igual que todos los objetos de elementos de
formulario, el objeto Button también tiene los eventos onfocus y onBlur, a pesar
de que rara vez se utilizan en el contexto de botones.
Dos tipos de botones adicionales son los botones Enviar y Restablecer. Usted
define estos botones tal como lo hace un botón estándar, excepto que el
atributo type de la etiqueta <input> se establece en enviar o restablecer en
lugar de al botón. Por ejemplo, los botones Enviar y Restablecer se crearon
usando el siguiente código:
Cuando se hace clic en el botón Enviar, los datos del formulario se envían al
servidor de forma automática, sin necesidad de cualquier secuencia de
comandos.
[ejemploJavaScript4.html]
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Tema01: Ejemplo4</title>
5 <script language="javascript" type="text/javascript">
6 function mostrarEvento(nombreEvento)
7 {
8 var mimensaje = window.document.form1.textarea2.value;
9 mimensaje = mimensaje + nombreEvento;
10 document.form1.textarea2.value = mimensaje;
11 }
12 </script>
13 </head>
14 <body>
15 <form action="" name="form1">
16 <textarea rows="15" cols="40" name="textarea1"
17 onchange="mostrarEvento('onchange\n');"
18 onkeydown="mostrarEvento('onkeydown\n');"
19 onkeypress="mostrarEvento('onkeypress\n');"
20 onkeyup="mostrarEvento('onkeyup\n\n');"></textarea>
21
22 <textarea rows="15" cols="40" name="textarea2"></textarea>
23 <br />
24 <br />
25 <input type="button" value="Limpiar TextArea"
26 name="button1"
27 onclick="document.form1.textarea2.value=''" />
28 </form>
29 </body>
30 </html>
Resultado:
Para ver lo que sucede cuando se escriba cualquier letra en el cuadro de área
de texto primero. Debemos ver los eventos que están siendo ejecutados se
enumeraran en el segundo texto el cuadro del área (onkeydown, onkeypress, y
onkeyup), como se muestra en la imagen al hacer clic fuera de la caja de área
de texto en primer lugar, verá el evento onchange. Experimente con el ejemplo
para ver qué eventos.
A continuación, usted tiene un área de texto vacío del mismo tamaño que la
primera.
<textarea rows="15" cols="40" name="textarea1"></textarea>
Por último, se tiene un elemento de botón.
[ejemploJavaScript5.html]
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Tema01: Ejemplo5</title>
5 <script type="text/javascript">
6 var indiceVelocidad = 0;
7 //------------------------------------------------
8 function verVelocidad_onclick(indice)
9 {
10 var retornarValor = true;
11 if (indice==1)
12 {
13 retornarValor = false;
14 alert("Lo sentimos que la velocidad del procesador no \n\
15 está disponible actualmente");
16
17 document.form1.radiovelocidad[indiceVelocidad].checked = true;
18 }
19 else
20 {
21 indiceVelocidad = indice;
22 }
23 return retornarValor;
24 }
25 //----------------------------------------------
26 function verificarBoton_onclick()
27 {
28 var indicecontrol;
29 var element;
30 var numerocontrol = window.document.form1.length;
31 var mensaje = "La velocidad de su procesador elegido es : ";
32 mensaje=mensaje + document.form1.radiovelocidad[indiceVelocidad].value;
33 mensaje = mensaje + "\nCon los siguientes componentes adicionales\n";
34 for (indicecontrol = 0; indicecontrol < numerocontrol; indicecontrol++)
35 {
36 element = document.form1[indicecontrol];
37
38 if (element.type == "checkbox")
39 {
40 if (element.checked == true)
41 {
42 mensaje = mensaje + element.value + "\n";
43 }
44 }
45 }
46 alert(mensaje);
47 }
48 </script>
49 </head>
50 <body>
51 <form action="" name="form1">
52 <p>
53 Todos los componentes que desea incluir en su computadora
54 </p>
55 <table>
56 <tr>
57 <td>
58 DVD-ROM
59 </td>
60 <td>
61 <input type="checkbox" name="chkDVD" value="DVD-ROM" />
62 </td>
63 </tr>
64 <tr>
65 <td>
66 CD-ROM
67 </td>
68 <td>
69 <input type="checkbox" name="chkCD" value="CD-ROM" />
70 </td>
71 </tr>
72 <tr>
73 <td>
74 USB Drive
75 </td>
76 <td>
77 <input type="checkbox" name="chkUSB" value="USB Drive" />
78 </td>
79 </tr>
80 </table>
81 <p>
82 Seleccione la velocidad del procesador
83 </p>
84 <table>
85 <tr>
86 <td>
87 <input type="radio" name="radiovelocidad" checked="checked"
88 value="3.8 GHz" onclick="return verVelocidad_onclick(0)" />
89
90 <td>
91 3.8 GHz
92 </td>
93 <td>
94 <input type="radio" name="radiovelocidad" value="4.8 GHz"
95 onclick="return verVelocidad_onclick(1)" />
96 </td>
97 <td>
98 4.8 GHz
99 </td>
100 <td>
101 <input type="radio" name="radiovelocidad" value="6 Ghz"
102 onclick="return verVelocidad_onclick(2)" />
103 </td>
104 <td>
105 6 GHz
106 </td>
107 </tr>
108 </table>
109 <input type="button" value="Verificar Formulario" name="btnCheck"
110 onclick="return verificarBoton_onclick()" />
111 </form>
112 </body>
113 </html>
Resultado:
Tenga en cuenta que el procesador de 4,8 GHz está fuera de stock, por lo que
si usted elige, un cuadro de mensaje que dice que está fuera de las acciones, y
no se ha seleccionado el botón de radio de 4,8 GHz velocidad del procesador.
El ajuste anterior se restaura cuando el usuario cierra el cuadro de mensaje.
<table> </td>
<tr> <td>
<td> 4.8 GHz
<input type="radio" name="radiovelocidad" </td>
checked="checked" <td>
value="3.8 GHz" onclick="return <input type="radio" name="radiovelocidad" value="6
verVelocidad_onclick(0)" /> Ghz"
onclick="return verVelocidad_onclick(2)" />
<td> </td>
3.8 GHz <td>
</td> 6 GHz
<td> </td>
<input type="radio" name="radiovelocidad" value="4.8 </tr>
GHz" </table>
onclick="return verVelocidad_onclick(1)" />
Usted hace uso del evento onclick de cada objeto de radio, y cada botón se
conecta a la misma función, verVelocidad_onclick(). Pero para cada botón de
opción, se transmite un valor del índice de ese particular botón en la colección
grupo de botones de radiovelocidad. Esto hace que sea fácil determinar cuál
radio se selecciona.
function verVelocidad_onclick(indice)
{
var retornarValor = true;
usuario que se trata de que estas fuera de stock y cancelar la acción de clic
mediante el establecimiento de retornarValor a falso.
if (indice==1)
{
retornarValor = false;
alert("Lo sentimos que la velocidad del procesador no \n\
está disponible actualmente");
document.form1.radiovelocidad[indiceVelocidad].checked = true;
}
document.form1.radiovelocidad[indiceVelocidad].checked = true;
{
indiceVelocidad = indice;
}
function verificarBoton_onclick()
{
var indicecontrol;
var element;
var numerocontrol = window.document.form1.length;
var mensaje = "La velocidad de su procesador elegido es : ";
mensaje=mensaje +
document.form1.radiovelocidad[indiceVelocidad].value;
El indiceVelocidad es una variable global, que fue creado por el evento onclick
del grupo de botones de radio, contiene el índice del botón de opción
seleccionado. A continuación, se recorre a través de los elementos del
formulario.
if (element.type == "checkbox")
{
if (element.checked == true)
{
mensaje = mensaje + element.value + "\n";
}
}
}
alert(mensaje);
}
Sólo desea ver qué casillas de verificación se han comprobado, por lo que se
utiliza la propiedad type, que cada formulario HTML de elementos de objeto
tiene, para ver qué tipo de elemento que está tratando. Si el tipo es casilla de
verificación, seguirá adelante y vera si se trata de una casilla marcada. Si es
así, anexara su valor a la cadena de mensaje en mensaje. Si no es una casilla
de verificación, se puede omitir con seguridad.
1.2. ARRAYS.
Ahora vamos a mirar a un nuevo concepto algo que se llama una matriz. Una
matriz es similar a una variable normal, con el que se puede usar para contener
cualquier tipo de datos. Sin embargo, tiene una diferencia importante, que se
verá en esta operación.
La diferencia entre una variable normal y una matriz, en una matriz que puede
contener más de un elemento de datos al mismo tiempo. Por ejemplo, podría
utilizar una matriz con el nombre miMatriz para almacenar tanto los números 25
y 35. Cada lugar donde una parte de los datos se pueden almacenar en una
matriz se llama un elemento.
myArray [0] 25
myArray [1] 35
Confuso, pero que pronto se acostumbra a esto. Las matrices pueden ser muy
útiles ya que se puede almacenar la misma cantidad o el menor número de
elementos de datos en una matriz como desee.
Al igual que con las variables normales, también se puede declarar su primera
variable y luego decirle JavaScript desea que se ser una matriz. Por ejemplo:
var miArray;
myArray = new Array ();
mediante la inclusión de sus datos dentro de los paréntesis, con cada dato
separados por una coma. Por ejemplo:
var myArray = new Array ( "Rodrigo", 345, "Angelina", 112, "Gabriela", 99);
Aquí el primer elemento de los datos "Rodrigo", será puesto en la matriz con un
índice de 0. La siguiente dato, 345, se pondrá en la matriz con un índice de 1, y
así sucesivamente. Esto significa que el elemento con el nombre myArray [0]
contiene el valor "Rodrigo", el elemento con el nombre myArray [1] contiene el
valor 345, y así sucesivamente.
Tenga en cuenta que no puede utilizar este método para declarar una matriz
que contiene sólo una parte de los datos numéricos, tales como 345, porque se
supone que Javascript está declarando una matriz que contendrá 345
elementos. Esto lleva a otra forma de declarar datos en una matriz. Se puede
escribir la línea anterior como esto:
[ejemploArreglo1.html]
1 <!DOCTYPE html>
2 <html>
3 <body>
4 <script type="text/javascript">
5 var myArray = new Array();
6 myArray[0] = "Rodrigo";
7 myArray[1] = "Angelina";
8 myArray[2] = "Gabriela";
9 document.write("myArray[0] = " + myArray[0] + "<BR>");
10 document.write("myArray[2] = " + myArray[2] + "<BR>");
11 document.write("myArray[1] = " + myArray[1] + "<BR>");
12 myArray[1] = "Manuel";
13 document.write("myArray[1] cambiado por " + myArray[1]);
14 </script>
15 </body>
16 </html>
Resultado:
Ahora que tiene su matriz definido, puede almacenar algunos datos en ella.
Cada vez que se almacena un elemento de datos con un nuevo índice,
JavaScript crea automáticamente un nuevo espacio de almacenamiento para la
misma. Recuerde que el primer elemento estará en myArray [0].
Tome cada adición a la matriz a su vez y ver lo que está pasando. Antes de
agregar nada, la matriz está vacío. A continuación, se agrega un elemento de
matriz con la siguiente línea:
Puede tratar a cada posición particular en una matriz como si fuera una
variable estándar. Así que usted puede utilizar para hacer cálculos, transfieren
su valor a otra variable o matriz, y así sucesivamente. Sin embargo, si se
intenta acceder a los datos dentro de una posición de matriz antes de tener que
definir, obtendrá definido como un valor.
Esto funciona, pero no es una solución más limpia: el uso de una matriz multi-
dimensional. Hasta ahora usted tiene hs estado utilizando matrices
unidimensionales. En estas matrices de cada elemento se específica por un
solo índice es decir, una dimensión. Así, tomando el ejemplo anterior, se puede
ver Nombre1 está en el índice 0, edad1 está en el índice 1, y así.
Una matriz multidimensional está formada por dos o más índices para cada
elemento. Por ejemplo, esta es la forma que la matriz de personal podría verse
como una matriz de dos dimensiones:
Indice 0 1 2
0 Nombre1 Nombre2 Nombre3
1 Edad1 Edad2 Edad3
2 Dirección1 Dirección2 Dirección3
[ejemploArreglo2.html]
1 <!DOCTYPE html>
2 <html>
3 <body>
4 <script type="text/javascript">
5 var personal = new Array();
6 personal[0] = new Array();
7 personal[0][0] = "Nombre0";
8 personal[0][1] = "Edad0";
9 personal[0][2] = "Direccion0";
10 personal[1] = new Array();
11 personal[1][0] = "Nombre1";
12 personal[1][1] = "Edad1";
13 personal[1][2] = "Dirección1";
14 personal[2] = new Array();
15 personal[2][0] = "Nombre2";
16 personal[2][1] = "Edad2";
17 personal[2][2] = "Dirección2";
18 document.write("Nombres : " + personal[1][0] + "<BR>");
19 document.write("Edades : " + personal[1][1] + "<BR>");
20 document.write("Direcciones : " + personal[1][2]);
21 </script>
22 </body>
23 </html>
Resultado:
Para más detalles de la segunda persona, se repite el proceso, pero esta vez
se está utilizando la matriz de personal elemento con índice 1.
Se crea detalles de una tercera persona en las próximas líneas. Ahora está
usando el elemento con índice 2 dentro de la gama de personal para crear una
nueva matriz.
myArray [0] [0] [0] [0] [0] = "Esto está yendo de las manos"
document.write (myArray [0] [0] [0] [0] [0]);
15 miFormormulario.txtNombre.focus();
16 }
17 else
18 {
19 miFormormulario.txtEdad.focus();
20 }
21 }
22 else
23 {
24 alert("Gracias por completar el formulario " + miFormormulario.txtNombre.value);
25 }
26 }
27 function txtEdad_onblur()
28 {
29 var txtEdad = document.form1.txtEdad;
30 if (isNaN(txtEdad.value) == true)
31 {
32 alert("Ingresar una edad valida");
33 txtEdad.focus();
34 txtEdad.select();
35 }
36 }
37 function txtNombre_onchange()
38 {
39 window.status = "Hola " + document.form1.txtNombre.value;
40 }
41 </script>
42 </head>
43 <body>
44 <form action="" name="form1">
45 Por favor, introduzca los siguientes datos:
46 <p>
47 Nombre:
48 <br />
49 <input type="text" name="txtNombre" onchange="txtNombre_onchange()" />
50 </p>
51 <p>
52 Edad:
53 <br />
54 <input type="text" name="txtEdad" onblur="txtEdad_onblur()"
55 size="3" maxlength="3" />
56 </p>
57 <p>
Resultado:
Por último, haga clic en el botón de comprobar los detalles y las dos cajas de
texto serán revisados para ver que ha completado. Si bien es vacía, recibirá un
mensaje que le indica que completar todo el formulario, y le enviará de nuevo a
la caja que está vacío.
</p>
<p>
Edad:
<br />
<input type="text" name="txtEdad" onblur="txtEdad_onblur()"
size="3" maxlength="3" />
</p>
<p>
<input type="button" value="Comprobar los detalles"
name="btnverificar" onclick="verificar_onclick()">
</p>
</form>
Vas a ver que para el segundo cuadro de texto (el cuadro de texto txtEdad),
que ha incluido el tamaño con el atributo maxlength dentro del elemento
<input>. Estableciendo el atributo de tamaño de 3 le da al usuario una idea de
la cantidad de texto que están esperando, y estableciendo el atributo maxlength
a 3 ayuda a asegurar que usted no excederse de grandes números
introducidos por el valor edad.
function verificar_onclick()
{
var miFormormulario = document.form1;
Esto lo hace es reducir el tamaño del código cada vez que desee utilizar el
objeto Form1. En lugar de document.form1, puede simplemente escribir
miFormormulario. Esto hace que su código un poco más fácil de leer y por lo
tanto más fácil depurar, y ahorra escribir. Cuando se establece una variable
para que sea igual a un objeto existente, en realidad crear un nuevo objeto
formulario1; En lugar de eso, simplemente, apunta la variable a la existente
objeto formulario1. Así que cuando se escribe miFormormulario.name,
if (miFormormulario.txtEdad.value == "" ||
miFormormulario.txtNombre.value == "")
{
alert("Por favor completar todo el formulario");
if (miFormormulario.txtNombre.value == "")
{
miFormormulario.txtNombre.focus();
}
else
{
miFormormulario.txtEdad.focus();
}
}
else
{
alert("Gracias por completar el formulario " + miFormormulario.txtNombre.value);
}
function txtEdad_onblur()
{
var txtEdad = document.form1.txtEdad;
Esto hace que sea aún más claro al usuario. También les permite solucionar el
problema sin necesidad de eliminar el texto primero.
if (isNaN(txtEdad.value) == true)
{
alert("Ingresar una edad valida");
txtEdad.focus();
txtEdad.select();
}}
Se podría ir más allá y comprobar que el número dentro del cuadro de texto es
en realidad una edad válida por ejemplo, 191 no es una edad válida, ni es
probable que sea 255. Sólo tiene que añadir otra sentencia if para comprobar
éstas posibilidades.
La función final es para el evento onchange del cuadro de texto txtNombre. function
txtNombre_onchange()
{
window.status = "Hola " + document.form1.txtNombre.value;
}
1 function fVerificarBlanco(valor){
2 //Buscar un espacio en blanco
3 var p=valor.indexOf(" ");
4 //Si existe
5 if(p!=-1)
6 //Retorna false
7 return false;
8 //De lo contrario retorna true
9 return true;
10 }
11
12 function fVerificarTexto(valor){
13 // Devolver la longitud del valor
14 // ingresado
15 var lvalor=valor.length;
16 // Definir una constante
17 var patron="abcdefghijklmnñopqrstuvwxyz";
18 //Convertir a mayuscula
19 patron+=patron.toUpperCase();
20 // Contatenar los acentuados
21 patron+="áéíóúÁÉÍÓÚ";
22 // Concatenar el espacio en blanco
23 patron+=" ";
24 // Recorrer la cadena
25 for(x=0;x<lvalor;x++){
26 // Extraer caracter
27 // segun la posición
28 c=valor.charAt(x);
29 // Buscar el caracter
30 p=patron.indexOf(c);
31 // Si no existe
32 if(p==-1)
33 //Retorna false
34 return false;
35 }
36 return true;
37 }
38
39 function fVerificarDomicilio(valor){
40 var patron="abcdefghijklmnñopqrstuvwxyz";
41 patron+=patron.toUpperCase();
42 patron+="áéíóúÁÉÍÓÚ";
43 patron+="0123456789";
44 patron+=".º-#/ ";
45 for(x=0;x<valor.length;x++){
46 c=valor.charAt(x);
47 p=patron.indexOf(c);
48 if(p==-1)
49 return false;
50 }
51 return true;
52 }
53
54 function fVerificarNumero(valor){
55 var lvalor=valor.length;
56 var patron="0123456789";
57 for(x=0;x<lvalor;x++){
58 c=valor.charAt(x);
59 p=patron.indexOf(c);
60 if(p==-1)
61 return false;
62 }
63 return true;
64 }
txtnom
txtape
txtdni cmdgrabar
txttel
Invocar a las
funciones creadas
en el archivo
JavaScript
EQUIPOS Y MATERIALES:
- Computadora con microprocesadores core 2 Duo ó de mayor capacidad.
- Sistema operativo Windows.
- Acceso a internet.
- Software de maquetación y desarrollo de páginas web.
ORDEN DE EJECUCIÓN:
- Métodos de ciclo de vida.
- Notas Básicas.
- Estructuras JSP de Códigos.
- Directivas declaraciones JSP Expresiones.
https://netbeans.org/downloads/
Forma de Saludo:
Forma de Respuesta:
• Clases de utilidades del lado del servidor de base de datos (ventas, carritos
de compra, y así sucesivamente). A menudo, estas clases se ajustan a la
arquitectura de componentes JavaBeans.
• Clases del lado del cliente (applets y clases de utilidad).
clases: Un directorio que contiene las clases del lado del servidor : servlets,
clases de utilidad, y componentes JavaBeans.
lib: Un directorio que contiene los archivos JAR de bibliotecas llamados por
clases del lado del servidor.
A los servicios de páginas JSP como un servlet. Por lo tanto, el ciclo de vida y
muchas de las capacidades de las páginas JSP (en particular, los aspectos
dinámicos) son determinados por la tecnología Java Servlet.
Cuando una solicitud se asigna a una página JSP, los primeros controles de
contenedor web si servlet de la página JSP es más antigua que la página JSP.
Si el servlet es más viejo, el contenedor web se traduce la página JSP en una
clase de servlet y compila la clase. Durante el desarrollo, una de las ventajas
de las páginas JSP más de servlets es que el proceso de construcción se lleva
a cabo automáticamente.
La traducción y compilación.
Durante la fase de traducción cada tipo de datos en una página JSP es tratado
de forma diferente. Los datos estáticos se transforman en código que se emiten
los datos en la secuencia de respuesta.
domain-dir/generada/jsp/j2ee-modules/WAR-NOMBRE/PageName _jsp.java
Ejecución.
Puede controlar diversos parámetros de ejecución página JSP mediante el uso
de páginas directivas. Las directivas que se refieren a amortiguar los errores de
salida y la manipulación se discuten aquí.
Buffering.
Cuando se ejecuta una página JSP, la salida escrita al objeto respuesta es
amortiguada de forma automática. Puede ajustar el tamaño de la memoria
intermedia utilizando la siguiente directiva de página:
Un búfer mayor permite más contenido a ser escrito antes de que algo sea
enviado de vuelta al cliente, proporcionando así la página JSP con más tiempo
para establecer los códigos y las cabeceras de estado apropiados o remitir a
otro recurso web. Un búfer más pequeño disminuye la carga de memoria del
servidor y permite al cliente para comenzar a recibir los datos con mayor
rapidez.
[mensaje.html]
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title></title>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6 </head>
7 <body>
8 <div>Contenido HTML</div>
9 </body>
10 </html>
[ejemplo2.jsp]
Resultado:
[miestilo.css]
1 *{
2 background-color:#cccccc;
3 color:#000000;
4 }
[ejemplo3.jsp]
1 <html>
2 <head>
3 <title>.:: ejemplo3.jsp ::.</title>
4 <style type="text/css" media="screen">
5 /*la directiva include copia el contenido de un archivo y
6 lo incrusta en la pagina*/
7 *{
8 background-color:#cccccc;
9 color:#000000;
10 }
11 </style>
12 </head>
13 <body>
14
15 <form action="respuesta.jsp" method="post">
16 Nombre:
17 <input type="text" name="nombre">
18 <br/>
19 Apellido:
20 <input type="text" name="apellido">
21 <br/>
22 Edad:
23 <input type="text" name="edad">
24
25 <br/>
26 Lenguaje preferido:
27 <select name="lenguaje">
28 <option value="java">java
29 <option value="jsp" selected>jsp
30 <option value="php">php
31 <option value="C/C++">C/C++
32 <option value="C#">C#
33 <option value="Asp">Asp
34 <option value="AS3">AS3
35 </select>
36 <br/>
37 Me gusta el:
38 <br/>
39 <input type="Radio" name="preferencia" value= "Diseño"checked>Diseño
40 <br/>
41 <input type="Radio" name= "preferencia"value="Programacion">Programacion
42 <br/>
43 <input type="Radio" name= "preferencia"value="Modelado">Modelado
44 <br/>
45 <input type="Radio" name= "preferencia"value="Gerencia">Gerencia de proyectos
46 <br/>
47
48 <p><input type="submit" value="Enviar"></p>
49 </form>
50
51 </body>
52 </html>
Resultado:
[respuesta.jsp]
1 <html>
2 <head>
3 <title>.:: respuesta.jsp ::.</title>
4 <style type="text/css" media="screen">
5 /*la directiva include copia el contenido de un archivo y lo
6 incrusta en la pagina*/
7 <%@ include file="miestilo.css" %>
8 </style>
9 </head>
10 <body>
11
12 <% // Inicio código JSP
13 /*podemos leer los datos del request a una variable
14 e imprimir los valores por pantalla */
15 String edad=(String)request.getParameter("edad");
16 String prefieres=(String)request.getParameter("preferencia");
17 out.print("tu nombre es "+ request.getParameter("nombre")+" "+
18 request.getParameter("apellido"));
19 out.print("<br/>");
20 out.print("tienes "+edad+" años");
21 out.print("<br/>");
22 out.print("tu lenguaje favorito es "+request.getParameter("lenguaje"));
23 out.print("<br/>");
24 out.print("y prefieres el(a) "+prefieres+" de un proyecto");
25 out.print("<br/>");
26 /*podemos usar los datos directamente desde el request
Resultado:
Tipos de scripting
<%
Secuencias de comandos, Lenguaje y declaraciones
%>
La directiva de página define los atributos que se aplican a toda una página
JSP.
Sintaxis de la directiva de página JSP
• import • isThreadSafe
• contentType • autoFlush
• extends • session
• info • pageEncoding
• buffer • errorPage
• language • isErrorPage
• isELIgnored
<html>
<body>
</body>
</html>
<body>
</body>
</html>
<html>
<body>
</body>
</html>
<html>
<body>
</body>
</html>
<html>
<body>
</body>
</html>
[directivas1.jsp]
1 <%@page contentType="text/html" pageEncoding="UTF-8"%>
2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
3 "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <title>.:: directivas1.jsp ::.</title>
8 </head>
9 <body bgcolor="ffffcc">
10 <center>
Inicio directiva
11 <%
12 java.util.Date FechaHora = new java.util.Date();
13 out.print("La fecha y Hora es: "+ FechaHora);
14 %>
15 </center>
16 </body>
17 </html>
Resultado:
[directivas2.jsp]
1 <%@page contentType="text/html" pageEncoding="UTF-8"%>
2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
3 "http://www.w3.org/TR/html4/loose.dtd">
4
5 <html>
6 <head>
7 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
8 <title>.:: directivas2.jsp ::.</title>
9 </head>
10 <body>
11 <%
12 String[] nombres={"Rodrigo","Angelina","Gabriela"};
13 for ( int i = 0; i < nombres.length; i ++ )
14 {
15 %>
16 <font color="green" size="<%=i+2%>">
17 a <i><%= nombres[i]%></i></font><br>
18 <% } %> Fin directiva
19 </body>
20 </html>
Resultado:
[directivas3.jsp]
1 <%@page contentType="text/html" pageEncoding="UTF-8"%>
2 <!DOCTYPE html>
3 <html>
4 <head>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6 <title>.:: directivas3.jsp ::.</title>
7 </head>
8 <body>
9 <%
10 java.util.Calendar ahora = java.util.Calendar.getInstance();
11 int hora = ahora.get(java.util.Calendar.HOUR_OF_DAY);
12 %>
13 <H1>
14 <center>
15 <b>Alumnos del ETI ,
16 <i>
17 <% if ((hora > 20) || (hora < 6)) {%>
18 buenas noches.
19 <% } else if ((hora >= 6) && (hora <=12)) {%>
20 buenos días.
Resultado:
Y así por ejemplo, los texto buenos días, buenas tardes y buenos noches
podrían escribirse en lugar de HTML podrían escribirse como JSP en la forma
out.println(“Buenos días”); out.println(“Buenas tardes”); out.println(“Buenas
noches”); .Sencillamente el objeto out con el método println indica al Motor de
JSP que escriba directamente lo que aparece entrecomilla en la salida HTML
que se devolverá al cliente. Esto es válido para cualquier marca HTML, es
decir, si escribimos out.println(“”); estaremos indicando dentro de un scriplet al
Motor que envíe al archivo HTML que se está construyendo como respuesta el
texto plano .
[directivas4.jsp]
1 <%@page contentType="text/html" pageEncoding="UTF-8"%>
2 <!DOCTYPE html>
3 <html>
4 <head>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6 <title>.:: directivas4.jsp ::.</title>
7 </head>
8 <body>
9 <center>
10 <%
11 java.util.Calendar ahora = java.util.Calendar.getInstance();
12 int numdia = ahora.get(java.util.Calendar.DAY_OF_WEEK);
13
14 if (numdia == 1 | numdia == 7)
15 { %> <p> FIN DE SEMANA!!</p> <% }
16 else
17 { %> <p> Día laborable...</p> <% } %>
18 <HR>
19 <%
20 switch(numdia) {
21 case 0: %>Sábado.<%; break;
22 case 1: %>Domingo.<%; break;
23 case 2: %>Lunes.<%; break;
24 case 3: %>Martes.<%; break;
25 case 4: %>Miércoles.<%; break;
26 case 5: %>Jueves.<%; break;
27 case 6: %>Viernes.<%; break;
28 default: %>ERROR DÍA!!.<%
29 };%>
30 </center>
31 </body>
32 </html>
Resultado:
EQUIPOS Y MATERIALES:
- Computadora con microprocesadores core 2 Duo ó de mayor capacidad.
- Sistema operativo Windows.
- Acceso a internet.
- Software de maquetación y desarrollo de páginas web.
ORDEN DE EJECUCIÓN:
- Métodos y/o procedimientos con JSP
Sintaxis:
<jsp:useBean id= "instanceName" scope= "page | request | session | application"
class= "packageName.className" type= "packageName.className"
beanName="packageName.className | <%= expression >" >
</jsp:useBean>
Resultado:
[calculadora.java]
1 package paquete_clases;
2
3 public class calculadora {
4
5 public int cubo(int n){return n*n*n;
6 }
7 }
[vercubo.jsp]
1 <jsp:useBean id="objeto" class="paquete_clases.calculadora"/>
2
3 <%
4 int resultado = objeto.cubo(5);
5 out.print("cubo de 5 es "+ resultado);
6 %>
Resultado:
[alumnos.java]
1 package paquete_clases;
2
3 public class alumnos {
4 private String nombre;
5 private String apellido;
6 private String direccion;
7 private String telefono;
8
9 public void setNombre(String nombre)
10 {
11 this.nombre=nombre;
12
13 }
14 public String getNombre()
15 {
16 return(nombre);
17 }
18
19 public void setApellido(String apellido)
20 {
21 this.apellido=apellido;
22 }
23 public String getApellido()
24 {
25 return(apellido);
26 }
27
28 public void setDireccion(String direccion)
29 {
30 this.direccion=direccion;
31 }
32
33 public String getDireccion()
34 {
35 return(direccion);
36 }
37 public void setTelefono(String telefono)
38 {
39 this.telefono=telefono;
40 }
41 public String getTelefono()
42 {
43 return(telefono);
44 }
45 }
[verificaAlumnos.jsp]
1 <html>
2 <head>
3 <title>Alumnos</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
5 </head>
6
7 <jsp:useBean
8 id="alum" Invocar la clase
9 class="paquete_clases.alumnos"
10 scope="application"
11 />
12
13 <body bgcolor="#CCCCCC">
14
15 <div Id="scroll">
16 <br>
17 <table border="0" cellpadding="0" cellspacing="1" width="100%">
18 <tr>
19 <td width="40%" align="center" bgcolor="#cccccc"><font face="Arial"
20 color="#FFFFFF"><b><font face="Georgia, Times New Roman, Times,
21 serif">Resultados</font></b></font></td>
22 <tr>
Activar las
23 </tr>
propiedades
24 </table>
25
26 <br>
27 <jsp:setProperty name="alum" property="nombre" param="nombre"/>
28 <jsp:setProperty name="alum" property="apellido" param="apellido"/>
29 <jsp:setProperty name="alum" property="direccion" param="direccion"/>
30 <jsp:setProperty name="alum" property="telefono" param="telefono"/>
31
32 <% alum.setNombre("Rodrigo"); %>
33 <% alum.setApellido("Saenz"); %> Asignar valor
34 <% alum.setDireccion("Av...."); %>
35 <% alum.setTelefono("5751069"); %>
36
<p align="center"><strong><font face="Georgia, Times New Roman, Times,
37 serif"
38 color="#000099">El
39 alumno</font><font face="Arial" color="#408080" >
40 <jsp:getProperty name="alum" property="nombre" />
41 <jsp:getProperty name="alum" property="apellido" />
<font face="Georgia, Times New Roman, Times, serif"
42 color="#000099">se
43 registro correctamente!!!</font> </font></strong></p>
44
45
<p align="center"><strong><font face="Arial" color="#408080" > <font
46 face="Georgia,
47 Times New Roman, Times, serif" color="#000099">Se
48 ha generado un nuevo alumno</font>
49 <jsp:getProperty name="alum" property="nombre" />
Resultado:
1 package paquete_clases;
2
3 public class Estudiante implements java.io.Serializable
4 {
5 private String nombre;
6 private String numeroMatricula;
7 public Estudiante()
8 {
9 // código de inicialización
10 }
11
12 public String getNombre()
13 {
14 return nombre;
15 }
16
17 public void setNombre(String nombre)
18 {
19 this.nombre = nombre;
20 }
21
22 public String getNumeroMatricula()
23 {
24 return numeroMatricula;
25 }
26
27 public void setNumeroMatricula(String numeroMatricula)
28 {
29 this.numeroMatricula = numeroMatricula;
30 }
31 }
[formulario.jsp]
1 <html>
2 <head>
3 <title> .:: ::.</title>
4 </head>
5 <body>
6
7 <form action="EstudianteBean.jsp" method="Post">
8
9 Nombre:<input type="text" name="nombre"><br>
10 Numero matrícula:<input type="text" name="numeroMatricula"><br>
11
12 <input type="Submit">
13 <input type="Reset">
14
15 </form>
16 </body>
17 </html>
Resultado:
[EstudianteBean.jsp]
1 <jsp:useBean id="Est" class="paquete_clases.Estudiante" />
2
3 <jsp:setProperty name="Est" property="*" />
4
5 <html>
6 <head>
7 <title>.:: ::.</title>
8 </head>
9 <body>
10 <h1>Datos del estudiante</h1>
11 <br><br>
12 Nombre: <%=Est.getNombre() %>
13 <br>
14 Número de matrícula: <%=Est.getNumeroMatricula() %><br>
15 </body>
16 </html>
Resultado:
<%=Est.getNombre()%>
Caso de no ser así (no coinciden los nombres de las propiedades y de los
campos del formulario), la asignación tendríamos que hacerla de manera
manual:
IV. SERVLET.
EQUIPOS Y MATERIALES:
- Computadora con microprocesadores core 2 Duo ó de mayor capacidad.
- Sistema operativo Windows.
- Acceso a internet.
- Software de maquetación y desarrollo de páginas web.
ORDEN DE EJECUCIÓN:
- Composición y sus funciones.
- Programación de esquema de funcionamiento.
- Gestión de peticiones Get – Post Funcionalidad Servlet.
- Ejecución de un servlet a través de un formulario JSP.
Los servlets Java a menudo sirven al mismo propósito que los programas
implementados mediante el Common Gateway Interface (CGI). Pero Servlets
ofrecen varias ventajas en comparación con el CGI.
Servlets Arquitectura:
Siguiente diagrama muestra la posición de Servelts en una aplicación Web.
Servlets Tareas:
Servlets realizan las siguientes tareas principales:
• Leer los datos explícitos enviados por los clientes (navegadores). Esto
incluye un formulario HTML de una página Web o también podría provenir de
un programa cliente HTTP personalizado applet.
• Leer los datos de la solicitud HTTP implícitos enviadas por los clientes
(navegadores). Esto incluye galletas, tipos de medios y sistemas de
compresión el navegador entiende, y así sucesivamente.
• Procesar los datos y generar los resultados. Este proceso puede requerir
hablar con una base de datos, realice una llamada RMI o CORBA, se invoca
un servicio Web, o el cálculo de la respuesta directa.
• Enviar los datos explícitos (es decir, el documento) a los clientes
(navegadores). Este documento puede ser enviado en una variedad de
formatos, incluyendo texto (HTML o XML), binarios (imágenes GIF), Excel,
etc.
• Enviar la respuesta HTTP implícita a los clientes (navegadores). Esto incluye
decirle a los navegadores u otros clientes qué tipo de documento se
devuelve (por ejemplo, HTML), el establecimiento de las galletas y los
parámetros de almacenamiento en caché, y otras tareas.
Servlets Paquetes:
Java Servlets son clases Java se ejecutan por un servidor web que tiene un
intérprete, que es compatible con la especificación de Java Servlet.
Java servlets se han creado y compilado al igual que cualquier otra clase de
Java. Después de instalar los paquetes de servlets y añadirlos a la ruta de
clases de su ordenador, puede compilar con servlets compilador Java del JDK
o cualquier otro compilador actual.
Ciclo de Vida
Un ciclo de vida servlet se puede definir como el proceso completo desde su
creación hasta la destrucción. Los siguientes son los caminos seguidos por un
servlet
El método init():
El método init está diseñado para ser llamado sólo una vez. Se llama cuando
se crea por primera vez el servlet, y no volvió a llamar para cada petición del
usuario. Por lo tanto, se utiliza para las inicializaciones de una sola vez, al igual
que con el método init de applets.
El método service():
El método de servicio() es el principal método para llevar a cabo la tarea actual.
El contenedor de servlets (es decir, el servidor web) llama al método service()
para manejar las peticiones procedentes del cliente (navegadores) y para
escribir la respuesta con formato de vuelta al cliente.
Cada vez que el servidor recibe una petición de un servlet, el servidor genera
un nuevo hilo y llamadas de servicio. El método de servicio () comprueba el tipo
de petición HTTP (GET, POST, PUT, DELETE, etc.) y llama a doGet, doPost,
doPut, doDelete, etc. Los métodos según el caso.
El Método doGet()
Una petición GET resultados de una solicitud normal para una URL o desde un
formulario HTML que no tiene ningún método específico y debe ser manejado
por el método doGet ().
El doPost () Método
Una solicitud POST resultados de un formulario HTML que enumera
específicamente POST como el método y debe ser manejado por el método
doPost ().
Después se llama el método destroy (), el objeto servlet está marcado para la
recolección de basura. La definición del método de destruir el aspecto
siguiente:
Arquitectura DIGRAM:
La siguiente figura muestra un escenario típico ciclo de vida del servlet.
• init() : Es invocado por el servidor cuando el servlet se usa por primera vez
(cuándo sucede esto depende del servidor).
• doGet(HttpServletRequest req, HttpServletResponse res) throws
ServletException, IOException: Es invocado cada vez que un servlet es
contactado po un requerimiento GET (por default).
• doPost(HttpServletRequest req, HttpServletResponse res) throws
ServletException, IOException
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
El parámetro HttpServletRequest.
HttpServletRequest es la clase del primer parametro que reciben los métodos
doGet y doPost. Provee acceso a:
• Información acerca del cliente (por ejemplo, los parámetros que envió, la
versión del protocolo que está usando, la IP del cliente, etc.
• Además da acceso a un, ServletInputStream que puede ser usado por el
servidor para recibir información adicional (por ejemplo un archivo que el
cliente quiere “uplodear” cuando se ha usado el método POST o PUT.
El parámetro HttpServletResponse
• HttpServletResponse es la clase del segundo argumento que reciben doGet
y doPost.
• Provee métodos para :
o Decirle al browser cuál es el tipo MIME de la respuesta que se le va a dar
al cliente.
o Obtener un objeto ServletOutputStream y un PrintWriter través del cual
podemos mandar código HTML dinámicamente al cliente.
o Mandar otras informaciones importantes (cookies, redireccionamineto,
refresco, etc…)
2. Ingresar el nombre:
5. Resultado:
1 import java.io.IOException;
2 import java.io.PrintWriter;
3 import javax.servlet.ServletException;
4 import javax.servlet.annotation.WebServlet;
5 import javax.servlet.http.HttpServlet;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 @WebServlet(urlPatterns = {"/EjemploServlet2"})
10 public class EjemploServlet2 extends HttpServlet {
11 // Inicializar el contador
12 int contador = 0;
13
14 public void doGet ( HttpServletRequest req,
15 HttpServletResponse resultado) throws
16 ServletException, IOException {
17 // Incrementa el contador cada vez que se ejecuta doGet
18 contador++;
19 // Totalmente necesario
20 PrintWriter out = resultado.getWriter();
21 resultado.setContentType("text/html");
22 //Mandar (imprimir) info al browser
23 out.println("<H1> Web con Contador de visitas - ETI</H1>");
24 out.println("<HR>");
25 out.println("Se accede a este servlet "+ contador+" veces ");
26 out.println("<HR>");
27 out.println("El Ip de tu pc es: "+req.getRemoteHost());
28 out.println("<HR>");
29 out.close();
30 }
31 }
Resultado:
[ContadorConFichero.java]
1 import java.io.*;
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import javax.servlet.ServletException;
5 import javax.servlet.annotation.WebServlet;
6 import java.io.IOException;
7
8 @WebServlet(urlPatterns = {"/ContadorConFichero"})
9 public class ContadorConFichero extends HttpServlet {
10 //Inicializar el contador
11 int contador = 0;
12
13 public void init() {
14 try {
15 //Tratar de abrir el archivo
16 BufferedReader in = new BufferedReader(new FileReader("contador.txt"));
17 //Leer una linea
18 String l = in.readLine();
19 //Convertir lo leido a valor entero
20 contador = Integer.parseInt(l);
21 }catch ( IOException e) {
22 }
23
24 }
25 public void doGet ( HttpServletRequest req,
26 HttpServletResponse res) throws
27 ServletException, IOException {
28 contador++;
29 //Despues de incrementar,
30 //abrir el archivo (sobreescribirlo)
31 PrintWriter outFile = new PrintWriter(new FileWriter("contador.txt"));
32 //Escribir el nuevo número
33 outFile.println(contador);
34 //Cerrar archivo
35 outFile.close();
Resultado:
[NumeroAleatorio.java]
1 import java.io.IOException;
2 import java.io.PrintWriter;
3 import javax.servlet.ServletException;
4 import javax.servlet.annotation.WebServlet;
5 import javax.servlet.http.HttpServlet;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 @WebServlet(urlPatterns = {"/NumeroAleatorio"})
10 public class NumeroAleatorio extends HttpServlet {
11 //Inicializacion variables para guardar
12 //La IP y el valor del máximo
13 int maxNumero = 0;
14 String maxIP = "";
15
16 public void doGet(HttpServletRequest request,
17 HttpServletResponse response) throws
18 IOException, ServletException {
19 //Generación número aleatorio
20 int aleatorio = (int)(1 + Math.random()*100);
21 //Obtencion ip del cliente
22 String ip = request.getRemoteAddr();
23 //Actualización de los datos
24 //del máximo generado
25 if (aleatorio > maxNumero) {
26 maxNumero = aleatorio;
27 maxIP = ip;
28 }
29 //Enviar info al cliente
30 response.setContentType("text/html");
31 PrintWriter out = response.getWriter();
32 out.println("<h1> Bienvenido </h1><br>");
33 out.println("<h2> Su dirección IP es "+ ip+ "<br>");
34 out.println("Su número es "+aleatorio+"<br><br>");
35 out.println("El numero mayor generado es "+maxNumero);
36 out.println("<br>Fue generado para "+maxIP);
37 out.close();
38 }
39 }
Resultado:
10 //--------------------------------------
11
12 @WebServlet(urlPatterns = {"/ejemploGetPost"})
13 public class ejemploGetPost extends HttpServlet {
14
15 public void init(ServletConfig conf)
16 throws ServletException {
17 super.init(conf);
18 }
19
20 public void doGet(HttpServletRequest req, HttpServletResponse res)
21 throws ServletException, IOException
22 {
23 res.setContentType("text/html");
24 PrintWriter out = res.getWriter();
25 out.println("<html>");
26 out.println("<body>");
27 out.println("<h1> Aquì llamamos a GET</h1>");
28 out.println("</body>");
29 out.println("</html>");
30 }
31
32 public void doPost(HttpServletRequest req, HttpServletResponse res)
33 throws ServletException, IOException
34 {
35 res.setContentType("text/html");
36 PrintWriter out = res.getWriter();
37 out.println("<html>");
38 out.println("<body>");
39 out.println("<h1> Aquì llamamos a POST</h1>");
40 out.println("</body>");
41 out.println("</html>");
42 }
43 }
7 </body>
8 </html>
[ejemplopost.html]
1 <html>
2 <body>
3 <h1>Metodo POST</h1>
4 <form method="POST" action="/aplicacionweb1/ejemploGetPost">
5 <input type="submit">
6 </form>
7 </body>
8 </html>
Resultado:
[formulario.html]
1 <html>
2 <title>.:: ::.</title>
3 <body>
4 <h1>Formulario</h1>
5 <form method="POST" action="/aplicacionweb1/llamarFormulario">
6 Nombre: <INPUT TYPE="TEXT" NAME="nombre"><BR>
7 Primer Apellido:<INPUT TYPE="TEXT" NAME="apellido1"><BR>
8 Segundo Apellido:<INPUT TYPE="TEXT" NAME="apellido2"><BR>
9 <hr>
10 Correo electronico: <INPUT TYPE="TEXT" NAME="email"><BR>
11 Clave: <INPUT TYPE="PASSWORD" NAME="clave"><BR>
12 <hr>
13 Comentario: <TEXTAREA NAME="comenta" ROWS=3 COLS=40>
14 </TEXTAREA><BR>
15 <hr>
16 Sexo:<BR>
17 <INPUT TYPE="RADIO" NAME="sexo" VALUE="hombre">Hombre<BR>
18 <INPUT TYPE="RADIO" NAME="sexo" VALUE="mujer">Mujer<BR>
19
20 Areas de interes:<br>
21 <SELECT NAME="intereses" MULTIPLE>
22 <OPTION>Informatica</OPTION>
23 <OPTION>Derecho</OPTION>
24 <OPTION>Matematicas</OPTION>
25 <OPTION>Fisica</OPTION>
26 <OPTION>Musica</OPTION>
27 </SELECT>
28
29 <center><input type="submit" value="Enviar"></center>
30 </form>
31 </body>
32 </html>
Resultado:
[llamarFormulario.java]
1 import java.io.IOException;
2 import java.io.PrintWriter;
3 import javax.servlet.ServletException;
4 import javax.servlet.annotation.WebServlet;
5 import javax.servlet.http.HttpServlet;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8 //--------------------------------------
9 import javax.servlet.ServletConfig;
10 //--------------------------------------
11
12 @WebServlet(urlPatterns = {"/llamarFormulario"})
13 public class llamarFormulario extends HttpServlet {
14 public void init(ServletConfig conf)
15 throws ServletException {
16 super.init(conf);
17 }
18
19 public void doGet(HttpServletRequest req, HttpServletResponse res)
20 throws ServletException, IOException {
21 res.setContentType("text/html");
22 PrintWriter out = res.getWriter();
23
24 out.println("<html>");
25 out.println("<body>");
26 out.println("<h1>Parametros del servlet desde un formulario HTML</h1>");
27 out.println("<br> Nombre:"+req.getParameter("nombre") );
28 out.println("<br> Primer apellido:"+req.getParameter("apellido1") );
29 out.println("<br> Segundo apellido:"+req.getParameter("apellido2") );
30 out.println("<br> Correo electrónico:"+req.getParameter("email") );
31 out.println("<br> Contraseña:"+req.getParameter("clave") );
32 out.println("<br> Comentario:"+req.getParameter("comenta") );
33 out.println("<br> Sexo:"+req.getParameter("sexo") );
34 out.println("<br> Areas de interés:"+req.getParameter("intereses") );
35 out.println("</body>");
36 out.println("</html>");
37 }
38
39 public void doPost(HttpServletRequest req, HttpServletResponse res)
40 throws ServletException, IOException {
41 doGet(req, res);
42 }
43 }
Resultado:
El código sería:
[llamarFormulario2.java]
1 import java.io.IOException;
2 import java.io.PrintWriter;
3 import javax.servlet.ServletException;
4 import javax.servlet.annotation.WebServlet;
5 import javax.servlet.http.HttpServlet;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8 //--------------------------------------
9 import javax.servlet.ServletConfig;
10 import java.util.*;
11 //--------------------------------------
12
13 @WebServlet(urlPatterns = {"/llamarFormulario2"})
14 public class llamarFormulario2 extends HttpServlet {
15 public void init(ServletConfig conf)
16 throws ServletException
17 {
18 super.init(conf);
19 }
20
21 public void doGet(HttpServletRequest request,
22 HttpServletResponse response)
23 throws ServletException, IOException {
24
25 response.setContentType("text/html");
26 PrintWriter out = response.getWriter();
27
28 //Escribimos el principio de la página HTML
29 out.println("<html>");
30 out.println("<body>");
31 out.println("<h1>Parámetros del servlet desde un formulario HTML</h1>");
32
33 //cogemos los nombres de los parametros
34 Enumeration paramNames = request.getParameterNames();
35
36 //vamos mostrando los parámetros en unwhile
37 while(paramNames.hasMoreElements()) {
38 //cogemos el siguiente parámetro
39 String paramName = (String)paramNames.nextElement();
40
41 //Mostramos el nombre del parámetro
42 out.print(paramName + " = ");
43
44 //Cogemos los valores del parámetro
45 String[] paramValues = request.getParameterValues(paramName);
46
47 //Miramos si tiene más de un valor
48 if (paramValues.length == 1) {
49 //Si tiene un sólo valor, miramos si está vacío o no
50 String paramValue = paramValues[0];
51 if (paramValue.length() == 0)
52 out.println("<i>Sin valor</i><br>");
53 else
54 out.println(paramValue + "<br>");
55 }
56 else {
57 //Si tiene más de un sólo valor, los mostramos
58 for(int i=0; i<paramValues.length; i++)
59 out.println(paramValues[i] + ", ");
60 out.println("<br>");
61 }
62 }//end while
63
64 //Escribimos el final de la página HTML
65 out.println("</body>");
66 out.println("</html>");
67 }
68
69 public void doPost(HttpServletRequest request,
70 HttpServletResponse response)
71 throws ServletException, IOException {
72 doGet(request, response);
73 }
74 }
Resultado:
V. SESIONES.
EQUIPOS Y MATERIALES:
- Computadora con microprocesadores core 2 Duo ó de mayor capacidad.
- Sistema operativo Windows.
- Acceso a internet.
- Software de maquetación y desarrollo de páginas web.
ORDEN DE EJECUCIÓN:
- Interface HttpSession y Métodos.
Hay varias maneras a través del cual podemos ofrecer identificador único de
solicitud y respuesta.
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>.:: ::.</title>
5 </head>
6 <body>
7
8 <form action="/aplicacionweb1/IngresarAcceso" method="post">
9
10 Usuario: <input type="text" name="usuario">
11 <br>
12 Clave: <input type="password" name="clave">
13 <br>
14 <input type="submit" value="Ingresar">
15 </form>
16 </body>
17 </html>
1 // Agregar librerias
2 import java.io.IOException;
3 import java.io.PrintWriter;
4 import javax.servlet.RequestDispatcher;
5 import javax.servlet.ServletException;
6 import javax.servlet.annotation.WebServlet;
7 import javax.servlet.http.Cookie;
8 import javax.servlet.http.HttpServlet;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 // Definir la ruta de acceso
12 @WebServlet(urlPatterns = {"/IngresarAcceso"})
13 //Crear la clase principal
14 public class IngresarAcceso extends HttpServlet {
15 //Declarar los sgtes atributos
16 private static final long serialVersionUID = 1L;
17 private final String usuarioID = "rodrigo";
18 private final String claveID = "12345678";
19 //Crear el mètodo
20 protected void doPost(HttpServletRequest request,
21 HttpServletResponse response) throws ServletException,
22 IOException {
23 // Obtener los parámetros de solicitud de ID de usuario y la contraseña
24 String varusuario = request.getParameter("usuario");
25 String varclave = request.getParameter("clave");
26 //Evaluar datos
27 if(usuarioID.equals(varusuario) && claveID.equals(varclave)){
28 //Declarar el cookie
29 Cookie loginCookie = new Cookie("user",varusuario);
30 // Establecer la galleta expire en 3 minutos
31 loginCookie.setMaxAge(3*60);
32 // Se agrega el cookie en la memoria RAM
33 response.addCookie(loginCookie);
34 //Redireccionar hacia otra pàgina
35 response.sendRedirect("verificar.jsp");
36 }else{
37 // Si los datos no son correctos
38 // Se envia un mensaje por pantalla
RequestDispatcher rd =
39 getServletContext().getRequestDispatcher("/FormularioAcceso.html");
40 PrintWriter imprimir= response.getWriter();
41 imprimir.println("<font color=red>Usuario o contraseña son incorrectas.</font>");
42 rd.include(request, response);
43 }
44 }
45 }
44 response.sendRedirect("FormularioAcceso.html");
45 }
46 }
Formulario de acceso:
19 return importe;
20 }
21 public void setImporte(double importe) {
22 this.importe = importe;
23 }
public Producto(int id, String concepto, double
24 importe) {
25 super();
26 this.id = id;
27 this.concepto = concepto;
28 this.importe = importe;
29 }
30 public Producto() {
31 super();
32 }
33
34 }
1 import java.io.IOException;
2 import java.io.PrintWriter;
3 import javax.servlet.ServletException;
4 import javax.servlet.annotation.WebServlet;
5 import javax.servlet.http.HttpServlet;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8 //-----Agregar-------------------------
9 import javax.servlet.http.HttpSession;
10 //-------------------------------------
11 @WebServlet(urlPatterns = {"/crearSesion"})
12 public class crearSesion extends HttpServlet {
13
14 private static final long serialVersionUID = 1L;
15
protected void doGet(HttpServletRequest request, HttpServletResponse
16 response)
17 throws ServletException, IOException {
18
19 HttpSession misession= request.getSession(true);
20 Producto miproducto= new Producto(1,"telefono",300);
21 misession.setAttribute("producto",miproducto);
22 PrintWriter pw= response.getWriter();
23 pw.println("<html><body>Producto en session</body></html>");
24 pw.close();
25
26 }
27 }
Resultado:
1 import java.io.IOException;
2 import java.io.PrintWriter;
3 import javax.servlet.ServletException;
4 import javax.servlet.annotation.WebServlet;
5 import javax.servlet.http.HttpServlet;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8 //-----Agregar-------------------------
9 import javax.servlet.http.HttpSession;
10 //-------------------------------------
11
12 @WebServlet(urlPatterns = {"/verSesion"})
13 public class verSesion extends HttpServlet {
14
15 private static final long serialVersionUID = 1L;
16
protected void doGet(HttpServletRequest request, HttpServletResponse
17 response)
18 throws ServletException, IOException {
19 HttpSession misession= (HttpSession) request.getSession();
20
21 Producto miproducto= (Producto) misession.getAttribute("producto");
22
23 PrintWriter pw= response.getWriter();
pw.println("<html><body>"+ miproducto.getId()+ ","
24 +miproducto.getConcepto()+","
25 + miproducto.getImporte());
26 pw.close();
27 }
28 }
Resultado:
EQUIPOS Y MATERIALES:
- Computadora con microprocesadores core 2 Duo ó de mayor capacidad.
- Sistema operativo Windows.
- Acceso a internet.
- Software de maquetación y desarrollo de páginas web.
ORDEN DE EJECUCIÓN:
- Definir URL del servidor.
- Carga del driver.
- Establecer conexión.
- Crear un Statement.
- Ejecutar sentencias.
El API JDBC (Java Database Connectivity) define las interfaces y clases para
escribir aplicaciones de bases de datos en Java haciendo conexiones de base
de datos.
El uso de JDBC puede enviar declaraciones SQL, PL / SQL para casi cualquier
base de datos relacional.
JDBC es una API de Java para ejecutar sentencias SQL y es compatible con la
funcionalidad básica de SQL. Proporciona acceso RDBMS por lo que le permite
incrustar SQL dentro del código Java. Debido a que Java puede ejecutarse en
un cliente ligero, applets incrustados en páginas Web pueden contener código
JDBC descargable para permitir el acceso de base de datos remota.
JDBC Arquitectura.
Antes de crear una conexión JDBC de Java a la base de datos, primero debe
importar el paquete java.sql.
import java.sql. *; La estrella (*) indica que todas las clases en el paquete java.sql se
van a importar.
try {
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver”); // Este es el driver
}
catch(Exception x){
System.out.println( “Aquí un mensaje de error” );
}
Una conexión JDBC representa una sesión / conexión con una base de datos
específica. En el contexto de una conexión, SQL, declaraciones PL / SQL se
ejecutan y se devuelven los resultados. Una aplicación puede tener una o más
conexiones con una sola base de datos, o puede tener muchas conexiones con
diferentes bases de datos. Un objeto de conexión proporciona información de
metadatos es decir, acerca de las bases de datos, tablas y campos. También
contiene métodos para hacer frente a las transacciones.
JDBC URL
try{
Connection dbConexion=DriverManager.getConnection(url,”loginName”,”Password”)
}
catch( SQLException x ){
System.out.println( “Un mensaje de error” );
}
[probarConexionMysql.java]
39 </form>
40 </body>
41 </html>
Resultado:
Linea 10, 11,12: Los parametros que recibe la clase son: database (nombre del
database), servername (nombre o ip del database server), port (puerta de
conexión, en el caso de MYSQL generalmente es 3306), username y
password.
Lineas 9 a 14: Construimos una cadena de caracteres llamada url, que será
utilizada luego para abrir la conexión. La estructura de este texto es estandard,
solo hay que intercalar los parametros recibidos.
El objeto Statement (sentencia) sirve para procesar una sentencia SQL estática
y obtener los resultados producidos por ella. Solo puede haber un ResultSet
abierto para cada objeto Statement en un momento dado. Todos los métodos
statement que procesan una sentencia SQL cierran implícitamente el ResultSet
actual de una sentencia si existe uno abierto.
Crear sentencias
Los objetos Statement se crean a partir de objetos Connection con el método
createStatement. Por ejemplo, suponiendo que ya exista un objeto Connection
denominado conn, la siguiente línea de código crea un objeto Statement para
pasar sentencias SQL a la base de datos:
ResultSet.CONCUR_UPDATEABLE);
Procesar sentencias.
El proceso de sentencias SQL con un objeto Statement se realiza mediante los
métodos executeQuery(), executeUpdate() y execute().
Nota: si una sentencia SQL que se procesa con el método executeQuery no devuelve
un ResultSet, se lanza una SQLException.
El método cancel.
Los métodos del controlador JDBC nativo están sincronizados para evitar que
dos hebras que se ejecutan en el mismo objeto provoquen daños en el mismo.
Una excepción a esta norma la representa el método cancel. Una hebra puede
utilizar el método cancel para detener una sentencia SQL de larga ejecución en
otra hebra que opera sobre el mismo objeto. El controlador JDBC nativo no
puede obligar a la hebra a detenerse; solo puede solicitarle que detenga la
tarea que estaba realizando. Por esta razón, una sentencia cancelada tarda
tiempo en detenerse. El método cancel puede utilizarse para detener consultas
SQL incontroladas en el sistema.
PreparedStatements.
Las PreparedStatements amplían la interfaz Statement y proporcionan soporte
para añadir parámetros a sentencias SQL.
Las sentencias SQL que se pasan a la base de datos pasan por un proceso de
dos pasos al devolver los resultados al usuario. Primero se preparan y, a
continuación, se procesan. Con los objetos Statement, estas dos fases
aparecen como una sola en las aplicaciones. Las PreparedStatements
permiten independizar estos dos procesos. El paso de preparación se produce
cuando se crea el objeto, y el paso de proceso se produce cuando se llama a
los métodos executeQuery, executeUpdate o execute en el objeto
PreparedStatement.
Procesar PreparedStatements.
El proceso de sentencias SQL con un objeto PreparedStatement se realiza
mediante los métodos executeQuery, executeUpdate y execute, al igual que el
proceso de objetos Statement. A diferencia de las versiones de Statement, no
se pasan parámetros en estos métodos debido a que la sentencia SQL ya se
ha suministrado al crear el objeto. Dado que PreparedStatement amplía
Statement, las aplicaciones pueden intentar llamar a versiones de los métodos
executeQuery, executeUpdate y execute que toman una sentencia SQL. Esta
operación provoca el lanzamiento de una excepción SQLException.
describe nombre_tabla;
Describir la estructura de campos de una tabla
create database nombre_base; Crear una base de datos
Creación de una tabla.
[temporary] --> la tabla existirá mientras exista la conexión con el cliente actual o
hasta que se
emita la instrucción drop table.
[if no exist] --> Si existe la tabla no se crea una nueva.
Generales:
null --> admite valores nulos
no null --> rechaza dejar el campo en blanco
default --> permite establecer un valor por defecto
Columnas numéricas:
auto_increment --> para generar identificadores únicos o valores en serie.
unisgned --> rechazo de valores negativos
Cadena:
binary --> trata los valores como cadenas binarias (campos char y varchar)
Cláusulas3:
primary key --> columna indexada para búsqueda rápida. Clave principal, solo
Los apartados para crear tablas Las opciones de tipo de campo son:
son:
tinyint --> 1 byte
Generales: smallint --> 2 byte
null --> admite valores nulos mediumint --> 3 byte
no null --> rechaza dejar el campo en int --> 4 byte
blanco bigint --> 8 byte
default --> permite establecer un valor float --> 4 byte
por defecto double --> 8 byte
Columnas numéricas: decimal --> variable
auto_increment --> para generar char(n) --> cadena de caracteres de longitud fija
identificadores únicos o valores en varchar(n) --> cadena de caracteres de longitud
serie. variables
unisgned --> rechazo de valores tinyblob --> objeto binario largo (muy pequeño)
negativos blob --> objeto binario largo (pequeño)
Cadena: mediumblob --> objeto binario largo (medio)
binary --> trata los valores como longblob --> objeto binario largo (grande)
cadenas binarias (campos char y tinytext --> cadena de texto muy pequeña
varchar) text --> cadena de texto pequeña
Cláusulas3: mediumtext --> cadena de texto media
primary key --> columna indexada para longtext --> cadena de texto larga
búsqueda rápida. Clave principal, solo enum --> una enumeración
puede haber una set --> un conjunto
unique --> crea un índice con valores date --> valor fecha (aaaa-mm-dd)
únicos time --> valor de hora (hh-mm-ss)
index, key --> son sinónimos y crean datetime --> valor de fecha y hora
índices que pueden contener valores timestamp --> valor de lapso de tiempo
repetidos. (aaaammddhhmmss)
year --> valor de año
Select: Permite recuperar filas seleccionadas de una o más tablas también pueden
utilizarse para recuperar filas calculadas, sin referencia a alguna tabla.
Y además nos permite consultar los datos almacenados en una o más tablas de la base de
datos
SELECT: Esta palabra clave nos indica que la consulta que vamos a realizar es de
selección.
ALL: Este nos indica que seleccionaremos todos los valores, generalmente no se
especifica, ya que viene por defecto.
DISTINCT: Nos indica que queremos seleccionar solo valores distintos.
FROM: Indicamos la o las tablas desde donde queremos recuperar los datos, cuando
existe más de una tabla a la consulta se le denomina "consulta combinada" o "join", en
este tipo de consultas es necesario aplicar una condición de combinación, a través de la
consulta WHERE.
WHERE: Nos especifica una condición que debe cumplirse para que los datos sean
devueltos por la consulta; a su vez, este admite operadores lógicos como AND y OR.
GROUP BY: Este nos especifica la agrupación que le vamos a dar a los datos, se usa
siempre en combinación de funciones agregadas.
HAVING: Nos da una condición que se debe cumplir para los datos, y especifica una
condición que debe cumplirse para que los datos sean devueltos por la consulta, su
funcionamiento es similar al del WHERE, pero aplicado a un conjunto de resultados
devueltos por la consulta. Este deba aplicarse siempre junto a GROUP BY, y los
contenidos deben ser referidos a los contenidos en ella.
ORDER BY: Presenta el resultado ordenado de las columnas indicadas, el orden se puede
presentar de forma ascendente (ASC), el cual generalmente se presenta por defecto o de
manera predeterminada; y en forma descendente (DESC).
ALTER: Modificación de la estructura de las tablas, como renombrar la tabla o variar la
estructura de la tabla de datos.
1. Crear la BD en MYSQL.
Resultado:
11 /*procedimiento de la conexion*/
12 try{
13 Class.forName(controlador);
14 conexion = DriverManager.getConnection(url,usuario,clave);
15
16 /*guardando la conexion en la session*/
17 session.setAttribute("conexion",conexion);
18 //Crear el objeto para ejecutar los querys
19 Statement st = conexion.createStatement();
20 // Crear el objeto para almacenar los datos
21 ResultSet rs = st.executeQuery("select * from estudiante" );
22 out.println("<center>");
23 out.println("<h1>Mantenimiento de la tabla Estudiante - CONSULTAR</h1>");
24 //Crear la tabla
25 out.println("<table border='1'>");
26 out.println("<td style='background-color:#cccc99;'>idCarnet</td>");
27 out.println("<td style='background-color:#cccc99;'>Nombre</td>");
28 out.println("<td style='background-color:#cccc99;'>Apellidos</td>");
29 out.println("<td style='background-color:#cccc99;'>Direccion</td>");
30 out.println("<td style='background-color:#cccc99;'>Telefono</td>");
31 out.println("<td style='background-color:#cccc99;'>Correo</td>");
32 out.println("<td style='background-color:#cccc99;'>Sexo</td>");
33 // Iniciar el bucle
34 while (rs.next())
35 {
36 out.println("<tr>");
37 //Obtener los valores de los campos
38 out.println("<td>" + rs.getString("idcarnet") + "</td>");
39 out.println("<td>" + rs.getString("nombre") + "</td>");
40 out.println("<td>" + rs.getString("apellido") + "</td>");
41 out.println("<td>" + rs.getString("direccion") + "</td>");
42 out.println("<td>" + rs.getString("telefono") + "</td>");
43 out.println("<td>" + rs.getString("correo") + "</td>");
44 out.println("<td>" + rs.getString("sexo") + "</td>");
45 out.println("</tr>");
46 }
47 out.println("</table>");
48 out.println("<a href='menuprincipal.jsp'>[ Regresar ] </a>");
49 //Cerrar todo
50 rs.close();
51 st.close();
52 conexion.close();
53 }
54 catch (Exception e)
55 {
56 e.printStackTrace();
57 }
58 %>
Resultado:
63 out.println("</FORM>");
64
65 out.println("<a href='menuprincipal.jsp'>[ Regresar ] </a>");
66
67 %>
Resultado:
27 out.println("<td style='background-color:#cccc99;'>Nombre</td>");
28 out.println("<td style='background-color:#cccc99;'>Apellidos</td>");
29 out.println("<td style='background-color:#cccc99;'>Direccion</td>");
30 out.println("<td style='background-color:#cccc99;'>Telefono</td>");
31 out.println("<td style='background-color:#cccc99;'>Correo</td>");
32 out.println("<td style='background-color:#cccc99;'>Sexo</td>");
33 out.println("<td style='background-color:#cc8899;'>Modificar</td>");
34 // Iniciar el bucle
35 while (rs.next())
36 {
37 out.println("<tr>");
38 //Obtener los valores de los campos
39 out.println("<td>" + rs.getString("idcarnet") + "</td>");
40 out.println("<td>" + rs.getString("nombre") + "</td>");
41 out.println("<td>" + rs.getString("apellido") + "</td>");
42 out.println("<td>" + rs.getString("direccion") + "</td>");
43 out.println("<td>" + rs.getString("telefono") + "</td>");
44 out.println("<td>" + rs.getString("correo") + "</td>");
45 out.println("<td>" + rs.getString("sexo") + "</td>");
46 String valor=rs.getString("idcarnet");
47 out.println("<td>");
48 out.println("<a href='modificar.jsp?idmodificar=\"" + valor +"\"'>Modificar</a>");
49 out.println("</td>");
50 out.println("</tr>");
51 }
52 out.println("</table>");
53 out.println("<a href='menuprincipal.jsp'>[ Regresar ] </a>");
54 //Cerrar todo
55 rs.close();
56 st.close();
57 conexion.close();
58 }
59 catch (Exception e)
60 {
61 e.printStackTrace();
62 }
63 %>
Resultado:
9. Crear la página JSP que envie el idcarnet como variable global y su vez
recoge dicha varible: [modificar.jsp]
Resultado:
22 out.println("<center>");
23 out.println("<h1>Mantenimiento de la tabla Estudiante - ELIMINAR</h1>");
24 //Crear la tabla
25 out.println("<table border='1'>");
26 out.println("<td style='background-color:#cccc99;'>idCarnet</td>");
27 out.println("<td style='background-color:#cccc99;'>Nombre</td>");
28 out.println("<td style='background-color:#cccc99;'>Apellidos</td>");
29 out.println("<td style='background-color:#cccc99;'>Direccion</td>");
30 out.println("<td style='background-color:#cccc99;'>Telefono</td>");
31 out.println("<td style='background-color:#cccc99;'>Correo</td>");
32 out.println("<td style='background-color:#cccc99;'>Sexo</td>");
33 out.println("<td style='background-color:#cc8899;'>Eliminar</td>");
34 // Iniciar el bucle
35 while (rs.next())
36 {
37 out.println("<tr>");
38 //Obtener los valores de los campos
39 out.println("<td>" + rs.getString("idcarnet") + "</td>");
40 out.println("<td>" + rs.getString("nombre") + "</td>");
41 out.println("<td>" + rs.getString("apellido") + "</td>");
42 out.println("<td>" + rs.getString("direccion") + "</td>");
43 out.println("<td>" + rs.getString("telefono") + "</td>");
44 out.println("<td>" + rs.getString("correo") + "</td>");
45 out.println("<td>" + rs.getString("sexo") + "</td>");
46 String valor=rs.getString("idcarnet");
47 out.println("<td>");
48 out.println("<a href='eliminar.jsp?ideliminar=\"" + valor +"\"'>Eliminar</a>");
49 out.println("</td>");
50 out.println("</tr>");
51 }
52 out.println("</table>");
53 out.println("<a href='menuprincipal.jsp'>[ Regresar ] </a>");
54 //Cerrar todo
55 rs.close();
56 st.close();
57 conexion.close();
58 }
59 catch (Exception e)
60 {
61 e.printStackTrace();
62 }
63 %>
Resultado:
11. Crear la página JSP que envie el idcarnet como variable global y su vez
recoge dicha varible: [eliminar.jsp]
Resultado:
Nota: Antes de crear la base de datos vamos a preguntar si ya fue creado, ello
evitaría que nos muestre un mensaje de error, y eso es lo que debemos evitar.
Más adelante las sentencias SQL van hacer más complicadas por ello te
muestro otra manera de ejecutar las sentencias.
• Abrir el bloc de notas y escribe la sentencia sql luego copia y pega dentro del
servidor mysql.
on delete cascade
on update cascade;
begin Instrucciones
end;
delimiter //
create procedure insertarproductos
(
codpro char(10),
nombrePro varchar(30),
descripPro varchar(100),
puPro decimal(8,2),
stockPro double,
fotoPro varchar(30))
Begin
insert into Productos values
(codpro,nombrePro,descripPro,puPro,stockPro,fotoPro);
End;
//
delimiter //
Begin
insert into facturas values
(nrofacF,codcliF,subtotalF,igvF,totalF,estadoF,
fechaemiF,fechacanF,codper);
End;
//
delimiter //
create procedure insertarDF
(
nrofac char(10),
codpro char(6),
cant int,
importe decimal(8,2))
Begin
insert into DetalleFacturas values
(nrofac, codpro,cant,importe);
End;
//
delimiter //
create procedure generarcodigo
(
nomtabla varchar(50)) -- Define un parámetro
-- Inicio
begin
-- Declarar variables
declare ultcod varchar(20);
declare total int;
declare ceros int;
declare opcion int;
declare cod varchar(20);
declare nuevo char(10);
-- Asigna un valor, el último código de la tabla
set ultcod=(select ultimocodigo from auxiliar where tabla=nomtabla);
-- Asigna un valor, el total de registros de la tabla auxiliar
set opcion = (select count(*) from auxiliar where tabla=nomtabla);
-- Evalua si existe en nombre de la tabla
if opcion > 0 then
-- Asigna un valor, se elimina los ceros y se incrementa la variable
set total = cast(substring(ultcod,2,length(ultcod)) as unsigned) + 1;
-- Obtiene el total de ceros del código
set ceros = length(ultcod) - length(total)-1;
-- Se genera el siguiente código
set nuevo = concat(left(ultcod,1),repeat("0",ceros),total);
-- Se actualiza la tabla auxiliar con el nuevo código
update auxiliar set ultimocodigo=nuevo where tabla=nomtabla;
end if;
-- Fin
end;
//
delimiter //
create function darcodigo
(
nomtabla varchar(20)) -- Define un parámetro
returns varchar(20)
begin -- Inicio
-- Declara una variable
declare cod char(10);
-- Extrae el ultimo código de la tabla especificada
-- y lo asigna a la variable cod
select ultimocodigo into cod from auxiliar where tabla=nomtabla;
-- Retorna la variable cod
return cod;
-- Fin
end;
//
delimiter //
create table auxiliar
(
tabla varchar(50),
ultimocodigo varchar(50)
);//
delimiter //
insert into auxiliar values
("clientes","C0002"),
("usuarios","U0003"),
("productos","P0005"),
("facturas","F0000"),
("personal","R0002");
//
Nota: Como observan esta tabla maestra es muy importante para
generar código, porque ella siempre tendrá actualizado el nombre
de la tabla y cuál es su último código con ello validamos que los
códigos de las tablas no se repitan.
Deberían empezar en cero, pero no nos olvidemos que ya
habíamos insertado registros en dichas tablas.
23. Actualizar la tabla auxiliar cuyo valor del ultimocodigo será “C0000” de la
tabla clientes.