JSPs - Tec · 6 JSPs Ing . Pablo Díaz, MC 11 Etiquetas de Scripting ˜ Comentarios ˜...
Transcript of JSPs - Tec · 6 JSPs Ing . Pablo Díaz, MC 11 Etiquetas de Scripting ˜ Comentarios ˜...
1
JSPs Ing. Pablo Díaz, MC 1
JSPsJSPsJSPs
Java Server Pages
JSPs Ing. Pablo Díaz, MC 2
JSPsJSPsPáginas de Web con contenido DINÁMICO!
Separa el contenido (generado por programadores)
y la presentación (producida por diseñadores)
2
JSPs Ing. Pablo Díaz, MC 3
Desarrollo en WebDesarrollo en Web
HTML
Java
ServletsCGIs
GIF
JavaScript
DH
TML CSS
Diseño GráficoJPEG
ETC.....
ETC.....
ETC.....
ETC.....
Base de Datos
JSPs Ing. Pablo Díaz, MC 4
ServletsServlets
� Programa en Java produce una página enHTML
Java HtmlPáginade Web
3
JSPs Ing. Pablo Díaz, MC 5
JSPsJSPs
� Página en Html con “scripts” de Java
Html JavaPáginade Web
JSPs Ing. Pablo Díaz, MC 6
import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;
public class Fecha extends HttpServlet {
public void doGet (HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException{
ServletOutputStream out = res.getOutputStream();res.setContentType("text/html");out.println("<HTML>");out.println("<HEAD><TITLE> Servlet de Fecha </TITLE></HEAD>");out.println("<BODY>");out.println("<h1> La fecha es: "+ new Date().toString() +"</h1>");out.println("</BODY>");out.println("</HTML>");out.close();
}}
4
JSPs Ing. Pablo Díaz, MC 7
<HTML><%@ page language = "java"
import = "java.util.*"%> <HEAD><TITLE> JSP de Fecha </TITLE></HEAD><BODY><H1> La fecha es: <%= new Date().toString() %> </H1></BODY></HTML>
JSPs Ing. Pablo Díaz, MC 8
JSPsJSPs
PROGRAMADORA
DISEÑADOR
Java/Html
5
JSPs Ing. Pablo Díaz, MC 9
Páginas de WebPáginas de Web
� HTML(Estáticas)
� CGI (Perl, C)� Php� Servlets (java)� ASPs (vbscript)� JSPs (Java)
JSPs Ing. Pablo Díaz, MC 10
JSPsJSPs
� Código de Java embebido en páginaHTML
� HTML con etiquetas adicionalesespecícificas para JSPs
� Tres tipos de etiquetas– Elementos de código (scripting)– Elementos de acción– Elementos directivos
6
JSPs Ing. Pablo Díaz, MC 11
Etiquetas de ScriptingEtiquetas de Scripting
� Comentarios– <%-- .... --%>– <!–- .... -->
� Declaraciones– <%! ..... %>
� Expresiones– <%= ..... %>
� Scriptles– <% ..... %>
JSPs Ing. Pablo Díaz, MC 12
ComentariosComentarios
� <!–- comentario [<%= expresión %>] -->
� Genera un comentario que se envía al cliente y sepuede visualizar en el código fuente de HTML
<HTML><%@ page language = "java“ %> <HEAD><TITLE> Jsp1.jsp </TITLE></HEAD><BODY><!-- Este comentario aparecerá en el fuente de la página --><H1> Página generada con JSP</H1></BODY></HTML>
7
JSPs Ing. Pablo Díaz, MC 13
ComentariosComentarios
� <%-- Comentario -->
� Comentario que no se envía al cliente (escondido)� Para documentar la página JSP
<HTML><HEAD><TITLE> Jsp2.jsp </TITLE></HEAD><BODY><!-- Este comentario aparecerá en el fuente de la página --><%-- Este comentario no aparecerá en el cliente --%><H1> Página generada con JSP</H1></BODY></HTML>
JSPs Ing. Pablo Díaz, MC 14
DeclaracionesDeclaraciones� <%! Declaraciones %>
� Para declarar variables o métodos válidos en ellenguaje, para ser utilizados dentro de la página
� Debe de contener por lo menos un estatuto dedeclaración válido
� Cada estatuto debe terminar con ;� Se deben declarar las variables y métodos antes de
ser usados en la página� Se pueden usar variables y métodos de los paquetes
importados con la directiva Page, sin necesidas dedeclararlos explícitamente
<%! Int i, j; String s; Date fecha = new Date();%>
8
JSPs Ing. Pablo Díaz, MC 15
ExpresionesExpresiones� <%= expresión %>
� Expresión válida en el lenguaje de script (Java)� La expresión se evalúa, se convierte a String y se
inserta en la página, en el lugar donde aparece� No debe de terminar con ;<HTML><%@ page language = "java" import = "java.util.*"%> <%! Date fecha = new Date(); %><HEAD><TITLE> Jsp3.jsp </TITLE></HEAD><BODY><B><FONT COLOR=“blue”> Hoy es <%= fecha.toString() %></FONT></B></BODY></HTML>
JSPs Ing. Pablo Díaz, MC 16
ScriptletsScriptlets
� <% estatutos %>
� Puede contener estatutos, declaración de variables ométodos
� Se pueden usar los objetos implícitos de JSP– request, response, out, . . . . .
� Se ejecutan en el momento de la petición de lapágina, al igual que las expresiones
� Las declaraciones se ejecutan una sola vez, almomento de cargar la página por primera vez . . . . . .
9
JSPs Ing. Pablo Díaz, MC 17
ScriptletsScriptlets<HTML><%@ page language = "java"
import = "java.util.*"%> <%! int accesos = 0; String tipo;%><HEAD><TITLE> Jsp4.jsp </TITLE></HEAD><BODY><% accesos++; if ((accesos%2) != 0)
tipo = "impar"; else
tipo = "par";%><BR>La página se ha cargado <%= accesos %><BR>Que quiere decir un número <%= tipo %> de veces<BR><% out.print("<FONT COLOR=\"red\">"); out.print(new Date().toString()); out.println("</FONT>");%><BR>Fin de la página</BODY></HTML>
JSPs Ing. Pablo Díaz, MC 18
Declaración de métodosDeclaración de métodos� Los métodos se declaran dentro de una etiqueta de
declaración (<%! ...... %>)� Se pueden usar en toda la página<HTML><%@ page language = "java" %> <%! int accesos = 0; String tipo;
public String tipo(int n){ if ((n%2) != 0)
return "impar"; else
return "par"; }%><HEAD><TITLE> Jsp5.jsp </TITLE></HEAD><BODY><% accesos++; %><BR>La página se ha cargado <%= accesos %> veces<BR>Que quiere decir un número <%= tipo(accesos) %> de veces</BODY></HTML>
10
JSPs Ing. Pablo Díaz, MC 19
La directiva PageLa directiva Page
<%@ page [ language = “java” ] [ extends = “package.clase” ] [ import = “{package.class | package.*},...] [ session = “true|false” ] [ buffer = “none|8kb|sizeKb” ] [ autoFlush = “true|false” ] [ isThreadSafe = “true|false” ] [ info = “text” ] [ errorPage = “relativeURL” ] [ contentType = “mimeType [;charset=charSet]”| “text/html ; charset = ISO-8859-1” ] [ isErrorPage = “true|false” ]%>
JSPs Ing. Pablo Díaz, MC 20
Objetos implícitosObjetos implícitos
� request� response� out� session� application� config� pageContext� page
11
JSPs Ing. Pablo Díaz, MC 21
requestrequest<HTML><HEAD><TITLE>Jsp6.html</TITLE></HEAD><BODY BGCOLOR="white" TEXT="black" LINK="blue" VLINK="purple"><H1>Formulario</H1><P>Esta forma llamará a una JSP y regreserá el primer dato en minúsculasy el segundo en mayúsculas<BR><FORM ACTION="Jsp6.jsp" METHOD="GET"><BR> Dato1: <INPUT NAME="caja1"><BR> Dato2: <INPUT NAME="caja2"><BR><INPUT TYPE="SUBMIT" VALUE="ENVIA"></FORM></BODY></HTML>
JSPs Ing. Pablo Díaz, MC 22
requestrequest<%@ page language="java" %><HTML><HEAD><TITLE>Jsp6.jsp</TITLE></HEAD><BODY><% String s1 = request.getParameter("caja1"); String s2 = request.getParameter("caja2");%><BR> Dato1: <%= s1.toLowerCase() %><BR> Dato2: <%= s2.toUpperCase() %></BODY></HTML>
12
JSPs Ing. Pablo Díaz, MC 23
JDBC con JSPsJDBC con JSPs
JSPs Ing. Pablo Díaz, MC 24
JDBC con JSPsJDBC con JSPs<html><head><title>Despliega.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><%@ page languaje = "java" import = "java.sql.*"
errorPage = "Error.jsp"%> <%! Connection conexion; Statement estatuto;
ResultSet rs;String nombres, apellidos, puesto, correo;int cont;
%><%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");conexion = DriverManager.getConnection("jdbc:odbc:cursojava");
%><body bgcolor="#000099"><h1 align="center"><font color="#FFFF00">Lista de Alumnos</font></h1>
13
JSPs Ing. Pablo Díaz, MC 25
<table width="100%" border="1"> <tr> <th width="5%"><font color="#00FF00"><b></b></font></th> <th width="49%"><font color="#00FF00"><b>Nombre</b></font></th> <th width="17%"><font color="#00FF00"><b>Puesto</b></font></th> <th width="29%"><font color="#00FF00"><b>Correo</b></font></th> </tr><% estatuto = conexion.createStatement(); rs = estatuto.executeQuery("SELECT * FROM alumnos ORDER by apellidos"); cont = 0; while(rs.next()){ cont++; nombres = rs.getString("nombres"); apellidos = rs.getString("apellidos"); puesto = rs.getString("puesto"); correo = rs.getString("correo");%><tr> <td width="5%"><b><font color="#FFFFFF"><%= cont %></font></b></td> <td width="49%"><b><font color="#FFFFFF"><%= nombres +" "+ apellidos %>
</font></b></td> <td width="17%"><b><font color="#FFFFFF"><%= puesto %></font></b></td> <td width="29%"><b><font color="#FFFFFF"> <A HREF=mailto:<%= correo %> >
<font color="#FF0033"><%= correo %></font></A></font></b></td></tr><% } rs.close(); estatuto.close(); conexion.close();%></table>
JSPs Ing. Pablo Díaz, MC 26
<table width="100%" border="1"> <tr> <th width="5%"><font color="#00FF00"><b></b></font></th> <th width="49%"><font color="#00FF00"><b>Nombre</b></font></th> <th width="17%"><font color="#00FF00"><b>Puesto</b></font></th> <th width="29%"><font color="#00FF00"><b>Correo</b></font></th> </tr><% estatuto = conexion.createStatement(); rs = estatuto.executeQuery("SELECT * FROM alumnos ORDER by apellidos"); cont = 0; while(rs.next()){ cont++; nombres = rs.getString("nombres"); apellidos = rs.getString("apellidos"); puesto = rs.getString("puesto"); correo = rs.getString("correo");%> <tr> <td width="5%"><b><font color="#FFFFFF"><%= cont %></font></b></td> <td width="49%"><b><font color="#FFFFFF"><%= nombres +" "+ apellidos %>
</font></b></td> <td width="17%"><b><font color="#FFFFFF"><%= puesto %></font></b></td> <td width="29%"><b><font color="#FFFFFF"> <A HREF=mailto:<%= correo %>>
<font color="#FF0033"><%= correo %></font></A></font></b></td> </tr><% } rs.close(); estatuto.close(); conexion.close();%></table>
14
JSPs Ing. Pablo Díaz, MC 27
Una JSP es un Servlet!Una JSP es un Servlet!
GET Archivo.jsp
Página HTML
JSPs Ing. Pablo Díaz, MC 28
Una JSP es un Servlet!Una JSP es un Servlet!
� Verificar fecha en archivo– Generar código java– Compilar y generar .class
� Ejecutar y generar HTML
Archivo.jsp
Archivo.javaArchivo.classPáginaH T M L
15
JSPs Ing. Pablo Díaz, MC 29
jspInit() y jspDestroy()jspInit() y jspDestroy()
<%! Connection conexion; Statement estatuto; ResultSet rs; String nombres, apellidos, puesto, correo; int cont;
public void jspInit(){ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conexion = DriverManager.getConnection("jdbc:odbc:cursojava"); }catch(ClassNotFoundException e1){ System.err.println("Error en la clase"); }catch(SQLException e2){ System.err.println("Error en SQL"); } }
public void jspDestroy(){ try{ conexion.close(); }catch(SQLException e2){} }%>
JSPs Ing. Pablo Díaz, MC 30
RendimientoRendimiento
� Impacto inicial– Generación del .class
� Servlet en memoria� Código generado
– Puede ser más eficiente que el producidopor el programador
– out.print à out.write
� Producción!!!!!!!!!!– Más rápida y adecuada
16
JSPs Ing. Pablo Díaz, MC 31
JavaBeansJavaBeans
� Son componentes� Clases que eventualmente se
convertirán en objetos� Siguen ciertas reglas un poco más
estrictas que las clases normales� Nacieron como componentes gráficos
para IDEs
JSPs Ing. Pablo Díaz, MC 32
JavaBeansJavaBeans
� Si se usan bien realmente nos dan laseparación entre diseño y contenidoque tanto se necesita
� No hay que olvidar que en últimainstancia un bean es una clase, de lacual se pueden crear objetos
17
JSPs Ing. Pablo Díaz, MC 33
JavaBeans, ¿dónde van?JavaBeans, ¿dónde van?� Son clases que deben de estar accesibles
por medio del classpath del contenedor deJSPs
� La manera más fácil es ponerlos en eldirectorio classes, que está en el directorioWEB-INF de la aplicación de Web
� Los ejemplos que están en la literatura usanpaquetes para agrupar los beans, y estosdeben de seguir la estructura jerárquicacorrespondiente
JSPs Ing. Pablo Díaz, MC 34
ReglasReglas
� Debe de tener un constructor sinparámetros
� No debe de tener variables de ejemplarpúblicas
� Las variables (propiedades) del bean sedeben de obtener o modificar por mediode métodos llamados getXxx y setXxx
18
JSPs Ing. Pablo Díaz, MC 35
EjemploEjemploimport java.util.*;import java.text.*;
public class FechasBean{private Locale local = new Locale("es","MX");
public FechasBean(){}
public String getFechaLarga(){DateFormat f = DateFormat.getDateInstance(DateFormat.FULL, local);return f.format(new Date());
}
public String getHoraCorta(){DateFormat f = DateFormat.getTimeInstance(DateFormat.SHORT,
local);return f.format(new Date());
}
}
JSPs Ing. Pablo Díaz, MC 36
FechaBean.jspFechaBean.jsp<html>
<%@ page language = "java"
%>
<jsp:useBean id="fecha" scope="page" class="FechasBean" />
<body>
<H1> La fecha de es: <jsp:getProperty name="fecha" property="fechaLarga" /> </H1>
<H1> La hora es: <jsp:getProperty name="fecha" property="horaCorta" />
</H1>
</body>
</html>
19
JSPs Ing. Pablo Díaz, MC 37
Alcance de un beanAlcance de un bean� “Tiempo” de vida dado por scope� page
– Se crea cada vez que se carga la página(Fecha2.jsp)
� session– Dura toda la sesión de peticiones (requests)
(Fecha3.jsp)
� application– Para compartir los beans con otros servlets y jsps
con sesiones diferentes (Fecha4.jsp)
JSPs Ing. Pablo Díaz, MC 38
Un mejor DespliegaUn mejor Despliega<HTML><HEAD>
<TITLE>DespliegaConBean.jsp</title></HEAD><%@ page language = "java"
errorPage = "Error.jsp"%>
<jsp:useBean id="despliega" scope="application" class="DespliegaBean" />
<BODY><H1 align="center">Lista de Alumnos</H1><jsp:getProperty name="despliega" property="participantes" /><H1 align="center">Fin de la lista </H1>
</BODY></HTML>
20
JSPs Ing. Pablo Díaz, MC 39
DespliegaBean.javaDespliegaBean.java
import java.util.*;import java.sql.*;
public class DespliegaBean{private Connection conexion;private String baseDeDatos ="jdbc:odbc:cursojava";private Statement estatuto; private ResultSet rs;
public DespliegaBean(){try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e){}
}
JSPs Ing. Pablo Díaz, MC 40
DespliegaBean.javaDespliegaBean.java
synchronized public String getParticipantes(){Alumno inscrito;StringBuffer buffer = new StringBuffer(500);buffer.append("<CENTER><TABLE BORDER WIDTH=100% CELLPADDING=5>\n");buffer.append("<TR>\n");buffer.append("<TH></TH>\n");buffer.append("<TH>Nombre</TH>\n");buffer.append("<TH>Puesto</TH>\n");buffer.append("<TH>Correo</TH>\n");buffer.append("</TR>\n");
21
JSPs Ing. Pablo Díaz, MC 41
DespliegaBean.javaDespliegaBean.javatry{
conexion = DriverManager.getConnection(baseDeDatos,"","");estatuto = conexion.createStatement();rs = estatuto.executeQuery("SELECT * FROM alumnos ORDER BY apellidos");int cont = 1;while(rs.next()){
inscrito = new Alumno(rs);buffer.append("<TR>\n");buffer.append("<TD>"+String.valueOf(cont)+"</TD>\n");buffer.append("<TD>"+inscrito.getApellidos()+", "+
nscrito.getNombres()+"</TD>\n");buffer.append("<TD>"+inscrito.getPuesto()+"</TD>\n");buffer.append("<TD><A HREF=mailto:"+inscrito.getCorreo()+
"> "+inscrito.getCorreo()+"</TD>\n");buffer.append("</TR>\n");cont++;
}rs.close();estatuto.close();conexion.close();
}catch(SQLException e){}buffer.append("</TABLE>");
return buffer.toString();
JSPs Ing. Pablo Díaz, MC 42
Manejo de SesionesManejo de Sesiones
� A veces el usuario inhibe las cookies� Tenemos que tener métodos alternos
para manejar estado del cliente� Existen métodos ya probados:
– URLrewriting y campos escondidos
� URLrewriting es tremendamentetedioso
22
JSPs Ing. Pablo Díaz, MC 43
Manejo de sesionesManejo de sesiones
� Java implementó una clase que manejasesiones
� Inicialmente trata de usar cookies y sino puede lo hace a través deURLrewriting
� Pero es completamente transparente� Ver ejemplos
JSPs Ing. Pablo Díaz, MC 44
Modelos I y IIModelos I y II
� Son modelos para el desarrollo deaplicaciones en Web
� Inicialmente nos vemos tentados autilizar solamente JSPs (por sufacilidad)
� Pero acabamos con código muy difícilde mantener, nuestros JSPs se hacencada vez más complicados
23
JSPs Ing. Pablo Díaz, MC 45
Modelo 1Modelo 1
JSP
BaseDe
Datos
JavaBean
Petición
Respuesta
JSPs Ing. Pablo Díaz, MC 46
Modelo 2Modelo 2
servlet
BaseDe
Datos
JavaBean
Petición
Respuesta
JSP
24
JSPs Ing. Pablo Díaz, MC 47
Todos los derechos reservados© Copyright 2004 Pablo Díaz
Prohibida su reproducción parcial ototal sin consentimiento por escritodel autor.