Vous êtes sur la page 1sur 19

PROGRAMACION JSP - SERVLETS

Problema 02
Crear un proyecto web y luego en la carpeta webpages crear un nuevo archivo JSP, al que llamara Facturar :

El objetivo del JSP ser dentro de un formulario pedir el precio y la cantidad de una venta y al hacer clic sobre un botn (facturar), mostrar sobre un textarea el monto a pagar :

El ingreso de datos (text) se realiza con con <input type=text, como se ve en el ejemplo :
Digitar precio : <input type="text" name="precio"> <br>

Para recuperar un parmetro enviado, apelamos al objeto request y al su mtodo getParameter(name del <input type=text name=precio>). Por ejemplo :
String sprec = request.getParameter("precio");

El formulario solo lleva el mtodo de envio (post) y no action, debido a que la accin se realizara en el mismo JSP y no se llamara a otra pagina.
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Pagina JSP de Facturacion</title> </head> <body> <form method="post" > Digitar precio : <input type="text" name="precio"> <br> Digitar cantidad : <input type="text" name="cantidad"> <br> <input type="submit" value="Facturar"> <br> <textarea rows= 10 cols=20> <% if(request.getParameter("precio") != null && Request.getParameter("cantidad") != null) { String sprec = request.getParameter("precio"); int prec = Integer.parseInt(sprec); String scant = request.getParameter("cantidad"); int cant = Integer.parseInt(scant); int monto = prec * cant; String linea = "El monto a pagar es : "+ monto; out.println(""+linea); } %> </textarea> </form> </body> </html>

Problema 03
Crear un servlet, tal que muestre su localizacin en el sistema :

Solucion
Esto se logra utilizando el objeto request y su mtodo getContextPath () Veamos el cdigo del servlet solicitado :
public class ServletContextPath extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head>"); out.println("<title> Servlet ServletContextPath </title>"); out.println("</head>"); out.println("<body>"); out.println("<h2> El ServletContextPath esta en : " + request.getContextPath () + "</h2>");

out.println("</body>"); out.println("</html>"); } finally { out.close(); }

Problema 04
Crear un JSP que pida un numero y muestre la tabla de multiplicar correspondiente :

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Pagina JSP : Tabla</title> </head> <body> <form method="get" > Numero de Tabla de multiplicar : <input type="text" name="numTabla"><br> <input type="submit" value="Mostrar tabla de multiplicar"> <br><br> Tabla de Multiplicar<br> =====================================<br> <textarea rows= 15 cols=30> <% if(request.getParameter("numTabla") != null) { String snumTabla = request.getParameter("numTabla"); int nTab = Integer.parseInt(snumTabla); String linea=""; for(int i =1; i <=12; ++ i) { linea = linea + nTab + " x "+ i +" = "+ (nTab*i)+"\n"; } out.println("\n"+linea); } %> </textarea> </form> </body> </html>

Contextuar la ruta de la aplicacin

(prog03.jsp y servlet05.java)

Para que un JSP llame a otra aplicacin, por ejemplo un servlet, usamos :
<form method="post" action="http://localhost:14267/proyServlet1/Servlet05">

En su lugar podriamos usar : request.getContextPath()


<form method="post" action="<%=request.getContextPath()%>/Servlet05">

Que una aplicacin enve de retorno una respuesta


Si deseamos que un servlet retorne una respuesta, primero preparamos la respuesta :
int sum = n1+n2; String linea = "La suma es "+ sum;

Objeto a enviar

request.setAttribute("suma", linea); // etiqueta, objeto

Despus, procedemos a escribir el mecanismo de retorno al JSP :

JSP de destino

getServletContext().getRequestDispatcher("/prog03.jsp").forward(request, response);

Que un JSP reciba la respuesta de un servlet


Se usa el mtodo getAttribute() :
resultado = "\n" + (String)request.getAttribute("suma")+"\r";

Problema 05
Construir un JSP para pedir dos nmeros, los cuales se enviaran al servlet05, el cual calculara la suma y lo devolver al JSP para que lo imprima.

Codigo del JSP y del Servlet :

JSP :

