Mi cursada - UNQ‎ > ‎Clases‎ > ‎Bitácoras‎ > ‎Bitácoras 2011 S2‎ > ‎

Clase 6 - Web - servlets - jsp

publicado a la‎(s)‎ 28 sept. 2011 17:18 por gisela decuzzi   [ actualizado el 28 sept. 2011 17:21 ]

Arrancamos diciendo que teniamos problemas mas complejos y que ya no nos servia el compartir html estático porque queremos hacer aplicaciones con datos dinámicos.


Tomcat

Es un application Server. Donde viven nuestros objetos y es el application server el que se encarga de algunas cuestiones tecnológicas.

Nosotros vamos a usar Tomcat tambien hay otros como por ejemplo:

  1. Glassfish

  2. Jboss

  3. Caucho

  4. ...


Servlet: es una interfaz, que principalmente tiene un método service(Request, Response).

Request: dada la informacion que viene me provee de una interfaz para manipular los datos del pedido

Response: es nuestra manera de dar respuesta al pedido.

Las tres son interfaces de bajo nivel, con esto queremos decir que están muy pegadas al modelo web: request, response y nos abstrae muy poco de lo que representa.


Server Page: Recibe pedido http devuelve una pagina html abstrayendonos a mayor nivel. Nos permite incluir contenido dinámico. Ya no tenemos una página html puramente estática.

Comunmente en páginas jsp se usa mucho scriptlets que es algo que no vamos a ver en UI porque involucra muchas cuestiones tecnológicas que nos desvían de nuestro objetivo.


Expresion Lenguage: Lenguaje de expresiones, expresiones que se calculan dinámicamente como por ejemplo ${nombre}


Taglibrary: Son tags propios de las distintas tecnologías, uno puede crear sus propias librerias de tags, en UI no vamos a implementar nuestras propias librerias de tags pero sí vamos a usar jstl que es una librería que ya viene implementada. Vimos ejemplos mostrando estructuras de control ya implementadas, en el ejemplo:

<c:if test=”${sessionScope.libros != null}”>

</c:if>

<c:forEach itmes=...>

</c:forEach>


Empezamos a ver MVC en la web con las tecnologías que mencionamos:

M: programado en nuestro dominio

V: html, jsp

C: servlets


Pasamos a algo más práctico y fuimos al ejemplo de un buscador de libros donde teniamos:

    • Un campo para introducir texto y buscar los libros que tengan como titulo lo buscado (o parte de lo buscado)

    • Una tabla donde veiamos las respuetas

    • A su vez los nombres de los libros eran links que nos llevaba a otra página.


Antes de ver el código nos imaginamos los objetos que teniamos dijimos:


Fuimos al codigo y navegamos el proyecto.

Buscamos las páginas (los .jsp) encontramos detalle.jsp e index.jsp (ahí resulto lo que imaginabamos :)).

Abrimos index.jsp

Vimos varios encabezados, que los mencionamos rápidamente para poder ver el contenido dinámico

Dijimos que su funcionamiento era:

Todos los pedidos llegan a un servlet, el servlet delega en el dominio,

Vimos que habia un form que hacia un submit haciendo un post llendo a la direccion search y nos preguntamos ¿como los resuelve? Entonces nos fijamos en el web.xml ahí vimos que estaba definiendo que todos los pedidos que vengan con el patron /search los va a enviar a un SearchServlet (que estaba especificado donde se creaba).

Entonces nos fuimos a SearchServlet y vimos el método doPost, hablamos de servlets y jsp y por qué decimos tantas veces que no nos parece una tecnología “felíz”.

Volvimos al método doPost:

    • obteníamos el título del request

    • buscabamos el libro (se lo delegabamos al dominio: la Biblioteca)

    • seteabamos en la session un atributo libros (que era el resultado de la busqueda)

    • al request lo reenviabamos al index.jsp

Hablamos 4 formas de pasar informacion en jsp (en otras tecnologias el mismo concepto esta con distintos nombres):

  1. Parámetros: Son los que vienen por ejemplo en la url al hacer un get

  2. Requests: El objeto que llega a mi servlet: me llegó por parámetro y como todo objeto lo puedo mandar también y lo usamos para compartir información entre todos los objetos a los que les llegó.

  3. Session: Espacio compartido entre todos los pedidos de un mismo usuario.

  4. Application: Información común a todos los usuarios. (no es generalmente usado)

  5. Page scope: le corresponde solamente a la página que setteo ese objeto


Hablamos sobre el estado dentro de la web y el efecto de nuestras acciones.

Y a partir de ahí mencionamos algunos problemas de la web

Estado

Contamos que el http es un protocolo no orientado a la conexión y que en realidad un servlet es un modelo donde llega un pedido lo procesa, responde y se olvidó de todo lo que pasó, del usuario, etc.

Pero nosotros queremos acordarnos de algunas cosas, como por ejemplo el usuario. Nosotros queremos mantener estado.

A nivel usuario eso se logra con la sesion.

El primer pedido manda un identificador para que genere una cookie y el browser se compromete a que en cada pedido le mande ese identificador y asi establece una sesión (que esta en el server). El browser decide en qué momento uno esta en la misma sesión o no.

Consecuencias del abuso de la sesion

    • problemas de memoria, si nadie saca lo que puso en la sesion la vamos arrastrando

    • colisiones de nombres en el modelo clave-valor en la sesión

Doble submit

¿Cómo distinguir un pedido verdadero de uno accidental? ¿O un pedido que llega por un refresh?

Comunicación unidireccional

La comunicación se inicia del lado del cliente hacia el servidor. Todo lo que emule una conexión bidireccional en realidad son “trucos” que se hace para hacernos creer que esto está pasando. Porque la tecnología web no contempla este modelo, con lo cual a partir de ahí se nos hace todo cuesta para arriba.

Revisamos nuestra página tan simple y la vimos con mas cariño entonces apreciamos otras cosas que estaban pasando:

  1. Cuando haces una busqueda el textfield tiene el valor buscado ¿cómo lo obtuvo? En realidad SIEMPRE lo estamos obteniendo como un parámetro vimos el jsp y notamos que el atributo titulo del input estaba seteado a “${param.titulo}”. Si se lo sacamos nuestro input ya no muestra lo buscado

  2. No siempre mostraba la grilla con los resultados ¿Como lo maneja? Para eso vimos que usaba el tag <c:if ...> que chequeaba por la presencia del atributo libros dentro de la sesion y que es en nuestro server donde se setea esta variable.

  3. El contenido de la grilla es distinta según los resultados de la búsqueda. Miramos como lo logra con el <c:forEach ...> y mas expresiones que se usan para reemplazar distintas variables

Nos fuimos a detalle.jsp

Vimos otro tag set que setea una variable con scope page (libro) y al mirar el resto de la página dijimos que era muy similar a lo que vimos en index con lo que no nos detuvimos mucho en los tags que usamos.


Comments