05. Java Server Pages

download 05. Java Server Pages

of 59

Transcript of 05. Java Server Pages

  • JSPJava Server PagesJava Server Pages

  • Contenidos

  • Qu es JSP? Una tecnologa para crear pginas Web dinmicas Contiene cdigo HTML normal junto elementos especiales de JSP

    Estn construidas sobre servlets Estn construidas sobre servlets Internamente, el servidor de aplicaciones compilar JSP a un servlet

    Vienen a resolver el problema de aqullos (que era el mismo que con CGI), es decir: Generar HTML directamente por cdigo, en un lenguaje de programacin

    Dificulta enormemente la separacin de tareasseparacin de tareasentre diseadoresdiseadores y programadoresprogramadores

  • Insertar java en pginas HTML JSP (como ASP) aborda el problema a la inversa: En vez de insertar HTML en cdigo de programacin, podremos insertar programacin, podremos insertar ciertos elementos de cdigo en las pginas HTML

  • JSP: Introduccin Comparaciones con otras tecnologas:

    Vs ASP (Active Server Pages). Vs Servlets.

    Las JSP nos permiten separar la parte Las JSP nos permiten separar la parte dinmica de nuestras pginas Web del HTML esttico.

    Escribimos el HTML de la forma normal y encerramos el cdigo ejecutable con unas etiquetas especiales "".

  • Ejemplo de pgina JSP

    Saludo personalizado con JSP

    Buenos das!

    Buenas tardes!

    Buenas noches!

    Bienvenido a nuestro sitio Web, abierto las 24 horas del da.

  • Beneficio? Incluir mucha lgica de programacin en una pgina Web no es mucho mejor que generar el HTML por programa

    Pero JSP proporciona acciones (action Pero JSP proporciona acciones (action elements) que son como etiquetas HTML pero que representan cdigo reutilizable

    Adems, se puede invocar a otras clases Java del servidor, a componentes (Javabeans o EJB)

  • Separacin de presentacin y lgica En definitiva, lo que permite JSP (bien utilizado) es una mayor separacin entre la presentacin de la pgina y la lgica de la la pgina y la lgica de la aplicacin, que ira aparte Desde la pgina JSP nicamente llamaramos, de diferentes formas, a ese cdigo

  • JSP: Proceso de compilacin

  • Ejemplo: de JSP a Servlet (Tomcat)

  • JS

    P

    a

    S

    e

    r

    v

    l

    e

    t

    .

    s

    e

    r

    v

    i

    c

    e

    (

    )

    J

    S

    P

    a

    S

    e

    r

    v

    l

    e

    t

    .

    s

    e

    r

    v

    i

    c

    e

    (

    )

  • Elementos JSP Tres tipos de elementos en JSP:

    Directivas Permiten especificar informacin acerca de la pgina que permanece constante para todas las request

    Requisitos de bufferingPgina de error para redireccin, etc. Pgina de error para redireccin, etc.

    Acciones Permiten ejecutar determinadas acciones sobre informacin que se requiere en el momento de la peticin de la jsp

    Acciones estndar Acciones propietarias (Tag libs)

    Scripting Permite insertar cdigo java que sern ejecutadas en el momento de la peticin.

  • Elementos de scripting

    ElementoElemento DescripcinDescripcin

    ScriptletScriptlet. se usa para meter cdigo Java dentro. se usa para meter cdigo Java dentro

    ExpresinExpresin. Permite acceder al valor devuelto por . Permite acceder al valor devuelto por

    una expresin en Java e imprimirlo en OUTuna expresin en Java e imprimirlo en OUT

    una expresin en Java e imprimirlo en OUTuna expresin en Java e imprimirlo en OUT

    DeclaracinDeclaracin. Usada para declarar variables y . Usada para declarar variables y

    mtodos en la clase correspondiente a la pginamtodos en la clase correspondiente a la pgina

    ComentarioComentario. Comentario ignorado cuando se . Comentario ignorado cuando se

    traduce la pgina JSP en un traduce la pgina JSP en un servletservlet..

    (comentario en el HTML

  • Un ejemplo ms dinmico Hagamos una pgina JSP que, en funcin de la hora, muestre un saludo diferente (buenos das, buenas tardes o buenas noches)buenas tardes o buenas noches) Y que muestre tambin la hora actual

  • Ejemplo: expresin, saludo.jsp

  • Ejemplo: scriptlet, saludo.jsp

  • Ejemplo: declaracin, saludo.jsp

  • JSP: Objetos predefinidos El cdigo java incrustado en JSP tiene acceso a los mismos objetos predefinidos que tenan los servlets

    Aqu se llaman como sigue: Aqu se llaman como sigue: requestrequest

    responseresponse

    pageContextpageContext

    sessionsession

    applicationapplication

    outout

    configconfig

    pagepage

    Se puede acceder a

    ellos directamente

    desde los scriptlets

  • JSP: Objetos predefinidos REQUEST:

    HttpServletRequest asociado con la peticin Permite acceder a:

    Los parmetros de la peticin (mediantegetParameter)getParameter)

    El tipo de peticin (GET, POST, HEAD, etc.) Las cabeceras HTTP entrantes (cookies, Referer,etc.).

    Estrictamente hablando, se permite que lapeticin sea una subclase de ServletRequestdistinta de HttpServletRequest, si el protocolode la peticin es distinto del HTTP. Esto casinunca se lleva a la prctica.

  • JSP: Objetos predefinidos RESPONSE:

    Objeto de clase HttpServletResponse asociadocon la respuesta al cliente.

    Como el stream de salida tiene un buffer, eslegal seleccionar los cdigos de estado ylegal seleccionar los cdigos de estado ycabeceras de respuesta, aunque no estpermitido en los servlets normales una vez quela salida ha sido enviada al cliente.

  • JSP: Objetos predefinidos OUT:

    PrintWriter usado para enviar la salida alcliente.

    sta es una versin con buffer de PrintWriterllamada JspWriter. Podemos ajustar el tamaollamada JspWriter. Podemos ajustar el tamaodel buffer, o incluso desactivarlo, usando elatributo buffer de la directiva page.

    Se usa casi exclusivamente en scriptlets yaque las expresiones JSP obtienen un lugar enel stream de salida, y por eso raramente serefieren explcitamente a out.

  • JSP: Objetos predefinidos SESSION:

    HttpSession asociado con la peticin. Las sesiones se crean automticamente, poresto esta variable se une incluso si no hubierauna sesin de referencia entrante.una sesin de referencia entrante.

    La nica excepcin es usar el atributo sessionde la directiva page para desactivar lassesiones, en cuyo caso los intentos dereferenciar la variable session causarn unerror en el momento de traducir la pgina JSPa un servlet.

  • JSP: Objetos predefinidos APPLICATION:

    El ServletContext obtenido mediantegetServletConfig().getContext()

    CONFIG: El objeto ServletConfig. El objeto ServletConfig.

    PAGECONTEXT: PageContext nuevo contexto adems de Session yServletContext. Permite acceder a writer especificopara JSP y establecer atributos en mbito depgina.

  • Directivas Las directivas son mensajes al contenedor de JSP

    Ejemplos:ElementoElemento DescripcinDescripcin

    Permite importar clases Java, especificar el tipo de Permite importar clases Java, especificar el tipo de

    la respuesta (text/html por omisin), etcterala respuesta (text/html por omisin), etctera

    Permite incluir otros ficheros antes de que la Permite incluir otros ficheros antes de que la

    pgina sea traducida a un servletpgina sea traducida a un servlet

    Declara una biblioteca de etiquetas con Declara una biblioteca de etiquetas con accionesacciones

    personalizadas para ser utilizadas en la pginapersonalizadas para ser utilizadas en la pgina

    Forma general:

  • JSP: Directiva page import="package.class o import="packg.class1,...,packg.classN". Permite especificar los paquetes que deberan ser importados. El atributo import es el nico que puede aparecer mltiples veces.

    ContentType = "MIME-Type" o contentType = ContentType = "MIME-Type" o contentType = "MIME-Type; charset = Character-Set" Especifica el tipo MIME de la salida. El valor por defecto es text/html. Tiene el mismo valor que el scriptlet usando response.setContentType.

    isThreadSafe = "true|false". True (por defecto) indica procesamiento del servletnormal, mltiples peticiones pueden procesarse simultneamente con un slo ejemplar del servlet( el autor sincroniza los recursos compartidos). Un valor de false indica que el servlet debera implementar SingleThreadModel.

  • JSP: Directiva page session = "true|false".

    True (por defecto) indica que la variable predefinida session (del tipo HttpSession) debera unirse a la sesin existente si existe una, si no existe se debera crear una nueva sesin para unirla. False indica que no se usarn sesiones, y los intentos de acceder a la se usarn sesiones, y los intentos de acceder a la variable session resultarn en errores en el momento en que la pgina JSP sea traducida a un servlet.

    buffer = "sizekb|none".Esto especifica el tamao del buffer para el JspWriter out. El valor por defecto es especfico del servidor y debera ser de al menos 8kb.

    autoflush = "true|false".True (por defecto) indica que el buffer debera descargase cuando est lleno. Un valor de false, raramente utilizado, indica que se debe lanzar una excepcin cuando el buffer se sobrecargue. Un valor de false es ilegal cuando usamos buffer="none".

  • JSP: Directiva page extends="package.class".

    Esto indica la superclase del servlet que se va a generar. Debemos usarla con extrema precaucin, ya que el servidor podra utilizar una superclase personalizada.

    info = "message".Define un string que puede usarse para ser recuperado mediante el mtodo getServletInfo. el mtodo getServletInfo.

    errorPage = "url".Especifica una pgina JSP que se debera procesar si se lanzar cualquier Throwable pero no fuera capturado en la pgina actual.

    isErrorPage = "true|false".Indica si la pgina actual acta o no como pgina de error de otra pgina JSP. El valor por defecto es false.

    language = "java".Esto est pensado para especificar el lenguaje a utilizar. Por ahora, no debemos precuparnos por l ya que java es tanto el valor por defecto como la nica opcin legal.

  • Ejemplo directiva page Modificar la pgina de saludo para que en lugar de hacer referencia directamente a java.util.Date importe el paquete java.util

    Juego de Caracteres UNICODE latin-1

  • JSP: Directiva include Permite incluir ficheros en el momento en que la pgina JSP es traducida a un servlet.

    Los contenidos del fichero incluido son Los contenidos del fichero incluido son analizados como texto normal JSP y as pueden incluir HTML esttico, elementos de script, directivas y acciones.

    Uso: Barras de navegacin, copyright, etc.

  • Ejemplo: directiva include

  • Directiva taglib

    Declara que la pgina usa una librera de tags (acciones)

    ...

    Identifica la librera por su URI Le asocia un prefijo para usar en el cdigo de la JSP

    Syntax

    ...

    ...

  • Directiva taglib uri =taglib.tld

    Absoluto o relativo. Permite especificar el fichero de descripcin de la librera (.tld)

    tagdir = myTags Especifica el directorio bajo /WEB-INF/tags/ en el Especifica el directorio bajo /WEB-INF/tags/ en el cual hay ficheros de tags (.tag tagx) que no estn empaquetados en bibliotecas de tags

    prefix = c (fmt, etc). Prefijo que permite distinguir acciones cuando se importan varias bibliotecas

  • JSP: Acciones

    Usan construcciones de sntaxis XML para controlar el comportamiento del motor de Servlets. Podemos insertar un fichero dinmicamente, reutilizar componentes JavaBeans, reenviar al usuario a otra JavaBeans, reenviar al usuario a otra pgina, etc.

    Tipos de acciones Estndar A medida JSTL

    Nota: Los elementos XML, al contrario que los HTML, son sensibles a las maysculas

  • JSP: Acciones ejemplo

    JSP

    HTML generado

  • Acciones Elementos XML que realizan determinadas acciones. JSP define las siguientes (estndar):

    ElementoElemento DescripcinDescripcin

    Permite usar un Permite usar un JavaBeanJavaBean desde la pginadesde la pgina

    Obtiene el valor de una propiedad de un componente JavaBean Obtiene el valor de una propiedad de un componente JavaBean

    y lo aade a la respuestay lo aade a la respuesta

    Establece el valor de una propiedad de un JavaBeanEstablece el valor de una propiedad de un JavaBean

    Incluye la respuesta de un servlet o una pgina JSPIncluye la respuesta de un servlet o una pgina JSP

    Redirige a otro servlet o pgina JSPRedirige a otro servlet o pgina JSP

    Enva un parmetro a la peticin redirigida a otro servlet o JSP Enva un parmetro a la peticin redirigida a otro servlet o JSP

    mediante o mediante o

    Genera el HTML necesario para ejecutar un Genera el HTML necesario para ejecutar un appletapplet

  • JSP: Accin include Permite insertar ficheros en una pginaque est siendo generada.

    La sntaxis se parece a esto:

    Al contrario que la directiva

  • JSP: Accin useBean

    Permite cargar y utilizar un JavaBean en la pgina JSP yas utilizar la reusabilidad de las clases Java.

    Esto significa "usa un objeto de la clase especificada porclass, y nelo a una variable con el nombre especificadopor id".

    Ahora podemos modificar sus propiedades mediante, o usando un scriptlet y llamando aun mtodo de id. Para recoger una propiedad se usa

  • JSP: Accin useBean id

    Da un nombre a la variable que referenciar el bean. Se usar unobjeto bean anterior en lugar de instanciar uno nuevo si se puedeencontrar uno con el mismo id y scope.

    class Designa el nombre cualificado completo del bean.

    scope scope Indica el contexto en el que el bean debera estar disponible. Hay

    cuatro posibles valores: page, request, session, y application. type

    Especifica el tipo de la variable a la que se referir el objeto.

    beanName Da el nombre del bean, como lo suministraramos en el mtodo

    instantiate de Beans. Esta permitido suministrar un type y unbeanName, y omitir el atributo class.

  • JSP: Acciones: setProperty

    Para obtener valores de propiedades de los beans que se han referenciado anteriormente.

    2 usos: 2 usos: Despues de un useBean.

    ...

  • JSP: Acciones: setProperty

    Dentro de un useBean

  • JSP: Acciones: setProperty name:

    Este atributo requerido designa el bean cuya propiedad va a serseleccionada. El elemento jsp:useBean debe aparecer antes delelemento jsp:setProperty.

    property: Este atributo requerido indica la propiedad que queremos

    seleccionar.seleccionar. Hay un caso especial: un valor de "*" significa que todos los

    parmetros de la peticin cuyos nombres correspondan connombres de propiedades del Bean sern pasados a los mtodosde seleccin apropiados.

    value: Este atributo opcional especifica el valor para la propiedad. Los

    valores string son convertidos automticamente a lo quecorresponda mediante el mtodo estndard valueOf. No sepueden usar value y param juntos, pero si est permitido no usarninguna.

  • JSP: Acciones: setProperty param

    Este parmetro opcional designa el parmetro de lapeticin del que se debera derivar la propiedad.

    Si la peticin actual no tiene dicho parmetro, no sehace nada: el sistema no pasa null al mtodoseleccionador de la propiedad. As, podemos dejarseleccionador de la propiedad. As, podemos dejarque el bean suministre los valores por defecto,sobrescribindolos slo cuando el parmetro diceque lo haga.

  • Ejemplo de uso
  • Ejemplo de uso
  • Comunicacin entre jspPosibles mbitos

  • Acciones JSTL, ejemplo

    Con tag-libs no hay scriplet

  • Desarrollo de TAG-LIBs

    Podemos desarrollar nuestras propias etiquetas de accin

    Para ello:Desarrollamos la clase que implementa Desarrollamos la clase que implementa la accin

    Describimos la etiqueta en la TLD Para usarla, la damos de alta en el web.xml (puesto que no es una etiqueta estndar).

  • Desarrollo de TAG-LIBs Desarrollo de la clase

    (manejador del tag): Los interfaces y clases necesarios estn definidos en javax.servlet.jsp.tagext

    Tag Define los mtodos necesarios para implementar cualquier accin

    IterationTag Extiende el javax.servlet.jsp.tagext Tres interfaces Y dos clases de soporte:

    TagSupport BodyTagSupport

    IterationTag Extiende el interface Tag y define los mtodos necesarios para iterar sobre los elementos del cuerpo del tag

    BodyTag Extiende el IterationTag y define los mtodos para acceder al cuerpo del tag

  • Desarrollo de TAG-LIBs

  • Ejemplo: implementacin de tagsignature

    JSP

    HTML generado

  • Ejemplo: implementacin de tagPasos

    Crear una nueva clase extiende TagSupport Aadir atributos y sus setters Implementar mtodos doEndTag() Implementar mtodos doEndTag()

    Crear archivo TLD Copiar en WEB-INF/tlds

    Registrar TagLib en web.xml Declararla en JSP

  • Ejemplo: implementacin de tagpaso: Crear la clase

  • Ejemplo: implementacin de tagpaso: Crear archivo TLD

  • Ejemplo: implementacin de tagpaso: Registrar en web.xml

  • Ejemplo: implementacin de tagpaso:
  • Referencias

    www.javasoft.com www.theserverside.com http://paginaspersonales.deusto.es/dipina/dipina/

    Java Server Pages [2nd Edition]OReilly