JSPs JSPs

Anuncio
JSPs
Java Server Pages
JSPs
Ing. Pablo Díaz, MC
1
Páginas de Web con contenido D I N Á M I C O !
JSPs
Separa el contenido
(generado por programadores)
y la presentación
(producida por diseñadores)
JSPs
Ing. Pablo Díaz, MC
2
1
Desarrollo en Web
DH
atos
D
e
ET
ed
Java Bas
C.
Scrip
....
t
L
TM
I sD
ts
C G ise H S e r v l e
.
ño
E T C .. .. .
....
C
J
a
T
v
Gr
a E
áf
ic J P E
o
G
GIF
CS
ETC
S
.....
TM
L
JSPs
Ing. Pablo Díaz, MC
3
Servlets
Programa en Java produce una página en
HTML
Java
Página
de Web
Html
JSPs
Ing. Pablo Díaz, MC
4
2
JSPs
Página en Html con “scripts” de Java
Html
Página
de Web
Java
JSPs
import
import
import
import
Ing. Pablo Díaz, MC
5
java.io.*;
javax.servlet.*;
javax.servlet.http.*;
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();
}
}
JSPs
Ing. Pablo Díaz, MC
6
3
<HTML>
<%@ page
import
%>
<HEAD><TITLE>
<BODY>
<H1> La fecha
</BODY>
</HTML>
language = "java"
= "java.util.*"
JSP de Fecha </TITLE></HEAD>
es: <%= new Date().toString() %> </H1>
JSPs
Ing. Pablo Díaz, MC
7
JSPs
Java/Html
P
R
O
G
R
A
M
A
D
O
R
A
D
I
S
E
Ñ
A
D
O
R
JSPs
Ing. Pablo Díaz, MC
8
4
Páginas de Web
HTML
(Estáticas)
CGI (Perl, C)
Php
Servlets (java)
ASPs (vbscript)
JSPs (Java)
JSPs
Ing. Pablo Díaz, MC
9
JSPs
Código de Java embebido en página
HTML
HTML con etiquetas adicionales
especícificas para JSPs
Tres tipos de etiquetas
–
–
–
Elementos de código (scripting)
Elementos de acción
Elementos directivos
JSPs
Ing. Pablo Díaz, MC
10
5
Etiquetas de Scripting
Comentarios
–
–
<%-- .... --%>
<!–- .... -->
Declaraciones
–
<%! ..... %>
Expresiones
–
<%= ..... %>
Scriptles
–
<%
..... %>
JSPs
Ing. Pablo Díaz, MC
11
Comentarios
<!–- comentario [<%= expresión %>] -->
Genera un comentario que se envía al cliente y se
puede 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>
JSPs
Ing. Pablo Díaz, MC
12
6
Comentarios
<%-- 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
13
Declaraciones
<%! Declaraciones %>
Para declarar variables o métodos válidos en el
lenguaje, para ser utilizados dentro de la página
Debe de contener por lo menos un estatuto de
declaració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 de
declararlos explícitamente <%! Int i, j;
String s;
Date fecha = new Date();
%>
JSPs
Ing. Pablo Díaz, MC
14
7
Expresiones
<%= 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
15
Scriptlets
<% estatutos %>
Puede contener estatutos, declaración de variables o
métodos
Se pueden usar los objetos implícitos de JSP
–
request, response, out, . . . . .
Se ejecutan en el momento de la petición de la
página, al igual que las expresiones
Las declaraciones se ejecutan una sola vez, al
momento de cargar la página por primera vez . . . . . .
JSPs
Ing. Pablo Díaz, MC
16
8
Scriptlets
<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
17
Declaració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>
JSPs
Ing. Pablo Díaz, MC
18
9
La directiva Page
<%@
page
[ language
[ extends
[ import
[ session
[ buffer
[ autoFlush
[ isThreadSafe
[ info
[ errorPage
[ contentType
[ isErrorPage
=
=
=
=
=
=
=
=
=
=
“java” ]
“package.clase” ]
“{package.class | package.*},...]
“true|false” ]
“none|8kb|sizeKb” ]
“true|false” ]
“true|false” ]
“text” ]
“relativeURL” ]
“mimeType [;charset=charSet]”|
“text/html ; charset = ISO-8859-1” ]
= “true|false” ]
%>
JSPs
Ing. Pablo Díaz, MC
19
Objetos implícitos
request
response
out
session
application
config
pageContext
page
JSPs
Ing. Pablo Díaz, MC
20
10
request
<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úsculas
y 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
<%@ 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>
JSPs
Ing. Pablo Díaz, MC
21
request
22
11
JDBC con JSPs
JSPs
Ing. Pablo Díaz, MC
23
JDBC 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>
JSPs
Ing. Pablo Díaz, MC
24
12
<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
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
13
Una JSP es un Servlet!
GET Archivo.jsp
Página HTML
JSPs
Ing. Pablo Díaz, MC
27
Una JSP es un Servlet!
Verificar fecha en archivo
Archivo.jsp
–
–
Generar código java
Compilar y generar .class
Ejecutar y generar HTML
Página
HTML
Archivo.class
JSPs
Ing. Pablo Díaz, MC
Archivo.java
28
14
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
29
Rendimiento
Impacto inicial
–
Generación del .class
Servlet en memoria
Código generado
–
–
Puede ser más eficiente que el producido
por el programador
out.print à out.write
Producción!!!!!!!!!!
–
Más rápida y adecuada
JSPs
Ing. Pablo Díaz, MC
30
15
JavaBeans
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
31
JavaBeans
Si se usan bien realmente nos dan la
separación entre diseño y contenido
que tanto se necesita
No hay que olvidar que en última
instancia un bean es una clase, de la
cual se pueden crear objetos
JSPs
Ing. Pablo Díaz, MC
32
16
JavaBeans, ¿dónde van?
Son clases que deben de estar accesibles
por medio del classpath del contenedor de
JSPs
La manera más fácil es ponerlos en el
directorio classes, que está en el directorio
WEB-INF de la aplicación de Web
Los ejemplos que están en la literatura usan
paquetes para agrupar los beans, y estos
deben de seguir la estructura jerárquica
correspondiente
JSPs
Ing. Pablo Díaz, MC
33
Reglas
Debe de tener un constructor sin
parámetros
No debe de tener variables de ejemplar
públicas
Las variables (propiedades) del bean se
deben de obtener o modificar por medio
de métodos llamados getXxx y setXxx
JSPs
Ing. Pablo Díaz, MC
34
17
Ejemplo
import 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
35
FechaBean.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>
JSPs
Ing. Pablo Díaz, MC
36
18
Alcance 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
37
Un 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>
JSPs
Ing. Pablo Díaz, MC
38
19
DespliegaBean.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
39
DespliegaBean.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");
JSPs
Ing. Pablo Díaz, MC
40
20
DespliegaBean.java
try{
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
41
Manejo 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 tremendamente
tedioso
JSPs
Ing. Pablo Díaz, MC
42
21
Manejo de sesiones
Java implementó una clase que maneja
sesiones
Inicialmente trata de usar cookies y si
no puede lo hace a través de
URLrewriting
Pero es completamente transparente
Ver ejemplos
JSPs
Ing. Pablo Díaz, MC
43
Modelos I y II
Son modelos para el desarrollo de
aplicaciones en Web
Inicialmente nos vemos tentados a
utilizar solamente JSPs (por su
facilidad)
Pero acabamos con código muy difícil
de mantener, nuestros JSPs se hacen
cada vez más complicados
JSPs
Ing. Pablo Díaz, MC
44
22
Modelo 1
Petición
JSP
Respuesta
Base
De
Datos
JavaBean
JSPs
Ing. Pablo Díaz, MC
45
Modelo 2
Petición
servlet
Base
De
Datos
Respuesta
JSP
JSPs
JavaBean
Ing. Pablo Díaz, MC
46
23
Todos los derechos reservados
© Copyright 2004 Pablo Díaz
Prohibida su reproducción parcial o
total sin consentimiento por escrito
del autor.
JSPs
Ing. Pablo Díaz, MC
47
24
Descargar