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