Está en la página 1de 57

JSP (java server pages)

Permiten meter cdigo java en un fichero html en vez de cdigo html


en un fichero java.
Cuando ponemos cdigo java en un fichero html, dicho fichero pasa a
tener extensin jsp.
Los .jsp generan .java (servlets). Los servlets compilados son .class.
Es el contenedor de aplicaciones (tomcat, etc) el que convertir los
jsp en servlets.
El servidor leer el archivo jsp. Luego, va a buscar el jsp compilado
(el .class), si no lo encuentra, lo compila.
Traduccin: pasar de jsp a java.
Compilacin: pasar de java a .class
pablomonteserin.com

Dnde est el .java y el .class


generados por el jsp...?

pablomonteserin.com

Dnde est el .java y el .class


generados por el jsp...?
Si tenemos el Servidor configurado de la siguiente forma en Eclipse...

... estarn en la carpeta


Servidor Apache/work/Catalina/.../org/...
Si borro esta carpeta, se volver a
generar la prxima vez que arranque la
aplicacin.

Nota: para que se generen


correctamente estos ficheros .java
y.class es recomendable ejecutar
nuestro proyecto en un navegador
externo a eclipse, y no en el propio
que viene embebido en la IDE.
Para poder modificar estas opciones no puede haber
ningn proyecto desplegado en el servidor.

pablomonteserin.com

Almacenaremos los archivos jsp en la carpeta


WebContent (eclipse) o web (netbeans).

pablomonteserin.com

Error al cargar el JRE

Proyecto -> Properties -> Java Build Path ->


Libraries -> Add Library -> JRE
pablomonteserin.com

Hola mundo con Scriptlet


<h1>Scriptlet JSP</h1>
<%= "Hola Mundo JSP Scriplet" %>
<%= request.getParameter("nombre") %>

Comentarios
<h1>Pgina con comentarios</h1>
<%
//Esto es un comentario de una sola lnea
/*
* y esto un comentario de varias lneas
*/
%>
pablomonteserin.com

Variables en Scriplet

pablomonteserin.com

El contenedor transforma un JSP


en un servlet
JSP

Servlet