prog03.jsp

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Programa principal : prog03.jsp</title> </head> <body> <form method="post" action="<%=request.getContextPath()%>/Servlet05"> Numero 1 : <input type="text" name="num1"> <br> Numero 2 : <input type="text" name="num2"> <br> <input type="submit" value="Calcular la suma"> <br> <textarea rows= 10 cols=30> Servlet llamado <% if(request.getAttribute("suma")!= null) { resultado = "\n" + (String)request.getAttribute("suma")+"\r"; out.print(resultado); } %> </textarea> </form> </body> </html>

import import import import import import

java.io.IOException; java.io.PrintWriter; javax.servlet.ServletException; javax.servlet.http.HttpServlet; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse;

Servlet :

Servlet05.java

Como se observa este servlet no posee interfaz grafica, solo procesa y retorna un resultado.

public class Servlet05 extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { int n1 = Integer.parseInt(request.getParameter("num1")); int n2 = Integer.parseInt(request.getParameter("num2")); int r = n1+n2; String linea = "La suma es "+ r; request.setAttribute("suma", linea); // etiqueta, objeto getServletContext().getRequestDispatcher("/prog03.jsp").forward(request, response); }

Problema
Prog04.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <form name="planilla" method ="get" action ="<%=request.getContextPath()%>/Servlet07"> nombre : <input type="text" name="nombre"><br> sueldo : <input type="text" name="sueldo"><br> sexo : <br> <input type="radio" name="sexo" value="varon" checked>Masculino<br> <input type="radio" name="sexo" value="mujer">Femenino<br> especialidad : <br> <select name="especialidad"> <option value="administrador">administrador</option> <option value="contador" selected>contador</option> <option value="ing.Sistemas">ing.Sistemas</option> </select><br><br> <input type="submit" value ="generar Planilla"> <br> </form> </body> </html>

public class {

Servlet07

extends HttpServlet

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nom, sex, espc; double suelB=0, suelNeto=0; nom = request.getParameter("nombre");

suelB = Double.parseDouble(request.getParameter("sueldo")); sex = request.getParameter("sexo"); espc = request.getParameter("especialidad"); if(sex.equals("mujer")) { suelNeto = suelB-suelB*0.14; if(espc.equals("administracion")) suelNeto =suelB-suelB*0.14; }else { if(espc.equals("administracion")) suelNeto = suelB-suelB*0.14; else suelNeto = suelB-suelB*0.14; } String linea = "\nPlanilla de pago\n"+ "----------------\n"+ "Nombre : "+ nom + "\n" + "sueldo basico : "+ suelB + "\n" + "Sexo : "+ sex + "\n" + "Categoria : "+ espc + "\n" + "Sueldo Neto : " + suelNeto; request.setAttribute("planilla", linea);
getServletContext().getRequestDispatcher("/prog05.jsp").forward(request, response);

prog05.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <form name="MiPlanilla"> <textarea name="area" rows="20" cols="40"> <% if(request.getAttribute("planilla")!= null) { out.print((String)request.getAttribute("planilla")); } %> </textarea> </form> </body> </html>

JSP
Directivas JSP
La directriz JSP configuran la generacin de cdigo que ejecutara el contenedor al crear un servlet. Son utilizadas para establecer valores globales tales como declaraciones de clase, mtodo a implementar, tipo de contenido de salida, etc., y no producen ninguna salida para el cliente. Las directrices tienen alcance para el total de la pagina JSP ; en otras palabras, una directriz afecta a toda la pagina JSP pero solo a esa pagina.Las directrices comienzan con <%@ y finalizan con %> y la sintaxis general es :

<%@ nombreDirectiva atributo=valor atributo=valor %>


Hay tres directivas principales que pueden ser utilizadas en un JSP: La directriz page La directriz include La directriz taglib

La directriz page
La directiva page nos permite definir uno o ms de los siguientes atributos sensibles a las maysculas.
Esto nos permite especificar los paquetes que deberan ser importados

<%@ page import = java.lang.Math %>

indica que la variable predefinida session (del tipo HttpSession) debera unirse a la sesin existente si existe una.

Esto especifica el tamao del buffer para el JSP Writer out. El valor por defecto es especfico del servidor, debera ser de al menos 8kb.

Especifica la pgina de error que ser invocada en caso de producirse una excepcin durante la ejecucin del JSP.

Problema 06
Crear un JSP para formatear el nmero 98756123.7579 con comas y 2 decimales de aproximacin. Adems formatear la fecha actual obtenida con el mtodo Date(). Utilizar las directivas page para importar las libreras Java necesarias.

<%@page import="java.util.Locale"%> <%@page import="java.text.NumberFormat"%> <%@page import="java.text.DecimalFormat"%>

Las directivas <%@page import

<%@page import="java.util.Date"%> <%@page import="java.text.SimpleDateFormat"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> Un nmero cualquiera <body> <h3><b>Formateando Numero</b></h3> <% double n = 98756123.7579; Indicando formato numrico NumberFormat fNum = NumberFormat.getNumberInstance(Locale.UK); DecimalFormat formatoNum = (DecimalFormat) fNum; formatoNum.applyPattern("###,###,###,###.00"); out.println(formatoNum.format(n)); %> <h3>Formateando Fecha</h3> formatoNum : objeto para <% SimpleDateFormat formatoFecha = formatear numero n new SimpleDateFormat("dd/MM/yyyy"); out.println(formatoFecha.format(new Date())); %> </body> Formateando la fecha actual </html>

La directriz include
Esta directiva nos permite incluir una pgina externa en la pgina actual. La directiva se parece a esto

Ejemplo : Tenemos dos paginas jsp, de las cuales, la pagina a incluir se llamara reporte1.jsp que poseer como texto La Universidad y la pagina principal de nombre index.jsp, simplemente invoca a la pagina mencionada y la incluye dentro de de si misma. Para eso se tiene que utilizar la directiva include.

Implementando la pagina index.jsp

Implementando la pagina reporte1.jsp

Note en la figura de arriba la inclusin del jsp reporte1 dentro de la pagina index.jsp.

JavaBeans en JSP
Los JavaBeans representan las entidades y reglas del negocio. No hay que verlas como un oscuro misterio de la tecnologa J2EE, simplemente son clases Java reutilizables que representan elementos del dominio.

Estructura basica de un Bean

Los javaBeans manejan una serie de etiquetas que a continuacin vamos a detallar:

<jsp:useBean>
La etiqueta <jsp:useBean> busca una instancia de un bean de la clase y el ambito que se hayan determinando. Si existe un bean de la clase especificada, se hace referencia a dicho bean con el id, en caso contrario, se crea una instancia del mismo. El bean estara disponible dentro de su ambito.

El id es un nombre identificativo, seleccionado por el programador. Adems debemos declarar su alcance o mbito (scope). Un alcance page es en esta pagina, "request" implica que es accesible otra JSP que haya sido invocada por medio por ejemplo de jsp:include. El beanName sigue la lgica Java de paquete.subpaquete. En nuestro ejemplo:
Esto me permite definir su ambito

Id representa el nombre del objeto instanciado

La clase bean ubicada en su respectivo paquete

El constructor vaco, es el que utiliza el motor JSP en la creacin del objeto.

Problema 7

Hacer un JSP que trabaje con un javabean para almacenar datos en el y poder tambin extraerlos

El detalle del JavaBean Empleado, esta en la pgina anterior

Fundamentos de JavaScript
Javascript es un lenguaje de programacin empleado para programar pequeas funciones responsables de realizar acciones dentro del mbito de una pgina web.
Javascript no tiene nada que ver con Java , son productos totalmente distintos y no guardan entre si ms relacin que la sintaxis idntica y poco ms. Algunas diferencias entre estos dos lenguajes son las siguientes: Compilador. Para programar en Java necesitamos un Kit de desarrollo y un compilador. Sin embargo, Javascript no es un lenguaje que necesite que sus programas se compilen, sino que stos se interpretan por parte del navegador cuando ste lee la pgina. Orientado a objetos. Java es un lenguaje de programacin orientado a objetos, en cambio Javascript no es orientado a objetos, esto quiere decir que podremos programar sin necesidad de crear clases. Propsito. Java es mucho ms potente que Javascript, esto es debido a que Java es un lenguaje de propsito general, con el que se puede construir cualquier tipo de sistemas, sin embargo, con Javascript slo podemos escribir subrutinas para que se ejecuten en pginas web.

Estructura de programa javascript


Teniendo en cuenta que Javascript se escribe dentro de un documento HTML, podemos decir que los delimitadores de un programa javascript son las etiquetas <SCRIPT> </SCRIPT> En una misma pgina podemos introducir varios introducirse dentro de unas etiquetas <SCRIPT> distintas. scripts, cada uno que podra

Uso de variables y su impresion


Javascript otorga un poco de libertad es a la hora de declarar las variables, ya que no estamos obligados a hacerlo, al contrario de lo que pasa en la mayora de los lenguajes de programacin. De todos modos, es aconsejable declarar las variables, y para ello Javascript cuenta con la palabra var :
var var ciudad = "Valencia" mujer = true

var num1 = 23 var num2 = 33 var suma = num1 + num2 document.write(suma)

<-- imprimiendo

JavaScript tiene la peculiaridad de ser un lenguaje dbilmente tipeado, esto es, una variable puede cambiar de tipo durante su vida, por ejemplo :
MiVariable = 4; MiVariable = "Una_Cadena";

Existen variables locales y globales. Las globales deben ser declaradas asi :
<SCRIPT> var </SCRIPT> nomVariable;

Y en el caso de las variables locales :

Estructuras de control de flujo


Tenemos if, if else, switch, for, while, do while, se usan igual que Java

Ubicacion del codigo javascript


El codigo javascript se ubica dentro del bloque HEAD de un programa HTML

Parametros de funciones
Su empleo es simple como se ve en el ejemplo :
function bienvenida(nombre, colorTexto) { document.write("<FONT color=" + colorTexto + ">) document.write("<H1>Hola " + nombre + "</H1>") document.write("</FONT>") }

JSP

Variables globales en JSP


La variable simplemente se coloca sobre el cdigo HTML :

El tag

<input type="button"

Esta etiqueta con el tipo indicado, trabaja como un botn comn, entonces para este caso debemos implementar el manejo de eventos (click), lo que se implementa tal como se ve : <input type="button" value="Calcular la suma" onclick= "calcular()">

Etiqueta del boton

Evento

funcin del evento

La funcin calcular() es implementada con cdigo javascript :

Problema 08
Un JSP pide 2 nmeros y los enva a un servlet. Aqu usaremos un <input type=button con la funcin de evento click. Lo que implica el uso de una funcin javascript (callServlet)
JSP : prog04.jsp <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Programa principal: prog04.jsp</title>

<script>

Aqui la function maneja el function callServlet() llamado al servlet06 { // formSuma es el nombre del formulario(ver mas abajo) document.formSuma.action= "<%=request.getContextPath()%>/Servlet06"; document.formSuma.method="get"; document.formSuma.submit(); }

</script>
</head> <body>

Notar que no existe action a pesar que se llama a un servlet

<form name="formSuma"> <%--- nombre del formulario ---%> numero 1 : <input type="text" name="num1"> <br> numero 2 : <input type="text" name="num2"> <br> <input type = "button" value="Calcular la suma" onclick="callServlet()"><br> <textarea rows= 10 cols=30 name="area"> <% if(request.getAttribute("suma")!= null) { String resultado = (String)request.getAttribute("suma"); out.print("\n"+resultado); } %> </textarea> </form>

</body> </html>

Servlet : Servlet06.java public class Servlet06 extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int n1 = Integer.parseInt(request.getParameter("num1")); int n2 = Integer.parseInt(request.getParameter("num2")); int r = n1+n2; String linea = "La suma es "+ r; request.setAttribute("suma", linea); // etiqueta, objeto getServletContext().getRequestDispatcher("/prog04.jsp").forward(request, response); }

javascript y la funcion alert(mensaje)


Se usa para emitir un mensaje sobre una pequea ventana (til para mensajes de error) Ejemplo : alert("falta el sueldo");

javascript y la funcin focus()


A veces es necesario enfocar una caja de texto <input >. Esto se logra con la funcin focus() Ejemplo : document.planilla.sueldo.focus();
Clase document Nombre del formulario (Formulario JSP) Nombre del <input type=text

javascript y como detectar un campo vacio (<input type=text> )


Se usa la funcin de cadenas length(), tal como se ve en el ejemplo :
var nom;
Valor escrito por el usuario dentro del <input type=text)

nom = document.planilla.nombre.value; if(nom.length == 0) alert("falta nombre");

Problema 09
Desarollar un JSP para ingresar un nombre con su apellido, entonces llamar a un servlet para que reciba la cadena, extraiga solo el nombre y lo devuelva al JSP.
<html>

<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Pagina prog05</title> <script> function focusValidar() { var num; nom = document.planilla.nombre.value; if(nom.length == 0) { alert("falta nombre"); document.planilla.nombre.focus(); return; }else { document.planilla.action= "<%=request.getContextPath()%>/Servlet06"; document.planilla.method="get"; document.planilla.submit(); } } </script> </head>

<body> <form name="planilla"> nombre : <input type="text" name="nombre"><br> <input type="button" value ="generar Planilla" onclick="focusValidar()"> <br> <textarea name="area" rows="20" cols="40"> <% if(request.getAttribute("registro")!= null) {
out.print((String)request.getAttribute("registro"));

} %> </textarea> </form> </body> </html>

Problema 10
Realizar un JSP que me permita Ingresar por teclado dos nmeros enteros y mostrar a travs de un Alert el resultado de la suma de esos nmeros. Solucin :

Problema 11
Hacer un JSP para solicitar al usuario elija una ciudad a partir de un select (combo) y se muestre la seleccin con un Alert. Las ciudades son : Lima, Habana, Mosc y Quito

MANEJO DE SESIONES
El protocolo HTTP permite acceder a pginas web y enviar datos de un formulario pero tiene una limitacin que consiste en que no puede recordar datos o cliente cuando se cambia de servidor o de pgina dentro de un mismo servidor. Por esta razn a este protocolo se le conoce como protocolo sin estado.

Qu es una sesin ?
Como se obtiene una sesin : HttpSession miSesion = request.getSession(); Es una serie de comunicaciones entre un cliente y un servidor, en la que se realiza un intercambio de informacin. Por medio de una sesin se puede hacer un seguimiento de un usuario a travs de la aplicacin. Para obtener la sesin de un usuario, se utiliza el mtodo getSession() que devuelve una interfaz de tipo HttpSession : request.getSession(true); Para obtener un objeto que fue almacenado en la sesin : session.getAttribute() Cuando fue creada la sesin : session.getCreationTime() Ultimo acceso : session.getLastAccessedTime() Tiempo mximo de inactividad : session.getMaxInactiveInterval()

Problema 12

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <a href="/demoSession/ServCliente"> Llamando a servlet Llamar a servlet </a> </body> </html> import import import import import import import import java.io.IOException; java.io.PrintWriter; java.util.Date; javax.servlet.ServletException; javax.servlet.http.HttpServlet; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; javax.servlet.http.HttpSession;

ServCliente.java

public class ServletSession extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter();

HttpSession session = request.getSession(true); Integer ctosAccesos = (Integer) session.getAttribute("ctosAccesos"); if (ctosAccesos { ctosAccesos } else { ctosAccesos new } == null) = new Integer(1); = Integer(ctosAccesos.intValue() + 1);

session.setAttribute("ctosAccesos", ctosAccesos); try { out.println("<html>"); out.println("<head>"); out.println("<title>demoSession</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>ID de sesin: " + session.getId() + "</p>"); out.println("<p>Creacin: " + new Date(session.getCreationTime())+"</p>"); out.println("<p>ltimo acceso: " + new Date(session.getLastAccessedTime()) + "</p>"); Integer ctos = (Integer) session.getAttribute("ctosAccesos"); out.println("<p>Cantidad de accesos: " + ctos.intValue() + "</p>"); out.println("<p>Tiempo mximo de inactividad: " + session.getMaxInactiveInterval() + " segundos" + "</p>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } } }

Vous aimerez peut-être aussi