Tema 4: Tecnologías Web Java
Introducción Aplicación web Aplicación que corre en al menos un servidor y a la que el usuario accede desde un cliente de propósito general (ej.: navegador en un PC, teléfono WAP, etc.) La comunicación en la Web gira en torno al protocolo HTTP Protocolo de nivel de aplicación Funciona sobre TCP Usa el puerto 80 por defecto Modelo petición/respuesta No tiene estado Al igual que SMTP, es un protocolo ASCII, que usa MIME para transferir información no ASCII
HTTP (1) Tipos de peticiones GET, POST, PUT, DELETE, TRACE, OPTIONS, HEAD Las dos tipos de peticiones más relevantes en aplicaciones web son GET y POST Ejemplo de GET Utilizamos un navegador para acceder a http://www.gris.des.fi.udc.es/~fbellas/is/index.html El navegador abre una conexión TCP al puerto 80 de la máquina www.gris.des.fi.udc.es (resuelve el nombre por DNS) y envía una petición similar a: GET /~fbellas/is/index.html HTTP/1.0 << Otros campos >>
HTTP (2) Ejemplo de GET (cont) El servidor responde con HTTP/1.0 200 OK << Otros campos >> Content-Type=text/html; ISO-8859-1 << Otros campos >> <html> << Resto del contenido de la página de IS >> </html> Parámetros en peticiones GET URL?par1=val1&par2=val2... &parn=valn Ejemplo en una página HTML... <a href= /forecast?city=hermosa+beach&state=ca > Temperatura en Hermosa Beach </a>...
HTTP (3) Parámetros en peticiones GET (cont) Al hacer clic en el enlace anterior, se le enviaría una petición GET /forecast?city=hermosa+beach&state=ca al servidor del que nos hemos bajado la página Caracteres en el valor de un parámetro Caracteres ASCII alfanuméricos y signos. (punto), - (guión), * (asterisco) y _ (subrayado) => tal cual Espacio en blanco => sustituir por + Resto de caracteres => %xy Las anteriores sustituciones las tiene que hacer la persona que escribe/genera el fichero Si un par par=val aparece más de una vez, el parámetro correspondiente es multivaluado (su valor es un vector de valores)
HTTP (4) Peticiones POST Suelen usarse para enviar los datos de un formulario (ej.: un formulario HTML) Pero también pueden enviarse por GET Los datos se envían como parámetros, pero éstos no forman parte de la URL, sino que se envían como parte del cuerpo del mensaje El cliente (navegador) codifica automáticamente los valores de los parámetros asociados a un formulario (tanto si se envía por POST como por GET) Ejemplo en un formulario HTML... <form action= /forecast method= POST > City: <input type= text name= city > State: <input type= text name= state > <p> <input type= submit > </form>...
HTTP (5) Peticiones POST (cont) Cuando el usuario pulsa el botón de submit, se envía una petición POST al servidor del que nos hemos bajado el formulario POST /forecast HTTP/1.0 <<Otros campos>> city=hermosa+beach&state=ca Cuando un formulario se envía por GET, los parámetros forman parte de la URL, y en consecuencia se puede hacer un bookmark (marcador) a esa página Si el formulario anterior se envía por GET, después de pulsar en el botón submit, el navegador mostraría la URL http://xxx/forecast?city=hermosa+beach&state=ca Útil para poder hacer bookmarks a resultados de búsquedas
HTTP (6) Tipos de URLs URL absoluta http://www.gris.des.fi.udc.es http://knopfler.gris.des.fi.udc.es:8080/minibank Útiles en navegadores Útiles en ficheros cuando se quieren hacer enlaces a otros servidores No deberían usarse cuando se trata de enlaces al mismo servidor, dado que si cambiamos los ficheros de servidor habrá que cambiar todas la URLs que contengan Path absoluto /MiniPortal/MainPage.jsp /~fbellas/teaching/is/index.html Útil cuando se quiere hacer un enlace a una página dentro del mismo servidor
HTTP (y 7) Tipos de URLs (cont) Path relativo En el fichero /~fbellas/teaching/is/index.html podríamos incluir las siguientes URLs../adoo/index.html J2EE-Examples-src-1.0.tar.gz Útil cuando se quiere hacer un enlace a una página dentro del mismo servidor En la mayor parte de los casos, suelen preferirse a las de tipo path absoluto, dado que muchas veces no será necesario cambiarlas aunque modifiquemos la estructura del sitio web HTTP no sirve sólo para transportar HTML o imágenes Otros usos típicos XML (quizás con SOAP) WML Las tecnologías que estudiaremos (en realidad, todas las existentes) pueden usarse para generar cualquier tipo de información válida sobre HTTP
WAP (1) Acceso al web desde dispositivos móviles WAP es una pila de protocolos que nada tiene que ver con TCP/IP WML es el lenguaje equivalente a HTML para móviles Es una aplicación de XML Lógicamente, tiene menos posibilidades gráficas Una aplicación WAP Móvil Gateway Servidor aplicaciones web WML WAP WML HTTP TCP/IP
WAP (y 2) Una aplicación WAP (cont) Servidor aplicaciones web Es una máquina de la intranet de nuestra empresa que corre un servidor de aplicaciones web normal y corriente La única diferencia es que no generamos HTML sino WML Por tanto, para hacer una aplicación WAP, podemos emplear las tecnologías y técnicas de diseño que veremos en este tema Gateway Suele estar en una operadora de móviles Convierte {HTTP+TCP/IP} a WAP, y viceversa
Tecnologías Antes CGI Crea un proceso por cada petición Ineficiente Se implementaron algunas variantes más eficientes Ahora (tema 1) J2EE => Servlets + JSP (Java Server Pages) + JSTL (JSP Standard Tag Library) Apache Struts (no forma parte de J2EE).NET => ASP.NET PHP, Perl, Python, Ruby (Ruby on Rails), etc.
Servlets, JSP, JSTL y Apache Struts (1) Una vista por capas Una capa no oculta a la inferior Apache Struts (org.apache.struts.*) JSTL JSP (javax.servlet.jsp y javax.servlet.jsp.tagext) Servlets (javax.servlet y javax.servlet.http)
Servlets, JSP, JSTL y Apache Struts (y 2) En general, estudiaremos cada tecnología con sencillos ejemplos Ejemplo HelloUser Un sencillo Portal Poco a poco iremos haciendo una versión mejor, hasta llegar a MiniPortal en el apartado 4.6 Se irán introduciendo conceptos progresivamente, que muchas veces serán aplicables a tecnologías de nivel inferior Gran parte de estos conceptos son relativos al API de servlets, que en vez de exponerlos todos en el apartado 4.1, se irán introduciendo en sucesivos apartados a medida que lo requieran los ejemplos Con el diseño e implementación de las capas vista y controlador de MiniBank y MiniPortal (apartados 4.5 y 4.6) se ilustrarán patrones de diseño Los implementa Apache Struts!