Download Aplicaciones web con JSP Arquitectura J2EE para

Document related concepts
no text concepts found
Transcript
Arquitectura J2EE para
aplicaciones web
Aplicaciones web con JSP
Aplicación
EJB
HTML
Capa
Cliente
Cliente
feb-04
„
„
„
Aplicación Java
Applet Java
Navegador+Páginas HTML dinámicas
Š En el caso más sencillo, se encarga de la
lógica de presentación de la aplicación.
Š ¿Cómo se ve? ¿Cómo interacciona el
usuario?
Tema X: Java Server Pages
„
„
„
„
Java Beans
EJB (Enterprise Java Beans)
Š ¿Qué es lo que hace mi aplicación?
feb-04
Tema X: Java Server Pages
Capa
Web
BD
Oracle
Capa
Datos
Servidor(es)
Tema X: Java Server Pages
„
Paginas HTML estáticas
Servlets
Java Server Pages (JSP)
Š Gestiona la información de sesión básica
„
feb-04
Arquitectura J2EE:
Lógica de Negocio
Š Se programa el funcionamiento de nuestra
aplicación: reglas que trabajan con los datos
Š Componentes reutilizables: clases Java que
siguen unas convenciones:
Servlet
ERPs etc
Java
Beans
Capa
Lógica
Negocio
Š Proporciona el punto de entrada al servidor y sus
recursos.
Š Comunicación entre cliente y servidor.Responde a
peticiones HTTP
„
feb-04
JSP
Otras BDs,
Arquitectura J2EE:
Capa de Acceso Web
Arquitectura J2EE: Capa Cliente
Š Capa Cliente:
HTTP
Servidor web
Applet
HTTP solo proporciona petición-respuesta
Sesión: Definición
Tema X: Java Server Pages
Arquitectura J2EE
Capa de Datos
Š Datos y modelo de datos de nuestra
aplicación
Š Bases de datos (Oracle entre otras)
Š Otras aplicaciones como ERP, CRM, etc...
Š Usando
„
„
„
feb-04
JDBC (Java Database Connectivity)
SQLJ
JCA (Java Connector Architecture)
Tema X: Java Server Pages
1
JSP: Java Server Pages
Š Generación dinámica de páginas HTML
Š Permite mezclar código HTML y Java
<HTML>
<HEAD><TITLE>Mi primera pagina JSP</TITLE></HEAD>
<BODY>
<% String
usuario=request.getParameter("usuario"); %>
<H3>¡Hola <%= (usuario==null) ? "" : usuario
%>!</H3>
<B>Introduce tu nombre :</B>
<FORM METHOD=get>
<INPUT TYPE="text" NAME="usuario" SIZE=15>
<INPUT TYPE="submit" VALUE="Saluda">
</FORM>
</BODY>
</HTML>
feb-04
Tema X: Java Server Pages
Ejecución JSP
Š Una página JSP se compila la primera vez que se pide al
servidor y se traduce a un servlet.
feb-04
Tema X: Java Server Pages
Tema X: Java Server Pages
(3)
hola.jsp
(1)
Servidor
HTTP
(2)
.HTML
(2)
Solo código HTML,
Javascript, etc...
.JSP
Contenedor servlets
Tema X: Java Server Pages
feb-04
Scriptlets
Š Un scriptlet es una parte de la página JSP donde se
ejecutan sentencias de código Java.
HTML>
<HEAD><TITLE>Un scriptlet tonto</TITLE></HEAD>
<BODY>
<%
for (int i=0; i <10 ; i++) {
out.println("Paso"+ i );
}
%>
</BODY>
</HTML>
Tema X: Java Server Pages
feb-04
Declaraciones
Š Nos sirve para definir métodos y variables de instancia.
Š Métodos que se definen dentro de la clase y se pueden llamar desde otras
partes de la página JSP.
Š Variables de instancia compartidas por todos los métodos de la página
JSP
...
<%!
...
<BR>
<A name="#fin">Fin de página</A>
<HR>
Esta página ha sido generada: <%= new java.util.Date() %>
</BODY>
</HTML>
feb-04
hola.jsp
Navegador
Expresiones
Š Insertan valores directamente en la salida HTML
Š La expresión se evalúa, se convierte a una cadena de caracteres
(String) y se inserta.
Š La evaluación de la expresión se realiza cuando se llama a la página
(tiempo de ejecución).
Ejemplo: Insertar tiempo en que accedo a la página
*.html
(2)
(3)
Fundamentos JSP
Š HTML + Código Java (también con XML,etc..)
Š Uso de etiquetas <% ..... %>
Š Elementos básicos del lenguaje
„ Directivas
<%@ directiva atributo1=valor1 ... %>
„ Elementos de scripts
z Declaraciones
<%! código
%>
z Expresiones
<%= expresión %>
z Scriptlets
<% código
%>
z Comentarios
<%-- comentario --%>
„ Objetos
(1)
String nombrePágina = “Ejemplo de Declaración";
private String dimeNombre() { return
nombrePágina; }
private String dimeTuNombre() {return
nombrePágina;}
%>
...
feb-04
Tema X: Java Server Pages
2
Comentarios
Š Dentro de una página JSP podemos tener 3 tipos de
comentarios
„
Comentarios HTML: Se muestran en la página HTML resultante
<!-- Esto es un comentario -->
„
Comentarios JSP
z Comentarios Java
<%
String h = “hola” //Esto es un comentario
/* Esto
tambien es un comentario */
%>
z Etiqueta JSP de comentario.
<%-- Esto es un comentario --%>
Tema X: Java Server Pages
feb-04
Directivas
Š Define propiedades de la página JSP como el tipo de página,
objetos que puede hacer referencia, etc.....
<%@ page language=“java” errorPage=“error.jsp” %>
<%@ page isErrorPage=“true” %>
<%@ include file=“cabecera.html”%>
Š Permite importar clases Java externas mediante el atributo
import
<%@ page import=“java.sql.*” %>
feb-04
Tema X: Java Server Pages
Objetos request y
response
Objetos
Š Hay dos tipos de objetos:
„
„
Explícitos: creados en la página JSP
Implícitos: proporcionados por el entorno de ejecución
(contenedor).
z
z
z
z
z
z
z
z
feb-04
request: petición HTTP
response: respuesta HTTP
out : stream de salida
exception: excepción (solo en páginas de errores)
page : página actual
pageContext: Contexto de la página
session: sesión entre peticiones HTTP
application, config,
Tema X: Java Server Pages
request
GET/POST
response rs rq Contenedor
HttpServletRequest
HttpServletResponse
feb-04
Objeto request
Š El objeto request almacena los valores de las variables
con las que se invocó una URL
Š Se puede consultar el valor de éstas variables con las
siguientes funciones:
„
„
Servidor
HTTP
Navegador
Tema X: Java Server Pages
Ejercicio Práctico 1
Š Realizar una página JSP que muestre los
datos devuelva los datos de un formulario
getParameter(nombre)
getParameterValues(nombre)
Š Cuando no se conoce el nombre de los parámetros se puede
utilizar:
„
feb-04
getParameterNames(): Devuelve un array con los nombres de
las variables.
Tema X: Java Server Pages
feb-04
Tema X: Java Server Pages
3
Acceso a Bases de Datos
Š Para acceder a la base de datos utilizamos JDBC
Š JDBC es una API de Java para la conexión a Bases de Datos
Relacionales
Š Para conectarnos a un SGBD necesitamos un driver JDBC,
implementa la JDBC API.
Š Un driver se encarga de la comunicación con el SGBD y
proporciona compatibilidad entre los tipos de datos del
SGBD y el lenguaje.
Š Existen otras opciones para acceder a una BD desde Java
como SQLJ.
feb-04
Tema X: Java Server Pages
JDBC y Oracle
Š Oracle proporciona sus propios drivers JDBC
Š Los drivers JDBC pueden ser de varios tipos
„
„
Š Vamos a utilizar el driver JDBC OCI (Oracle Call
Interface)
„
„
feb-04
API JDBC
feb-04
Tema X: Java Server Pages
<%@ page import = “java.sql.*” // Importa las clases de JDBC%>
<%@ page import = “oracle.jdbc.driver.*” // Driver JDBC Oracle %>
2. Invocar el método getConnection de la clase
DriverManager
<%
try{
Connection conn =
DriverManager.getConnection(“jdbc:oracle:oci:@miBd”,“user”,”pass”);
}
catch(SQLException e){}
%>
feb-04
Tema X: Java Server Pages
Es necesario instalarlo y configurarlo en la máquina
donde ejecutamos las páginas JSP.
También es necesario incluirlo en el CLASSPATH
Tema X: Java Server Pages
JDBC Oracle
feb-04
Conexión a la Base de Datos
1. Incluir las clases necesarias para la conexión
Java/Nativos
Cliente/Servidor
Tema X: Java Server Pages
Connection
Š getConnection tiene 3 argumentos
„
Descriptor de la Conexión. Tiene el siguiente formato.
jdbc:SGBD:Driver:@Host:Puerto:NombreBD
z SGBD:Oracle
z Host y puerto se pueden omitir si están locales
„
„
Nombre usuario
Password usuario
Š Nos devuelve un objeto de la clase Connection que
nos va a servir para hacer todas las operaciones que
deseemos sobre la BBDD.
feb-04
Tema X: Java Server Pages
4
Statement
Š Una vez tenemos la conexión queremos enviar sentencias
SQL a la BD
Š Para poder enviar sentencias creamos un objeto Statement a
partir de Connection
<%
try {
... (conexión)
...
Statement stmt = conn.createStatement() // conn obtenido antes
ResultSet rset = stmt.executeQuery(“SELECT * FROM Tabla”);
...
... (tratamiento de datos )
catch (SQLException e) {...}
%>
feb-04
Tema X: Java Server Pages
Statement
Š Para enviar sentencias a la BD se realiza con:
„
„
„
„
Š La sentencia SQL es el argumento como cadena.
Esto nos permite ejecutar consultas
“parametrizadas” (dinámicas)
feb-04
ResultSet
Š En el caso de ejecutar una consulta los resultados se guardan en un
objeto ResultSet
Š Para obtener un registro de la BD utilizamos el método next()
Š Podemos acceder a los valores de los campos con
getXXX(int num_campo). XXX es el tipo (Java) del campo.
<table border=1 bgcolor=“C0C0C0”>
<th bgcolor=white> <i> Campo 1 </i> </th>
<th bgcolor=white> <i> Campo 2 </i> </th>
<% while (rset.next()){ %>
<tr>
<td align=center> <%= rset.getString(1) %></td>
<td align=center> <%= rset.getString(2) %></td>
</tr>
<% }
rset.close() // Cierra el ResultSet
%>
</table>
feb-04
Tema X: Java Server Pages
boolean
execute(String query) (DDL,DML)
ResultSet
executeQuery(String query) (SELECT)
int
executeUpdate(String query)
(INSERT,UPDATE,DELETE)
Otros métodos: getUpdateCount, getResultSet
Tema X: Java Server Pages
Ejercicio práctico 2
Š Realizar una página que muestre los
resultados de una consulta
Š Modificar ésta página para que muestre los
resultados de varias de nuestras consultas.
feb-04
Tema X: Java Server Pages
Ejercicio práctico 3
Š Realizar una página JSP que permita insertar
o actualizar nuevos registros
feb-04
Tema X: Java Server Pages
5