Download Tecnología de Programación - DCIC

Document related concepts
no text concepts found
Transcript
Java 2 Platform
Tecnología de Programación
Diego C. Martínez
Departamento de Ciencias e Ingeniería de la Computación
Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
HTTPServlet
Servlet HelloWorld
HttpServlet
public class HelloWorldServlet extends HttpServlet {
public void doGet(
request
service()
response
HttpServletRequest request,
HttpServletResponse response )
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
doGet()
Cliente
Servidor
doPost()
String nombre = request.getParameter("USER_NAME");
out.println("<html>");
out.println("<head>");
out.println("<title>Hola</title>");
out.println("</head>");
out.println("<body bgcolor=\"white\">");
out.println("<h1> Hola "+nombre+"</h1>");
out.println("</body>");
out.println("</html>");
Para implementar un servlet HTTP, basta con heredar de la clase
HttpServlet y redefinir los métodos doGet() y/o doPost()
Nuevamente se aceptan dos parámetros en cada método: un objeto request que informa al servlet del pedido, y un objeto response usado para retornar respuestas.
}
}
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Java Server Pages
Java Server Pages – pasos en la invocación
La tecnología JSP (Java Server Pages) usa tags al estilo HTML y scriptlets escritos en Java para encapsular la lógica que genera el contenido de la página.
Servidor Web
Al separar la lógica de el diseño y la presentación, JSP facilita la tarea de construir aplicaciones basadas en la web.
request
Página JSP
Permiten incluir directamente código Java en un documento HTML
Forman una extensión natural a los servlets. De hecho, luego de un preprocesado, las páginas JSP terminan siendo D
h h l
d
d l
á i
JSP
i
i d
nada más y nada menos que un servlet!.
Desde el punto de vista del programador, Servlets y JSP son intercambiables, dependiendo del balance de carga estática y dinámica del documento a generar.
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Servlet
Generado
Cliente
response
Servlet
Compilado
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
1
Java Server Pages ‐ ejemplo
Java Server Pages ‐ ejemplo
HolaVos.jsp
Hora.jsp
<HTML>
Hola <I> <%= request.getParameter("nombre") %> </I>!
</HTML>
<%@page import=“java.util.Date”%>
<HTML>
<BODY>
Hora actual: <%= new Date().toString() %> </I>!
</BODY>
</HTML>
http://localhost/HolaVos.jsp?nombre=Homero
Hola Homero!
http://localhost/Hora.jsp
Hora actual: Mon Jul 31 10:55:54 GMT+01:00 2006
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Modelos JSP
Servlets y JSP
Los servlets tienen su utilidad y sus riesgos. Son excelentes en el procesamiento del lado del servidor, pero dificultan la separación de la presentación
Los principales elementos de la oferta de Java2 para el desarrollo de aplicaciones web son los servlets y las java server pages.
Los servlets son clases escritas en Java que se ejecutan en el servidor ante una invocación por medio de un URL. Son ideales para los programadores Java, pero dificultan la generación y los cambios de interfaz gráfica HTML
JSP favorece la separación de la presentación de la generación del contenido, pero debe usarse adecuadamente. El balance es importante en ambos casos.
¿Cómo organizar las propuestas de Java?
Có
i l
d
?
Las Java Server Pages son documentos de texto con código Java empotrado (scriptlets),.
Son ideales para los desarrolladores web, pues pueden centrarse más en la interfaz, pero provocan la tentación de llenarlo de scriptlets, mezclando lógica y presentación
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Existieron dos aproximaciones filosóficas para la construcción de aplicaciones web usando JSP.
Estas se conocen como las arquitecturas JSP Model 1 y JSP Model 2 y difieren básicamente en la ubicación del grueso del procesamiento.
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
© Diego C. Martínez - DCIC-UNS
JSP Model 1
JSP Model 1
1
Ventaja
Es la solución más fácil.
JSP
JSP
Desventajas
Mezcla lógica con presentación.
Pocas probabilidades de reutilización.
JSP
4
JSP
2
Browser
JSP
3
Java Bean
Lógica
Lógica
Lógica
Servidor de Aplicaciones
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Servidor de BD / Enteprise Server
Lógica
Lógica
Lógica
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
2
JSP Model 2
JSP Model 2
Ventajas
Ideal para grandes aplicaciones. Permite la reutilización. Otras aplicaciones pueden usar el mismo código.
1
Servlet
Browser
Desventajas: 2
3
Se pierde un poco
Se pierde
un poco el mapeo
el mapeo uno a uno
a uno entre la presentación
entre la presentación
y una única fuente de código.
Lleva más tiempo de desarrollo.
5
JSP
Java Bean
4
Servidor de Aplicaciones
Servidor de BD / Enteprise Server
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
MVC – Model ‐ View ‐ Controller
JSP Model 2
Un patrón de diseño general muy popular es el patrón MVC.
MVC es un patrón de software en donde la lógica se separa del modelo y de la vista
de ese modelo de forma de proveer mejores posibilidades de reutilización.
Controller
1
Controller
Servlet
View
2
3
Model
Browser
5
JSP
El Controlador coordina la actividad de la Vista
a través de un mecanismo indirecto de anuncios de cambios, de tal modo que un Modelo no posee conocimiento
acerca de las vistas que pueda tener asociadas.
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Java Bean
Model
Servidor de Aplicaciones
Servidor de BD / Enteprise Server
Apache Software Group
El Apache Software Group provee soporte para la comunidad Apache de proyectos de software open‐source.
2: Recuperar datos
Servlet
4
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Diagrama de colaboración
1: Post
View
Fuente de Datos
Browser
3: Establecer beans, ubicarlos en la sesion, etc
4: Redireccionar a la vista apropiada
Beans
JSP
JSP
JSP
Colaborativos, Proceso de desarrollo basado en consenso,
Licencias de software abiertas y pragmáticas,
Pretención de liderazgo en el área de desarrollo,
Gobernados por “meritocracia”
En esa página podemos informarnos sobre los proyectos actuales, algunos relacionados, downloads, noticias, etc.
5: acceder a los beans
Esta es la base del framework Struts
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
3
Proyecto Jakarta Struts
¿Qué es Struts?
Un Framework MVC
Struts provee un framework para desarrollar aplicaciones
basadas en servlets y JSP que usen la arquitectura MVC
Struts es uno de los proyectos de Apache Software Group más populares.
Es una implementación en Java del patrón de diseño Model View Controller.
Una colección de utilidades
Struts provee clases para encarar la mayoría de las tareas comunes
en el desarrollo de una aplicación Web.
La intención es crear un framework open source para la construcción de aplicaciones Web que separan la presentación del contenido.
Modela el patron MVC utilizando una combinación de JSPs y servlets. http://struts.apache.org/
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Un conjunto de JSP Tag Libraries
Struts provee librerías de tags especializadas para manejar propiedades de los beans, generar formularios HTML, iterar sobre varios tipos de estructuras de datos y generar salida HTML.
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Struts
Diagrama de colaboración
Principal protagonista: ActionServlet
Recolecta los datos recibidos, los empaqueta en un componente ActionForm.
Delega el procesamiento a otro objeto de tipo Action.
El objeto Action manipula los datos y determina la vista correcta.
Archivo de Configuración
1: HTTP:Request
3: Invocar a Action con el FormBean
Controlador
5: Forward a JSP
Vista
Controlador
( Controller)
Servlet Controlador
ActionServlet
Clase Action
Archivo JSP
Browser
2: Crear FormBean
Modelo
4: Crear Beans
necesarios
( Model )
Vista
Form Bean
Si bien nada indica cómo definir el modelo, lo ideal es usar componentes JavaBeans ( View )
Bean
Bean
Bean
6: Mostrar Datos (HTML,JS, etc)
Modelo
Usualmente, páginas JSP
Struts provee librerías de tags
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Struts ‐ Ejemplo simple
Struts ‐ Ejemplo simple
1) Necesitaremos una página de login, con dos campos de texto: usuario y clave.
login.jsp
Cliente
Cliente
Solicita pagina Login
Ingresa Nombre y Clave
Opera Pagina Admin
LogIn
Sitio
Retorna LogIn
Verifica Datos Recibidos
Retorna Pagina Admin
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Retorna Pagina Error
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html:html locale="true"/>
<head>
<title>Login</title>
</head>
<body>
<html:form action="login.do" focus="userName">
<table align="center">
<tr><td align="right"> Login: </td>
<td align="left">
<ht l t t property="userName"
<html:text
t "
N
" size="15"
i
"15" maxlength="15"
l
th "15" />
</td></tr>
<tr> <td align="right">Password:</td>
<td align="left">
<html:password property="password" size="15" maxlength="15“/>
</td>
</tr><tr>
<td colspan="2" align="center">
<html:submit>Entrar</html:submit>
</td></tr>
</table>
</html:form>
</body>
</html>
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
4
Struts ‐ Ejemplo simple
Struts ‐ Ejemplo simple
2) Necesitaremos una página de error, con un mensaje adecuado.
3) Necesitaremos una página de admin, en este caso solo un mensaje de que se ha ingresado satisfactoriamente.
<html:html locale="true"/>
<head>
<title>Error Login </title>
</head>
<body>
<table align="center">
<tr><td align="right">
ERROR! Clave o Password incorrectos!
</td></tr>
/
/
</table>
</body>
</html>
<html:html locale="true"/>
<head>
<title>Administrador Home</title>
</head>
<body>
<table align="center">
<tr>
<td align="right">
Bienvenido Administrador!
</td>
</tr>
</table>
loginerror.jsp
</body>
</html>
admin.jsp
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Struts ‐ Ejemplo simple
Necesitaremos el bean que represente la información de login, que será procesada por el servidor. Este bean es una subclase de ActionForm.
import
import
import
import
import
javax.servlet.http.HttpServletRequest;
org.apache.struts.action.ActionError;
org.apache.struts.action.ActionErrors;
org.apache.struts.action.ActionForm;
org.apache.struts.action.ActionMapping;
public class LoginForm extends ActionForm
{
private String userName;
private String
p
g p
password;
Struts ‐ Ejemplo simple
Necesitaremos verificar que los datos de login corresponden con un usuario válido, interactuando con alguna fuente de datos. Por simplicidad haremos un bean que representa la lista de usuarios validos.
import java.util.HashMap;
public class LoginBean
{
private HashMap validUsers = new HashMap();
public LoginBean()
{
validUsers put("Twinkle
validUsers.put(
Twinkle Toes"
Toes ,"tt");
tt );
validUsers.put("administrator","admin");
validUsers.put("Barbara Smith","smitty");
}
public String getPassword() {
return password;
}
public String getUserName() {
return userName;
}
public boolean validateUser(String userName, String password)
{
if(validUsers.containsKey(userName)) {
String thePassword = (String)validUsers.get(userName);
if(thePassword.equals(password)) return true;
}
return false;
}
public void setPassword(String string) {
password = string; }
public void setUserName(String string) {
userName = string; }
}
}
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Struts ‐ Ejemplo simple
Necesitamos finalmente una clase que procese el pedido de login. Es una subclase de Action y recibirá los datos en el ActionForm.
import …
public class LoginAction extends Action
{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequestr request,
HttpServletResponse response)
throws Exception {
LoginBean lb = new LoginBean();
if(lb.validateUser(((LoginForm)form).getUserName(),
((LoginForm)form).getPassword()) )
{
return (mapping.findForward("success"));
} else {
return (mapping.findForward("failure"));
}
}
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Struts ‐ Ejemplo simple
Con las partes listas, resta configurar la aplicación. Dos archivos de configuración son importantes: web.xml y struts‐config.xml.
Los dos configuran aspectos importantes de la aplicación.
web.xml
le indica al contenedor web (e.g. Apache Tomcat) como ejecutar nuestra aplicación, cual es el servlet principal, etc.
struts‐config.xml define los beans utilizados, el mapeo de acciones, los forwards, etc.
define los beans
utilizados el mapeo de acciones los forwards etc
Los dos son archivos XML y la idea central es mover gran parte de la configuración de nuestro sitio en estos archivos, dado que son fáciles de examinar y modificar.
Cubren muchos aspectos de la aplicación.
}
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
5
Archivo de Configuracion struts‐config.xml
Archivo de Configuracion web.xml
Define el <web-app>
ActionServlet y lo <!-- Action Servlet Configuration -->
llama “action”
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<servlet
name>action</servlet name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Welcome File List -->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<!-- JSTL Tag Library Descriptor -->
<taglib>
<taglib-uri>/WEB-INF/c.tld</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
…
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
Mapea requests
M
t terminados t
i d
en “.do” al servlet llamado “action”.
Determina la página principal.
Especifica las librerías de tags
…
<struts-config>
<!-- ===== Form Bean Definitions =========================== -->
<form-beans>
<form-bean name="loginForm" type="LoginForm"/>
</form-beans>
<!-- ===== Action Mapping Definitions ====================== -->
<action-mappings>
<action path="/login"  Qué path provoca la invocación de este Action servlet
type="LoginAction"  Nombre completo del servlet
name="loginForm"  Qué FormBean será asociado a este Action
 Cuál es el ámbito del FormBean
scope="request"
p g p
p
input="/login.jsp"
input
/login.jsp  Qué página produce los datos para el FormBean
validate="true">  ¿debe invocarse la validación del FormBean?
<forward name="failure" path="/login.jsp"/>
 Path para “failure”
<forward name="success" path="/loggedin.jsp"/>  Path para “success”
</action>
</action-mappings>
<!-- ===== Message Resources Definitions =================== -->
<message-resources null="false" parameter="ApplicationResources"/>
</struts-config>
Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur
6