Download Servlets - Universidad de los Andes

Document related concepts
no text concepts found
Transcript
DEPARTAMENTO DE SISTEMAS
Arquitectura de Software
Componentes Web
ISIS3702
Agenda
DEPARTAMENTO DE SISTEMAS
• 
• 
• 
• 
Componentes Web
Servlets
JSPs
MVC
Componentes Web
DEPARTAMENTO DE SISTEMAS
Contenedor
de applets
Tomado tutorial JEE 5
Componentes Web
DEPARTAMENTO DE SISTEMAS
Componentes
Web
Browser
Aplicación
de
Negocio
HTTP
Contenedor
Web
Applet
Proveen contenido dinámico e interactivo a
clientes a través de un browser.
Componentes Web
DEPARTAMENTO DE SISTEMAS
•  En java
o 
Servlets
o 
Java Server Pages (JSP)
o 
Struts
o 
Java Server Faces (JSF)
•  Microsoft
o 
Active Server Pages (ASP/ASPX)
Componentes Web
DEPARTAMENTO DE SISTEMAS
•  Apache (http://httpd.apache.org/)
•  Netscape (http://wp.netscape.com/enterprise/v3.6/index.html)
•  Microsoft IIS (http://www.microsoft.com)
•  Personal Web Server ((http://www.microsoft.com)
•  muchos más …
Componentes Web
DEPARTAMENTO DE SISTEMAS
•  Objeto del lado servidor que maneja eventos del
cliente y datos de entrada
•  Se genera dinámicamente de acuerdo a su estado
•  Tiene un ciclo de vida
•  Puede estar embebido en otro componente, puede
contener otros componentes, usar otros componentes o
ser ‘standalone’
Componentes Web
DEPARTAMENTO DE SISTEMAS
•  Aplicaciones Web proveen contenido dinámico
e interactivo a clientes a través de un browser.
o 
Construida a partir de componentes Web
o 
identificada con un URL
•  Un Contenedor Web, es un ambiente de
ejecución para una aplicación Web.
o 
provee al(los) componente(s) recursos de ciclo de
vida, localización, seguridad, transacciones, etc.
Componentes Web
DEPARTAMENTO DE SISTEMAS
•  En JEE un componente web se construye con servlets,
páginas JSP o Web Service endpoints
•  Sigue un modelo Two-Phase Request Processing
Componentes Web
DEPARTAMENTO DE SISTEMAS
•  Llamado Two-Phase Request Processing
•  División de una solicitud en request y response
•  Proceso:
o 
El browser pasa los datos de entrada al componente
(request)
o 
El componente procesa las entradas, actualiza su
estado y redirige el browser al lugar de la respuesta
o 
El browser carga la página de resultado usando otra
solicitud (response)
Componentes Web
DEPARTAMENTO DE SISTEMAS
Tomado de: http://www.subbu.org/articles/servlets/ServletIssues.html
Componentes Web
DEPARTAMENTO DE SISTEMAS
•  Un componente web es llamado usando un
mensaje HTTP al URL asociado
•  Al pasar parámetros de una forma HTML el
componente maneja el evento,
o 
valida los datos de entrada y actualiza su estado
•  Si hay un error, el componente almacena los datos
del error en la sesión y se redirecciona a sí mismo
•  Si no hubo errores el componente puede hacer
reload para construir la página con el nuevo
estado o pasar control a otro componente
Componentes Web
DEPARTAMENTO DE SISTEMAS
•  JavaServlet es el framework de base
•  Existen varios frameworks adicionales
Agenda
DEPARTAMENTO DE SISTEMAS
•  Componentes Web
•  Servlets
o 
o 
o 
o 
Ciclo de vida
Interfaces y clases
Interacción con los Clientes
Ejemplos
•  JSPs
•  MVC
Servlets y JSPs
DEPARTAMENTO DE SISTEMAS
• 
Un Servlet es una clase de Java que procesa dinámicamente
solicitudes (requests) y construye respuestas (responses)
o 
Orientadas a servicios y funciones de control de una aplicación no
orientada a presentación
• 
Una página JSP es un documento de texto que se ejecuta como
un servlet pero que permite una aproximación más natural para
crear contenido estático
o 
Orientados a presentación
o 
Más apropiadas para generar páginas de texto como HTML, XML,
WML, etc
• 
El modelo se potencia utilizando las dos tecnologías en conjunto
JavaServer Pages Standard Tag Library
DEPARTAMENTO DE SISTEMAS
•  JSLT encapsula funcionalidades comunes ofrecidas
para aplicaciones JSP
•  Permite usar un conjunto estándar de tags de JSP
•  Permite que las aplicaciones corran en varios
contenedores JSP
•  JSLT provee tags para condicionales e iteradores,
manipulación de XML, internacionalización, acceso a
bases de datos con SQL y funciones comunes
JavaServer Faces
DEPARTAMENTO DE SISTEMAS
•  JSF es un framework
aplicaciones web
para
construcción
de
•  Componentes principales de JSF:
o 
o 
o 
Un framework para componentes GUI
Un modelo flexible para generar componentes en diferentes
tipos de HTML o lenguajes de marcas. Un objeto “renderer”
genera el componente y convierte los datos en un modelo de
objetos en tipos que pueden ser representados en una vista
Un RenderKit estándar para generar markup HTML/4.01
•  Features de los componentes de GUI:
o 
o 
o 
o 
o 
Validación de entradas
Manejo de errores
Conversión de datos del modelo de objetos a componentes
Creación de modelo de objetos administrado
Configuración de navegación de páginas
Desarrollo de una aplicación web
DEPARTAMENTO DE SISTEMAS
1. 
Desarrollar el código del componente
2. 
Desarrollar el descriptor de despliegue (deployment)
3. 
Compilar los componentes, clases de ayuda referenciadas y
otros componentes
4. 
Empaquetar la aplicación en un archivo desplegable
5. 
Hacer deploy en un contenedor web
6. 
Acceder al URL que referencia la aplicación
Web Modules
DEPARTAMENTO DE SISTEMAS
 
Compuesto de recursos web
 
 
imágenes, archivos
estáticos
Componentes web
 
Empaquetados en un
archivo .war
 
Descritos por un archivo
web.xml. Si hay servlets,
filtros o listeners
Configuración de un Componente
DEPARTAMENTO DE SISTEMAS
•  Archivo XML llamado web application
deployment descriptor.
Servlet
DEPARTAMENTO DE SISTEMAS
•  Clase Java que permite extender las capacidades
del servidor utilizando el modelo de programación
request-response
•  Basado en componentes
•  Independiente del servidor web y de la plataforma
•  Los contenedores de servlets usualmente son un
componente de un servidor web o de aplicaciones:
o 
BEA WebLogic Application Server, IBM WebSphere, Sun
Java System Web Server, Sun Java System Application
Server, JBoss.
Servlets
DEPARTAMENTO DE SISTEMAS
•  Manejado por el contenedor
•  Proceso
1. 
2. 
3. 
4. 
5. 
Carga el servlet
Crea una instancia
Inicializa el servlet:
•  invoca el método init
Maneja la interacción del cliente con el servlet:
•  utiliza el método service
Destruye el servlet
Servlets
DEPARTAMENTO DE SISTEMAS
<<Interface>>
ServletConfig
<<Interface>>
Servlet
GenericServlet
extends
HttpServlet
<<Interface>>
java.io.Serializable
Servlets
DEPARTAMENTO DE SISTEMAS
public class EjemploServlet …
{
public void init() throws ServletException
{
… // aqui va el código propio de inicialización
}
public void destroy()
{
… // aqui va el código propio de destrucción
}
public void service(HttpServletRequest request
, HttpServletResponse response)
{
… // aqui va el código propio de servicio
}
}
• 
El contenedor carga el servlet e invoca el método init
• 
El contenedor invoca el método destroy cuando va a descargar el servlet. Se
utiliza para liberar recursos, para guardar información que se tenía en el cache,
etc.
Servlets
DEPARTAMENTO DE SISTEMAS
• 
Un Servlet HTTP maneja requerimientos de clientes a
través de su método service
• 
El método service puede atender requerimientos HTTP
estándares despachando cada requerimiento a un método
específico
o 
o 
o 
o 
doGet, para manejar GET, GET condicional y requerimientos
HEAD
doPost, para manejar requerimientos POST
doPut, para manejar requerimientos PUT
doDelete, para manejar requerimientos DELETE
Servlets
DEPARTAMENTO DE SISTEMAS
<<abstract class>>
HttpServlet
<<Interface>>
HttpServletRequest
doDelete()
doPut()
doGet()
doPost()
myServlet
<<Interface>>
HttpServletResponse
Servlets
DEPARTAMENTO DE SISTEMAS
Cuando un Servlet acepta un llamado de un
cliente, el Servlet recibe dos objetos
•  Un ServletRequest: encapsula la comunicación del
cliente al servidor
•  Un ServletResponse: encapsula la comunicación
desde el servidor de regreso al cliente
Servlets
DEPARTAMENTO DE SISTEMAS
<<Interface>>
Servlet
Service(SReq, Sres)
<<Interface>>
ServletRequest
<<Interface>>
ServletResponse
Servlets
DEPARTAMENTO DE SISTEMAS
La Interface ServletRequest Permite al servlet
tener acceso a
•  Información sobre los parámetros pasados por
el cliente
•  El protocolo usado por el cliente
•  El nombre del host remoto que hizo el llamado
y el servidor que lo recibió
Servlets
DEPARTAMENTO DE SISTEMAS
• 
El stream de entrada
o 
• 
ServletInputStream: el Servlet usa este stream para obtener datos de los
clientes que usan protocolos como los métodos HTTP POST y PUT
Para acceder los datos del cliente (HTTPServletRequest)
o 
getParameter: dado el nombre de un parámetro retorna su valor
o 
getParameterValues: usado cuando el parámetro puede tener más de
un valor
o 
getQueryString: para requerimientos GET, retorna un String de los datos
del cliente
o 
getReader: para POST, PUT y DELETE, si se espera texto, el método
retorna un BufferedReader para que los datos sean leídos de ahí
o 
getInputStream: si se espera datos binarios, el método retorna un
ServletInputStream para obtener los valores
Servlets
DEPARTAMENTO DE SISTEMAS
java.io.InputStream
ServletInputStream
extends
<<Interface>>
RequestDispatcher
<<Interface>>
ServletRequest
<<Interface>>
HttpSession
<<Interface>>
HttpServletRequest
Servlets
DEPARTAMENTO DE SISTEMAS
•  La interface ServletResponse ofrece al servlet
métodos para responder al cliente
o 
o 
Colocar la longitud del contenido y el tipo del MIME
en la respuesta
Provee un stream de salida: ServletOutputStream y
un objeto Writer a través del cual el servlet puede
enviar la respuesta
•  Las Interfaces que extiende ServletResponse
ofrecen servicios más específicos con el tipo
de protocolo. Por ejemplo la interface
HttpServletResponse contiene métodos para
obtener la información del header del protocolo
HTTP
Servlets
DEPARTAMENTO DE SISTEMAS
ServletOutputStream
java.io.OutputStream
extends
<<Interface>>
ServletResponse
<<Interface>>
HttpServletResponse
Servlets
DEPARTAMENTO DE SISTEMAS
Un objeto HttpServletRequest provee acceso a un
encabezado HTTP
• 
Cualquier cookie encontrado en el requerimiento
• 
El método HTTP con el que el requerimiento fue hecho
• 
El objeto HttpServletRequest también permite obtener los
argumentos que el cliente envía como parte del requerimiento
Servlets
DEPARTAMENTO DE SISTEMAS
Para acceder los datos del cliente
o 
getParameter: dado el nombre de un parámetro retorna su valor
o 
getParameterValues: usado cuando el parámetro puede tener más
de un valor
o 
getQueryString: para requerimientos GET, retorna un String de los
datos del cliente
o 
getReader: para POST, PUT y DELETE, si se espera texto, el
método retorna un BufferedReader para que los datos sean leídos
de ahí
o 
getInputStream: si se espera datos binarios, el método retorna un
ServletInputStream para obtener los valores
Servlets
DEPARTAMENTO DE SISTEMAS
•  Un objeto HttpServletResponse provee dos
formas para retornar datos al cliente:
o 
El método getWriter retorna un Writer (texto)
o 
El método getOutputStream retorna un
ServletOutputStream (binary)
Servlets
DEPARTAMENTO DE SISTEMAS
El encabezado HTTP
•  Debe crearse antes de acceder el Writer o el
OutputStream.
•  La clase HttpServletResponse provee
métodos para acceder los datos del
encabezado.
•  Por ejemplo, setContentType permite colocar
el tipo del contenido
DEPARTAMENTO DE SISTEMAS
Ejemplo Servlet
public class SimpleServlet extends HttpServlet {
public void doGet (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter out;
String title = "Simple Servlet Output";
response.setContentType("text/html");
out = response.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(title);
out.println("</TITLE></HEAD><BODY>");
out.println("<H1>" + title + "</H1>");
out.println("<P>This is output from SimpleServlet.");
out.println("</BODY></HTML>");
out.close();
}
}
Agenda
DEPARTAMENTO DE SISTEMAS
• 
Componentes Web
• 
Servlets
• 
JSPs
o 
o 
o 
Conceptos Básicos
Arquitectura de JSP
Elementos JSP:
 
 
o 
• 
Directivas
Elementos de Scripting
JSP y JavaBeans
MVC
JSPs
DEPARTAMENTO DE SISTEMAS
•  Una página JSP es un documento de texto que
contiene dos tipos de elementos: template estático y
elementos JSP
•  Template estático: puede expresarse en formatos
como: HTML, SVG, WML, y XML
•  Elementos JSP: para construir contenido dinámico
JSPs
DEPARTAMENTO DE SISTEMAS
<html>
<head>
<title>Hello, User</title>
</head>
<body bgcolor="#ffffff" background="background.gif">
<%@ include file="dukebanner.html" %>
…
<form method="get">
<input type="text" name="username" size="25"> <br> <input type="submit"
value="Submit">
<input type="reset" value="Reset">
</form>
<% if ( request.getParameter("username") != null ) { %>
<%@ include file="response.jsp" %>
<% } %>
</body>
</html>
JSPs
DEPARTAMENTO DE SISTEMAS
•  Las páginas JSP son traducidas a servlets y por lo
tanto su ciclo de vida es el del ciclo de vida del servlet
•  Cuando un request sobre una página jsp es iniciado, el
procesador de páginas verifica:
o 
o 
si ya tiene un servlet asociado
si la pagina es más reciente que el servlet
•  Si alguna de las condiciones no se cumple, la página
es traducida y compilada al correspondiente servlet
•  Una vez que se crea la instancia del servlet asociado a
la página, el contenedor invoca el método jspInit
JSPs
DEPARTAMENTO DE SISTEMAS
•  Dos tipos de sintaxis están disponibles para crear
elementos JSP
o 
o 
Sintaxis basada en tags de XML
Sintaxis propia de JSP
•  Permite tener dos maneras alternativas para definir
los mismos comandos
o 
La sintaxis XML es más fácil de entender pero tiene
limitaciones (e.g., no se puede tener un tag como valor de
un atributo de otro tag)
JSPs
DEPARTAMENTO DE SISTEMAS
•  Directivas:
o 
Son usadas para que el contenedor web determine
cómo será traducida y ejecutada la página
•  Elementos de Scripting:
o 
Son usados para crear, modificar, formatear
JSPs
DEPARTAMENTO DE SISTEMAS
•  Hay tres tipos de directivas:
o 
o 
o 
Page
Include
TagLib
•  Directiva Page: define atributos que aplican a toda la
página JSP
o 
Sintaxis JSP:
<%@ page
o 
[name = value] %>
Sintaxis XML
<jsp:directive.page [name = value] />
JSPs
DEPARTAMENTO DE SISTEMAS
[
[
[
[
[
[
[
[
[
[
language="java" ]
extends="package.class" ]
import="{package.class | package.*}, ..." ]
session="true|false" ]
buffer="none|8kb|sizekb" ]
autoFlush="true|false" ]
isThreadSafe="true|false" ]
info="text" ]
errorPage="relativeURL" ]
contentType="mimeType [ ; charset=characterSet ]" |
html ; charset=ISO-8859-1" ]
[ isErrorPage="true|false" ]
[ pageEncoding="characterSet | ISO-8859-1" ]
"text/
JSPs
DEPARTAMENTO DE SISTEMAS
Ejemplos:
<%@ page import="java.util.*, java.lang.*" %>
<%@ page buffer="5kb" autoFlush="false" %>
<jsp:directive.page errorPage="error.jsp" />
JSPs
DEPARTAMENTO DE SISTEMAS
• 
La
directiva
include
• 
Incluir
en
la
página
JSP
el
archivo
de
texto
o
código
especificado.
• 
Si
el
archivo
contiene
elementos
JSP,
estos
se
procesan:
• 
Sintaxis
JSP:
o 
• 
<%@
include
file="relativeURL"
%>
Sintaxis
XML:
o 
<jsp:directive.include
file="relativeURL"
/>
JSPs
DEPARTAMENTO DE SISTEMAS
<html>
<body bgcolor="white">
<font color="blue">
The current date and time are
<%@ include file="date.jsp" %>
</font>
</body>
</html>
<%@ page import="java.util.*" %>
<%= (new java.util.Date() ).toLocaleString() %>
JSPs
DEPARTAMENTO DE SISTEMAS
•  Los elementos de scripting son usados para
o 
o 
o 
crear y acceder objetos
definir métodos
manejar el flujo de control
•  Directivas Page para
o 
o 
Definir el lenguaje de scripting
Importar paquetes
•  Declaraciones
•  Expresiones
•  Scriptlets
JSPs
DEPARTAMENTO DE SISTEMAS
Declarar variable y métodos:
• 
Sintaxis JSP
o 
• 
Sintaxis XML
o 
• 
<%! declaration; [ declaration; ]+ ... %>
<jsp:declaration>
[ declaration; ]+…
</jsp:declaration >
declaration;
Ejemplos
o 
o 
o 
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
JSPs
DEPARTAMENTO DE SISTEMAS
•  Sintaxis JSP
<%= expression %>
•  Sintaxis XML
<jsp:expression> expression </jsp:expression>
•  Ejemplos:
The map file has <font color="blue">
<%= map.size() %> </font> entries.
Good guess, but nope. Try <b>
<jsp:expression>numguess.getHint()</jsp:expression> </b>
JSPs
DEPARTAMENTO DE SISTEMAS
•  Sintaxis JSP
<%
code
fragment
%>
•  Sintaxis XML
<jsp:scriptlet>
code
fragment
</jsp:scriptlet>
•  Ejemplos:
<% String name = null;
if (request.getParameter("name") == null) { %>
<%@ include file="error.html" %>
<% } else {
foo.setName(request.getParameter("name"));
if (foo.getName().equalsIgnoreCase("integra"))
name = "acura";
%>
JSPs
DEPARTAMENTO DE SISTEMAS
•  Manejo de Objetos Implícitos
•  Estos objetos pueden ser usados dentro de
scriptlets y expressions. Algunos son:
o 
request: representa el HttpServletRequest
o 
response: representa el HttpServletResponse
o 
application: representa el ServletContext
o 
session: representa la HttpSession
JSPs
DEPARTAMENTO DE SISTEMAS
•  JSPs y JavaBeans
•  Motivación
o 
Reducir la cantidad de código java dentro de una JSP
o 
Estandarizar la manera en que se acceden objetos
•  Declaración
<jsp:useBean id="beanName"
class="fully_qualified_classname" scope="scope">
…
</jsp:useBean>
JSPs
DEPARTAMENTO DE SISTEMAS
•  Ejemplo:
<jsp:useBean
id="cart" class="session.Carts"
scope="session"
</jsp:useBean>
JSPs
DEPARTAMENTO DE SISTEMAS
• 
Uso: actualización y obtención de las propiedades del bean
• 
Ejemplos actualización:
<jsp:setProperty name="mybean"
property="*" />
<jsp:setProperty name="mybean"
property="username" />
<jsp:setProperty name="mybean"
property="username" value="Steve" />
JSPs
DEPARTAMENTO DE SISTEMAS
•  Obtención de valores de las propiedades:
<jsp:getProperty name="beanInstanceName"
property="propertyName" />
Ejemplo:
<jsp:useBean id="calendar" scope="page"
class="employee.Calendar" />
<h2> Calendar of <jsp:getProperty name="calendar"
property="username" />
</h2>
Preguntas de discusión
DEPARTAMENTO DE SISTEMAS
•  Qué desventajas le ve a usar solamente
tecnología de Servlets?
•  Qué desventajas le ve a usar tecnología de
JSPs?
Agenda
DEPARTAMENTO DE SISTEMAS
• 
• 
• 
• 
Componentes Web
Servlets
JSPs
MVC
o 
o 
o 
Patrón MVC
JSPs y Servlets
MVC con Servlet – JSP
Patrón MVC
DEPARTAMENTO DE SISTEMAS
•  Model – View – Controller
Representación
Visual de los Datos
Datos
de la
Aplicación
Modelo
Vista
Recibe estímulos
Controlador del usuario
Modifica el
modelo
MVC
DEPARTAMENTO DE SISTEMAS
•  Los servlets son clases de Java que procesan
solicitudes dinámicamente y construyen respuestas
•  Los JSP son páginas basadas en documentos de texto
que son ejecutadas como servlet
o 
Permiten una aproximación mas natural para crear contenido
estático
•  Los servlets son apropiados para administrar las
funciones de control como despachar solicitudes y
manipular datos que no sean texto
o 
No son buenos para crear contenido estático
•  Los JSPs son mas apropiados para generar markups
basados en texto como HTML, XML, WML y SVG
MVC
DEPARTAMENTO DE SISTEMAS
tomado de http://javaboutique.internet.com/tutorials/Struts/
MVC
DEPARTAMENTO DE SISTEMAS
•  El rol de controlador es jugado por los servlets
•  El controlador recibe los request de los usuarios,
los interpreta y envía al modelo para su
procesamiento
•  El Modelo procesa el request
•  El Controlador recibe el resultado y delega en las
vistas (páginas JSPs) la presentación de los
resultados
Referencias
DEPARTAMENTO DE SISTEMAS
• 
The Java EE 5 Tutorial –
o 
• 
Java Web Components- The J2EE Tutorial
o 
• 
• 
http://www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html
JavaServer Faces Technology –
o 
• 
http://java.sun.com/products/jsp/tags/11/tags11.html (los ejemplos en esta presentación han sido
tomados de la referencia)
Understanding JavaServer Pages Model 2 architecture. Exploring the MVC design
pattern. By Govind Seshadri.
o 
• 
http://java.sun.com/j2ee/tutorial/1_3-fcs/index.html
JavaServer Pages (JSP ) v1.2 Syntax Reference
o 
• 
http://java.sun.com/products/servlet/
J2ee Tutorial:
o 
• 
http://today.java.net/pub/a/today/2005/08/04/jspcomponents.html
Sun Developer Network - J2EE Java Servlet Technology
o 
• 
http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/WebComponents.html
Java .net - Building Web Components Without a Component Framework
o 
• 
http://java.sun.com/javaee/5/docs/tutorial/doc/
http://java.sun.com/javaee/javaserverfaces/
Presentación de clase: Componentes WEB – Parte 1. Rubby Casallas, Universidad de
los Andes. 2002
Presentación de clase: Componentes WEB – Parte 2. Rubby Casallas, Universidad de
los Andes. 2002
DEPARTAMENTO DE SISTEMAS
•  Material Prepaparado por
o 
o 
Nicolás López
Pilar Villamil
•  Revisado y Actualizado por
o 
Darío Correal (2008)