“Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones,...

27
WASH Santiago Fernández Zumaquero Programación Internet con Lenguajes Declarativos Multiparadigma Curso 2009/2010

Transcript of “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones,...

Page 1: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

WASH

Santiago Fernández Zumaquero Programación Internet con Lenguajes Declarativos Multiparadigma

Curso 2009/2010

Page 2: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Introducción

Características de WASH

Componentes de WASH ◦ Wash2hs

◦ Wash/CGI

◦ Wash/HTML

◦ Wash/Mail

◦ WSP

◦ Wash/DB

◦ DBconnect

Sesiones

Gestión de Formularios

Conclusiones

Referencias

Page 3: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Evolución de la Web: ◦ Web estática.

HTML

XHTML

◦ Web dinámica.

PHP

ASP

JSP

CGI -> Perl, C++ y WASH (con Haskell)

Page 4: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

WASH es una familia de lenguajes específicos de dominio embebidos utilizados para desarrollar aplicaciones Web.

Cada uno de estos lenguajes está integrado en el lenguaje funcional HASKELL.

Page 5: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Librería basada en CGI (Common Gateway Interface):

Portabilidad. Facilidad de uso. Mantenibilidad.

Fuertemente tipado. Las páginas se construyen bajo la noción de

sesión y de estado de la sesión.

Permite la construcción de interacciones Web complejas entre formularios de una manera limpia y elegante.

Page 6: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Wash2hs ◦ Preprocesador para incluir fragmentos de código XHTML en

HSP (Haskell Server Pages).

Wash/CGI ◦ Para la creación de scripts del lado del servidor.

Wash/HTML ◦ Para la creación dinámica de HTML y XHTML.

Wash/Mail ◦ Utilizado para el procesamiento de emails

Page 7: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

WSP ◦ Servidor con soporte para Wash Server Pages.

Wash/DB ◦ Interfaz transaccional para bases de datos SQL.

DBconnect ◦ Interfaz para PostgreSQL (en desuso).

Page 8: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Lenguaje específico de dominio del lado del servidor utilizado para crear scripts para controlar sesiones, formularios y gráficos.

Características: ◦ Las páginas web son representadas mediante estructuras

de datos. ◦ Control total de la sesión. ◦ Control total de los gráficos. Cada píxel de una imagen

puede realizar una acción distinta. ◦ No son necesarias urls explícitas. Salvo las referencias a

páginas externas. ◦ Los scripts compilados son reubicables. ◦ Persistencia. A través de variables transaccionales.

Page 9: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Sintaxis: ◦ $: Aplicación de funciones que permite asociatividad por la

derecha sin usar paréntesis “f $ a” equivale a “f(a) o “f a” “f $ g $ a” equivale a “f(g a)”

◦ standarPage: Es un documento parametrizado de tipo String -> WithHTML CGI a -> WithHTML CGI a

◦ ask: Mapea un documento a una acción CGI

Ask :: WithHTML CGI() -> CGI()

◦ run: Función que mapea una acción CGI a una acción I/O Run :: CGI () -> IO()

◦ main: Acción I/O de tipo IO()

Page 10: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Para implementar un programa ejecutable en Haskell, es necesario definir una función main::IO() que debe exportarse.

Para ello, se define la siguiente línea:

module Main(main) where

import System (getEnv) -- Para usar la función (getEnv)

main :: IO ()

-- main = ... programa que corresponda

Ejemplo (HolaText). El siguiente CGI devuelve la cadena de texto "Hola“:

mainHola =

do { putStrLn "content-type: text/plain";

putStrLn "";

putStrLn "Hola" }

Page 11: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Ejemplo:

main = run (ask (standarPage “Hola planeta” myinfo))

myinfo =

do p (text “Este es mi segundo programa CGI”)

p(do text “Mis series son:”

ul (do li (text “House”)

li (Text “Anatomía de Grey”)

li (text “CSI”)))

standarPage ttl nodes =

html (do head (title (textttl))

body (h1 (text ttl) >> nodes))

Hola planeta

Este es mi segundo programa CGI

Mis series son:

· House

· Anatomía de Grey

· CSI

Page 12: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Generación de HTML dinámico.

Combina flexibilidad y seguridad.

Aporta potencial para la generación y la parametrización de los documentos.

Por otra parte, la biblioteca garantiza código HTML bien formado y válido.

Proporciona alto nivel de abstracción.

Page 13: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Ejemplo:

do p (text “Este es mi primer programa CGI”)

p (do text “Ejemplo de enumeración”

ul (do li (text “primero”)

li (text “segundo”)

li (text “tercero”)))

<p>Este es mi primer programa CGI</p>

<p>Ejemplo de enumeración

<ul>

<li>primero</li>

<li>segundo</li>

<li>tercero</li>

</ul>

</p>

Page 14: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

WASHMail es una colección de módulos para lectura y procesamiento de emails.

Se incluye con WashNGo.

Page 15: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Versión ampliada del servidor web de Simon Marlow (HWS) que permite la ejecución de módulos WASH como servlets.

Los módulos WASH son compilados de forma transparente y cargados dinámicamente en el servidor.