public class basicCounter_jsp extends SomeSpecialHttpServlet{


public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws java.io.IOException, ServletException{
PrintWriter out = response.getWriter();
response.setContenType("text/html");
<html><body>
-> out.println("<html><body>");
<% int count=0; %>
-> int count = 0;
This page count is now: -> out.write("This page count is now:");
<%= ++ count %>
-> out.print(++count);
</body></html>
-> out.write("</body></html>");
Todo el cdigo de un scriplet cae dentro del mtodo service.
Por tanto, las variables declaradas en un scriplet son locales.

pablomonteserin.com

Declaracin de variables y
mtodos miembro
Todo lo que vaya precedido de una admiracin ir
declarado directamente dentro de la clase, por tanto
usar el signo de exclamacin para declarar
variables miembro y mtodos

<html>
<body>
<%! int doubleCount(){
count = count*2;
return count;
}
%>
<%! int count=1; %>

The page count is now:


<%= doubleCount() %>
</body>
</html>

public class basicCounter_jsp extends SomeSpecialHttpServlet{


int doubleCount(){
count = count*2;
return count;
}
int count=1;
public void _jspService(HttpServletRequest request,
HttpServletResponse response throws java.io.IOException){
PrintWriter out = response.getWriter();
response.setContentType("text/html");
out.write("<html><body>");
out.write("The page count is now:");
out.print(doubleCount());
out.write("</body></html>");

pablomonteserin.com

Objetos implcitos
JspWriter
HttpServletRequest
HttpServletResponse
HttpSession
ServletContext
ServletConfig
Throwable

-> out
-> request
-> response
-> session
-> application
-> config
-> exception

pablomonteserin.com

JSP API

jspInit();

-> ejecutado al cargar el jsp

jspDestroy(); -> ejecutado tras cargar el jsp


_jspService(); -> desde aqu se llama al cdigo
del jsp.

pablomonteserin.com

Desventajas de los scriplets


* Son dificiles de compronder por alguien que no sea
programador java.
* Es necesario hacer el Casting de objetos y esto
ocasiona que tengamos que importar ms Clases en los
JSP. En el siguiente ejemplo habr que importar la clase
Libro.
<% Libro libro = (Libro)request.getAttribute("libro"); %>
<%=libro.getTitulo()%><br/>

pablomonteserin.com

EL

Caractersticas:
- Simplifican el uso de expresiones en JSPs.
-Permite la ejecucin de expresiones fuera de los elementos de scripting de
JSP
- Fue introducida con JSTL 1.0 como un mecanismo alternativo al uso de
expresiones en Java para asignar valores a atributos
-EL es mucho ms tolerante con las variables null y realiza conversiones
automticas de datos
Se puede habilitar o deshabilitar el uso de expresiones EL:
<%@ page isELIgnored="false" %>

<h1>EL</h1>
${Hola Mundo EL}
${param.nombre}

pablomonteserin.com

JSTL (Java Server Page


Standard Tag Library)
Son un conjunto de etiquetas (tags) standard que encapsulan funcionalidades
de uso comn para muchas aplicaciones con JSPs.
Ventajas de JSTL frente a scriptlet:
* Debido a que las etiquetas JSTL son XML, se integran uniformemente con
las etiquetas HTML y sern faciles de usar por alguien que conozca html.
* Las etiquetas JSTL estn especficamente preparados para realizar las
tareas que van a tener lugar en la lgica de la presentacin.
* EL es usado extensamente en la librera JSTL.
Desventajas:
* Agregar mayor sobrecarga al servidor. El cdigo Java embebido en los
scriptlets es bsicamente copiado en el servlet resultante. En cambio, las
etiquetas JSTL, causan un poco ms de cdigo en el servlet. En la mayora de
casos esta cantidad no es mensurable pero debe ser considerado.
* Los scriptlets son ms potentes que las etiquetas JSTL. Si desea hacer
todo en un script JSP pues es muy probable que insertar todo el cdigo Java
en l.
pablomonteserin.com

Cargar JSTL

Nota:
Para trabajar con jstl y con custom tags no har falta
modificar el web.xml. La etiqueta taglib qued
obsoleta en los servlets 2.4.

- Dejamos los archivos jstl.jar y standard.jar en la carpeta lib de


nuestro proyecto. Descargar libreras.
- Incluimos las siguientes etiquetas en la cabecera de nuestro jsp:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
La direccin http no es buscada en internet, sino en los tld (tag library
descriptor) que contienen los jar. El texto concreto de esta url carece de
importancia, mientras coincida con la url que posee el tld.

<c:out value=Hola Mundo JSTL!></c:out>


<c:out value=${param.nombre} />

pablomonteserin.com

Ejercicio saludo
Que se muestre un mensaje que diga: Buenas
tardes Jose, dnde Jose ser el valor de una
Variable. Utilizar scriplet, JSTL y EL para recuperar la
informacin.
Directiva para cargar JSTL:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Nota:
- El atributo default de la etiqueta <c:out/> contiene la
informacin que se imprimir en caso de que la variable nos
venga nulo.

pablomonteserin.com

Enviar formulario

pablomonteserin.com

Ejercicio - enviar y recojer la informacin de un textarea.


Utilizar scriplets, EL y JSTL

<textarea style="width:200px; height:100px"></textarea>

pablomonteserin.com

El name identifica a cada elemento; el value es la


informacin que contiene.
Con request.getParameter() recuperas el value
del elemento cuyo name le ests pasando como
parmetro.
Todas las personas tenemos un nombre y un
valor, para conocer el valor de una persona en
concreto, deberemos conocer su nombre, para
poder identificarla.

pablomonteserin.com

Ejercicio Recuperar la
informacin
de un textarea y cargarla en tres
campos de texto.
Para recuperar los valores, en un
campo usaremos un scriplet, en
otro cdigo EL y en el otro cdigo
JSTL.
pablomonteserin.com

Ejercicio enviar y recoger la


informacin de una combo
Utilizar scriplets, EL y JSTL

<select name=nombre>
<option value=juan>Juan
</option>
</select>
pablomonteserin.com

Instanciar I
Instanciar una clase desde un JSP utilizando scriplet.

<h1>Con scriplets JSP</h1>


<%= new com.pablomonteserin.model.StringExtendido() %>
<%@page import="com.pablomonteserin.model.StringExtendido"%>
<%= new StringExtendido() %>

pablomonteserin.com

Ejercicio Instanciar II
Imprimir utilizando scriptlet
(<%= %>) una instancia de la
clase Date.
Tener en cuenta que la clase Date
pertenece al paquete java.util
pablomonteserin.com

getAttribute() vs getParameter()
Devuelve una cadena de texto:
request.getParameter("nombre");
${param.nombre}
Devuelve un objeto:
request.setAttribute("nombreAtributo", valorAtributo);
guarda un objeto en el request.
request.getAttribute("nombreAtributo");
devuelve un objeto.
${requestScope.nombreAtributo.nombrePropiedad}
pablomonteserin.com

Ejemplo Recuperar un Bean Libro que tiene un


metodo getTitulo();
servlet.java
Libro libro = new Libro("978-84-415-2988-5", "Java 7", 15.8);
request.setAttribute("libro", libro);
request.getRequestDispatcher("index.jsp").forward(request, response);
index.jsp
Scriplet
<% Libro libro = (Libro)request.getAttribute("libro"); %>
Observese que utilizando
<%=libro.getTitulo()%><br/>

Scriplet es necesario hacer


un casteo para recuperar
la informacin y usando
EL y JSTL, no.

EL
${requestScope.libro.titulo}
JSTL
<c:out value="${requestScope.libro.titulo}"></c:out>

pablomonteserin.com

Ejercicio Instanciar III


La aplicacin consta de un servlet, un bean Persona(dni, nombre y direccin) y un
fichero jsp.
El flujo de la aplicacin comienza en el servlet. Aqu instanciaremos e
inicializaremos un bean Persona.
Luego, utilizando el mtodo
request.getRequestDispatcher("rutaHastaElJSP").forward(request, response);
iremos al jsp.
Aqu mostraremos las propiedades del bean utilizando scriptlet, EL y JSTL.

pablomonteserin.com

Ejercicio
Hacer un formulario html con tres campos (dni, nombre y edad) de tal forma que al pulsar
se muestre un texto con el siguiente formato.
El seor nombre con dni dni vive en la direccin edad.
edad
Al pulsar el botn de submit enviaremos la informacin al servlet, que recoger los
parmetros, crear un bean a partir de ellos y pondr dicho bean en el request.
Luego, iremos a un nuevo jsp utilizando
request.getRequestDispatcher("rutaHastaElJSP").forward(request, response);
Una vez aqu, pintaremos las propiedades del bean utilizando scriptlet, EL y JSTL.

pablomonteserin.com

Estructuras de control

pablomonteserin.com

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<h1>Scriptlet JSP</h1>
<%
int dato1 = 3;
int dato2 = 5;
if(dato2 > dato1){
out.println("dato2 es mayor que dato1");
}else{
out.println("dato2 es mayor que dato1");
}
%>
<h1>EL</h1>
${5 gt 3}- 1 -${5 > 3} - 2 - ${5 lt 3} - 3 -${5 < 3} - 4 -${5 eq 1}
<h1>JSTL</h1>
<c:if test="${5>3}">
5 es mayor que 3!
</c:if>

if
pablomonteserin.com

Procesar el formulario en la
propia pgina

pablomonteserin.com

Ejercicio

Repetir el ejemplo de la diapositiva anterior usando JSTL

pablomonteserin.com

else

pablomonteserin.com

Ejercicio Aadiendo un scriplet al siguiente cdigo,


controlar que si el botn no fue pulsado se
muestre el mensaje
El boton no fue pulsado!

Aadir las lneas aqu

pablomonteserin.com

Ejercicio repetir el ejercicio de la


diapositiva anterior usando JSTL

pablomonteserin.com

Ejercicio Si he pulsado el botn de


enviar, imprimir el value del campo
de texto; si no, imprimir
Boton no pulsado. Utilizar un scriplet.

pablomonteserin.com

Ejercicio

Repetir el ejercicio de la diapositiva anterior


usando JSTL.

pablomonteserin.com

Ejercicio Mandar un formulario


resolver utilizando scriplet

pablomonteserin.com

Ejercicio

Repetir el ejercicio de la diapositiva anterior


utilizando JSTL.

pablomonteserin.com

Ejercicio cambiar color body


utilizar scriplet

pablomonteserin.com

Ejercicio

Repetir el ejercicio anterior utilizando JSTL.

pablomonteserin.com

Ejercicio
La combo debe recordar la opcin seleccionada
tras hacer submit.
Pista!:
Una opcin de una combo est seleccionada si
tiene su atributo
selected con el siguiente valor:
selected = selected

pablomonteserin.com

Ejercicio
Hacer una calculadora que haga uso de los
operadores aritmticos +, -, *, /. Al pulsar el botn
de envo realizar la operacin seleccionada.
Resolveremos el problema utilizando sentencias
condicionales if dentro de un scriplet.

pablomonteserin.com

Ejercicio

Repetir el ejercicio anterior usando JSTL.

pablomonteserin.com

bucle for

pablomonteserin.com

Ejercicio imprimir los numeros


pares que hay dentro de los 1000
primeros nmero naturales
Nota: El operador % nos da el resto de dividir un
nmero entre otro.
Ej: 7%2=1

pablomonteserin.com

Bucle con JSTL

pablomonteserin.com

Recorrer una collection

pablomonteserin.com

Recorrer una collection con


contador
<ul>
<c:forEach var="persona" items="${requestScope.collection}" varStatus="status">
<li>item <c:out value="${status.count}" />
<c:if test="${status.first}">(this is the first item!)</c:if>
<c:if test="${status.last}">(this is the last item!)</c:if>
</li>
</c:forEach>
</ul>

Salida:
-

item 1 (this is the first item!)


item 2
item 3
item 4 (this is the last item!)

pablomonteserin.com

Ejercicio recorrer una collection de personas y


maquetar el resultado de la siguiente forma.
La carga de informacin de la coleccin la haremos
mediante un Servlet; sin usar base de datos.

Enlace para ver tablas co

pablomonteserin.com

Asignar valor a variables con


JSTL

<c:set var="nombreVariable" value="valor"/>


<c:out value="${nombreVariable}" />
${nombreVariable}

pablomonteserin.com

Inclusin de JSP's

pablomonteserin.com

<%@ include file="Header.html" %>

La inclusin se ejecuta en tiempo de traduccin, se genera un


nico fichero java a partir de uno o varios JSP.
No permite importar una direccin url.

pablomonteserin.com

<jsp:include page="Header.jsp" />

Esta es la etiqueta que usualmente usamos.


Es la versin xml de la directiva anterior.

pablomonteserin.com

<c:import url="http://google.es" />


Para usarla hay que importar la librera jstl.
Es igual que <jsp:include, pero con ms
posibilidades.
Permite importar url's externas.

pablomonteserin.com

Ejercicio
Hacer dos pginas web cuyas secciones cabecera y
botonera sean cargadas con la etiqueta <jsp:include ... />
Para realizar este ejercicio tendremos que crear cuatro
documentos:
- cabecera.html
- botonera.html
- pagina1.jsp
- pagina2.jsp

pablomonteserin.com

Ejercicio
Ahora los links de la botonera enlazarn con la
propia pgina, pasndole un parmetro que ser
recogido y usado para que una etiqueta <c:choose> procese el
parmetro y cargue el contenido correspondiente.
Para realizar este ejercicio
necesitaremos 5 pginas:
- cabecera.html
- botonera.html
- contenido1.html
- contenido2.html
- index.jsp

pablomonteserin.com

Aviso Legal
Los derechos de propiedad intelectual sobre el presente documento son titularidad de D. Pablo Montesern Fernndez Administrador,
propietario y responsable de pablomonteserin.com. El ejercicio exclusivo de los derechos de reproduccin, distribucin, comunicacin
pblica y transformacin pertenecen a la citada persona.
Queda totalmente prohibida la reproduccin total o parcial de las presentes diapositivas fuera del mbito privado (impresora
domstica, uso individual, sin nimo de lucro).
La ley que ampara los derechos de autor establece que: La introduccin de una obra en una base de datos o en una pgina web
accesible a travs de Internet constituye un acto de comunicacin pblica y precisa la autorizacin expresa del autor.
El contenido de esta obra est protegido por la Ley, que establece penas de prisin y/o multa, adems de las correspondientes
indemnizaciones por daos y perjuicios, para quienes reprodujesen, plagiaren, distribuyeren o comunicaren pblicamente, en todo o
en parte, o su transformacin, interpretacin o ejecucin fijada en cualquier tipo de soporte o comunicada a travs de cualquier
medio.
El usuario que acceda a este documento no puede copiar, modificar, distribuir, transmitir, reproducir, publicar, ceder, vender los
elementos anteriormente mencionados o un extracto de los mismos o crear nuevos productos o servicios derivados de la informacin
que contiene.
Cualquier reproduccin, transmisin, adaptacin, traduccin, modificacin, comunicacin al pblico, o cualquier otra explotacin de
todo o parte del contenido de este documento, efectuada de cualquier forma o por cualquier medio, electrnico, mecnico u otro,
estn estrictamente prohibidos salvo autorizacin previa por escrito de Pablo Montesern.
El autor de la presente obra podra autorizar a que se reproduzcan sus contenidos en otro sitio web u otro soporte (libro, revista,
e-book, etc.) siempre y cuando se produzcan dos condiciones:
1. Se solicite previamente por escrito mediante email o mediante correo ordinario.
2. En caso de aceptacin, no se modifiquen los textos y se cite la fuente con absoluta claridad.
Una parte de las imgenes utilizadas en este documento no son propiedad de Pablo Montesern, por lo que, si alguna de estas
imgenes estuviera sujeta a derechos de autor, o a algn otro tipo de derecho que impida su publicacin en este documento, una vez
que el autor, Pablo Montesern, tenga conocimiento del hecho, proceder a la retirada inmediata de la imagen protegida por los
derechos pertinentes.

pablomonteserin.com

También podría gustarte