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