Existen tres modos de ejecución:

◦ LogOnly: Se utiliza un log para reconstruir el estado actual.

◦ StateIDOnly: Se asigna un hilo a cada sesión y se utiliza este mismo hilo tras el envío de un formulario.

◦ LogAndState: Usa un hilo por eficacia y un log para garantizar la robustez.

Page 16: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

WASHDB proporciona un API para tener acceso a una base de datos tradicional utilizando una interfaz transaccional.

Se utiliza HDBC para proporcionar conectividad con la base de datos.

Actualmente solo está testeado con base de datos PostgreSQL.

Page 17: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Colección de módulos para utilizar PostgreSQL desde Haskell.

Este conjunto de módulos se distribuye junto a WashNGo.

Prerrequisitos: ◦ Motor PostgreSLQ.

◦ c2hs (Generador de interfaces basado en librerías C).

Page 18: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Conjunto de interacciones entre un servidor y un cliente Web.

Implementación habitual: ◦ Sesiones mantenidas en el servidor. ◦ El servidor mapea testigos con sesiones. ◦ Los testigos se almacenan en cliente (cookies,

parametros URL, campos ocultos…).

Problemas: ◦ Si se duplican las ventanas del navegador se duplican las

sesiones. ◦ Ficheros en caché. ¿Cuándo se borra la información del

servidor?

Page 19: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

WASH mantiene la sesión almacenando toda la información en campos ocultos.

Ventajas: ◦ No es necesario almacenar información en cliente. ◦ Ningún estado de la sesión puede ser accedido

directamente por una petición de cliente. ◦ Permite a los usuarios utilizar el botón “Atrás” del

navegador sin perder la sesión.

Inconveniente: ◦ La información necesaria para almacenar el estado de la

sesión puede ser grande. Esto puede afectar al rendimiento.

Page 20: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

WASH permite la creación fácil y rápida de formularios y elementos de interacción.

Existen dos métodos para realizar programas interactivos que contengan formularios. ◦ GET.

◦ POST.

Page 21: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

El método GET:

◦ Utilizado por defecto.

◦ Añade el carácter ? a la dirección URL especificada en el atributo action y adjunta los valores de los campos codificados.

◦ Codificación: nombre1=valor1&nombre2=valor2&...nombreN=valorN

◦ El contenido de los datos también se asocia a la variable

QUERY_STRING

Page 22: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

El método GET: ◦ Ejemplo (Formulario simple) El siguiente programa muestra la

variable QUERY_STRING y solicita el nombre y apellidos. Obsérvese cómo se modifica el valor de dicha variable.

mainAsk =

do { putHeaderHtml; putStrLn "<html><head><title>Ask Nombre</title>"; putStrLn "<body>"; thisUrl <- getUrl; queryStr <- getEnvSafe "QUERY_STRING"; putStrLn ("QUERY_STRING = " ++ queryStr ++ "<br/>"); putStrLn ("<form action=\"" ++ thisUrl ++ "\" >"); putStrLn "Nombre: <input type=\"text\" name=\"nombre\" />"; putStrLn "Apellidos: <input type=\"text\" name=\"apellidos\" />"; putStrLn "<INPUT type=\"submit\" value=\"Enviar\"> "; putStrLn "<INPUT type=\"reset\" value=\"Borrar\"></form>"; putStrLn "</body>" > }

Page 23: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

El método POST debe especificarse mediante el atributo method.

Los valores del formulario son accedidos a través de la entrada estándard del programa CGI.

En la variable CONTENT_TYPE se indica el tipo de contenido y en CONTENT_LENGTH el número de bytes que se envían

Page 24: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Este tipo de programación se utiliza sobre todo en el ámbito de la investigación.

Lenguaje poco extendido en la industria.

No existe un conjunto de herramientas que facilite el desarrollo y la depuración.

El uso de base de datos está acotado a PostgreSQL.

El código generado está más estructurado.

Page 25: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

Es un lenguaje robusto. Lo que da seguridad ante sentencias mal formadas y problemas de tipado.

Las librerías disponen de una gran cantidad de componentes Web.

Aporta potencia a la hora de trabajar con sesiones y formularios.

La forma de tratar las sesiones puede ocasionar problemas de rendimiento.

Page 26: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

La potencia de HSP viene dada por la utilización de un lenguaje funcional como es Haskell junto con la simplicidad de la utilización de un lenguaje script.

Uno de los pasos a dar en este lenguaje es la creación de librerías. El resto de lenguajes aporta más librerias que facilitan su uso.

Page 27: “Web Authoring System Haskel” · utilizado para crear scripts para controlar sesiones, formularios y gráficos. Características: Las páginas web son representadas mediante estructuras

http://www.informatik.uni-freiburg.de/~thiemann/WASH/

www.haskell.org

http://www.di.uniovi.es/~labra/PLF/apuntes/cgi.html

http://www.haskell.org/haskellwiki/WaSh

http://www.lcc.uma.es/~blas/apuntes/PDAv/p2005-2006/HSP.ppt

Martínez, Jonatan: “Programación Internet con Haskell”. Mayo 2007.