JSP/SERVLETS

Transcripción

JSP/SERVLETS
JSP/SERVLETS
ISIS 3710
Aplicaciones Web
Servidor/Contenedor web
-
Lógica de negocio
Procesamiento
computacionalmente costoso
Bases de datos SQL/NoSQL
CDNs: content deliver network
Motores de minería de datos, BI
Servidor
Componentes del lado
del servidor: JSP, JSF, PHP, EJBs
Aplicaciones Web
Servidor/Contenedor web
Solicitud HTTP
Componente
del lado
del servidor
Aplicaciones Web
Servidor/Contenedor web
Solicitud HTTP
Contenido que puede
ser interpretado/visualizado
del lado del cliente
Componente
del lado
del servidor
Servlet
-
Componente del lado del servidor que se implementa
como una clase en Java
-
Recibe datos del cliente embebidos en una solicitud
HTTP
-
Retorna datos al cliente embebidos en una respuesta
HTTP
Servlet: formas de uso
1. Generación directa de un flujo de contenido sobre el
HTTP response: HTML quemado, archivo a descargar
HTML
Servlet
Servidor/Contenedor web
2. Controlador en una aplicación web
Vista
Servlet
Modelo
Servlet: formas de uso
Generación directa de un flujo de contenido sobre el
HTTP response: HTML quemado, un archivo a descargar
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>Hello World</TITLE></HEAD>");
out.println("<BODY>");
out.println("<BIG>Hello World</BIG>");
out.println("</BODY></HTML>");
}
}
*Ejemplo tomado de: http://www.servlets.com/
Servlet: formas de uso
Generación directa de un flujo de contenido sobre el
HTTP response: HTML quemado, un archivo a descargar
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>Hello World</TITLE></HEAD>");
out.println("<BODY>");
out.println("<BIG>Hello World</BIG>");
out.println("</BODY></HTML>");
}
}
*Ejemplo tomado de: http://www.servlets.com/
Servlet: formas de uso
Generación directa de un flujo de contenido sobre el
HTTP response: HTML quemado, un archivo a descargar
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>Hello World</TITLE></HEAD>");
out.println("<BODY>");
out.println("<BIG>Hello World</BIG>");
out.println("</BODY></HTML>");
}
}
*Ejemplo tomado de: http://www.servlets.com/
Servlet: formas de uso
Generación directa de un flujo de contenido sobre el
HTTP response: HTML quemado, un archivo a descargar
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>Hello World</TITLE></HEAD>");
out.println("<BODY>");
out.println("<BIG>Hello World</BIG>");
out.println("</BODY></HTML>");
}
}
*Ejemplo tomado de: http://www.servlets.com/
Servlet: formas de uso
UHTXHVWDQGUHVSRQVH
Generación
directa de un flujo de contenido sobre el
;MZ ^TM\KWLM\WLW_VTWIL\PM2):
HTTP response: HTML quemado, un archivo a descargar
DEXQFKRILPSRUWVKHUH
SXEOLFFODVV&RGH5HWXUQH[WHQGV+WWS6HUYOHW^
SXEOLFYRLGGR*HW+WWS6HUYOHW5HTXHVWUHTXHVW+WWS6HUYOHW5HVSRQVHUHVSRQVH
WKURZV,2([FHSWLRQ6HUYOHW([FHSWLRQ^
UHVSRQVHVHW&RQWHQW7\SH³DSSOLFDWLRQMDU´
We want the browser to
this is a JAR, not HTM recognize that
content type to ÒapplicaL, so we set the
tion/jarÓ.
6HUYOHW&RQWH[WFW[ JHW6HUYOHW&RQWH[W
,QSXW6WUHDPLV FW[JHW5HVRXUFH$V6WUHDP³ERRN&RGHMDU´
LQWUHDG E\WH>@E\WHV QHZE\WH>@
2XWSXW6WUHDPRV UHVSRQVHJHW2XWSXW6WUHDP
ZKLOHUHDG LVUHDGE\WHV ^
RVZULWHE\WHVUHDG
`
RVÀXVK
RVFORVH
`
`
e me an
iv
g
Ò
,
s
y
a
s
t
s
u
This j
source
e
r
e
h
t
r
o
f
m
input strea Code.jarÓ.
named book
HereÕs the key part, but itÕs just plain
old I/O!! Nothing special, just read the
JAR bytes, then write the bytes to
the output stream that we get from
e object.
the respons*E
*Ejemplo tomado de: Head First Servlets and JSPs, 2nd Edition. Bryan Basham, Kathy Sierra, Bert Bates. 2008
Servlet: formas de uso
UHTXHVWDQGUHVSRQVH
Generación
directa de un flujo de contenido sobre el
;MZ ^TM\KWLM\WLW_VTWIL\PM2):
HTTP response: HTML quemado, un archivo a descargar
DEXQFKRILPSRUWVKHUH
SXEOLFFODVV&RGH5HWXUQH[WHQGV+WWS6HUYOHW^
SXEOLFYRLGGR*HW+WWS6HUYOHW5HTXHVWUHTXHVW+WWS6HUYOHW5HVSRQVHUHVSRQVH
WKURZV,2([FHSWLRQ6HUYOHW([FHSWLRQ^
UHVSRQVHVHW&RQWHQW7\SH³DSSOLFDWLRQMDU´
We want the browser to
this is a JAR, not HTM recognize that
content type to ÒapplicaL, so we set the
tion/jarÓ.
6HUYOHW&RQWH[WFW[ JHW6HUYOHW&RQWH[W
,QSXW6WUHDPLV FW[JHW5HVRXUFH$V6WUHDP³ERRN&RGHMDU´
LQWUHDG E\WH>@E\WHV QHZE\WH>@
2XWSXW6WUHDPRV UHVSRQVHJHW2XWSXW6WUHDP
ZKLOHUHDG LVUHDGE\WHV ^
RVZULWHE\WHVUHDG
`
RVÀXVK
RVFORVH
`
`
e me an
iv
g
Ò
,
s
y
a
s
t
s
u
This j
source
e
r
e
h
t
r
o
f
m
input strea Code.jarÓ.
named book
HereÕs the key part, but itÕs just plain
old I/O!! Nothing special, just read the
JAR bytes, then write the bytes to
the output stream that we get from
e object.
the respons*E
*Ejemplo tomado de: Head First Servlets and JSPs, 2nd Edition. Bryan Basham, Kathy Sierra, Bert Bates. 2008
Servlet como controlador
Contenedor
1
Browser
Cliente
Lógica del
contenedor
2
Servlet
(controlador)
Servlet como controlador
<form method="POST" action="SelectBeer.do">
Seleccione el tipo de cerveza <p>
<select name="color" size="1">
<option value="1"> Rubia </option>
<option value="2"> Ambar </option>
<option value="3"> Brown Ale </option>
<option value="4"> Oscura </option>
</select>
<input type = "submit">
</form>
*Ejemplo tomado de: Head First Servlets and JSPs, 2nd Edition. Bryan Basham, Kathy Sierra, Bert Bates. 2008
Servlet como controlador
URL de mapeo del servlet o JSP
<form method="POST" action="SelectBeer.do">
Seleccione el tipo de cerveza <p>
<select name="color" size="1">
<option value="1"> Rubia </option>
<option value="2"> Ambar </option>
<option value="3"> Brown Ale </option>
<option value="4"> Oscura </option>
</select>
<input type = "submit">
</form>
*Ejemplo tomado de: Head First Servlets and JSPs, 2nd Edition. Bryan Basham, Kathy Sierra, Bert Bates. 2008
Servlet como controlador (mapeo)
package jsplab.view;
…
@WebServlet(name = "Controller", urlPatterns = {“/SelectBeer.do"})
public class Controller extends HttpServlet {
…
}
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>jsplab.view.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/SelectBeer.do</url-pattern>
</servlet-mapping>
KDQGVRQ09&
Servlet como controlador
+WLMNWZ[MZ^TM\^MZ[QWV\PZMM
(ERESHOWWEMODIlEDTHESERVLETTOADDTHEMODEL
COMPONENTSANSWERTOTHEREQUESTOBJECTSOTHE*30
CANRETRIEVEITANDHOWWEASKEDTHE#ONTAINERTO
DISPATCHTOTHE*30
SDFNDJHFRPH[DPSOHZHE
LPSRUWFRPH[DPSOHPRGHO
LPSRUWMDYD[VHUYOHW
LPSRUWMDYD[VHUYOHWKWWS
LPSRUWMDYDLR
LPSRUWMDYDXWLO
SXEOLFFODVV%HHU6HOHFWH[WHQGV+WWS6HUYOHW^
SXEOLFYRLGGR3RVW+WWS6HUYOHW5HTXHVWUHTXHVW
+WWS6HUYOHW5HVSRQVHUHVSRQVH
WKURZV,2([FHSWLRQ6HUYOHW([FHSWLRQ^
UHVSRQVHVHW&RQWHQW7\SH³WH[WKWPO´
UHPRYHWKHROGWHVWRXWSXW
3ULQW:ULWHURXW UHVSRQVHJHW:ULWHU
RXWSULQWOQ³%HHU6HOHFWLRQ$GYLFHEU!´
6WULQJF UHTXHVWJHW3DUDPHWHU³FRORU´
Now that the JSP is going to
produce the output, we should
remove the test output from the
servlet. We commented it out so
that you could still see it here.
RXWSULQWOQ³EU!*RWEHHUFRORU³F
%HHU([SHUWEH QHZ%HHU([SHUW
/LVWUHVXOW EHJHW%UDQGVF
UHTXHVWVHW$WWULEXWH³VW\OHV´UHVXOW
Add an attribute to the request
object for the JSP to use. Notice
the JSP is looking for ÒstylesÓ.
5HTXHVW'LVSDWFKHUYLHZ UHTXHVWJHW5HTXHVW'LVSDWFKHU³UHVXOWMVS´
YLHZIRUZDUGUHTXHVWUHVSRQVH
`
`
Instantiate a req
dispatcher for t uest
he JSP.
Use the request dispatcher to ask
the Container to crank up the JSP,
sending it the request and response.
\RXDUHKHUH
KDQGVRQ09&
Servlet como controlador
+WLMNWZ[MZ^TM\^MZ[QWV\PZMM
(ERESHOWWEMODIlEDTHESERVLETTOADDTHEMODEL
COMPONENTSANSWERTOTHEREQUESTOBJECTSOTHE*30
CANRETRIEVEITANDHOWWEASKEDTHE#ONTAINERTO
DISPATCHTOTHE*30
SDFNDJHFRPH[DPSOHZHE
LPSRUWFRPH[DPSOHPRGHO
LPSRUWMDYD[VHUYOHW
LPSRUWMDYD[VHUYOHWKWWS
LPSRUWMDYDLR
LPSRUWMDYDXWLO
SXEOLFFODVV%HHU6HOHFWH[WHQGV+WWS6HUYOHW^
SXEOLFYRLGGR3RVW+WWS6HUYOHW5HTXHVWUHTXHVW
+WWS6HUYOHW5HVSRQVHUHVSRQVH
WKURZV,2([FHSWLRQ6HUYOHW([FHSWLRQ^
UHVSRQVHVHW&RQWHQW7\SH³WH[WKWPO´
UHPRYHWKHROGWHVWRXWSXW
3ULQW:ULWHURXW UHVSRQVHJHW:ULWHU
RXWSULQWOQ³%HHU6HOHFWLRQ$GYLFHEU!´
6WULQJF UHTXHVWJHW3DUDPHWHU³FRORU´
RXWSULQWOQ³EU!*RWEHHUFRORU³F
Now that the JSP is going to
produce the output, we should
remove the test output from the
servlet. We commented it out so
that you could still see it here.
Datos que vienen desde la JSP
color = “2”
%HHU([SHUWEH QHZ%HHU([SHUW
/LVWUHVXOW EHJHW%UDQGVF
UHTXHVWVHW$WWULEXWH³VW\OHV´UHVXOW
Add an attribute to the request
object for the JSP to use. Notice
the JSP is looking for ÒstylesÓ.
5HTXHVW'LVSDWFKHUYLHZ UHTXHVWJHW5HTXHVW'LVSDWFKHU³UHVXOWMVS´
YLHZIRUZDUGUHTXHVWUHVSRQVH
`
`
Instantiate a req
dispatcher for t uest
he JSP.
Use the request dispatcher to ask
the Container to crank up the JSP,
sending it the request and response.
\RXDUHKHUH
Servlet como controlador
Contenedor
1
Browser
Lógica del
contenedor
2
8
Cliente
Servlet
(controlador)
3
Modelo
(Servicio/
Fachada)
KDQGVRQ09&
Servlet como controlador
+WLMNWZ[MZ^TM\^MZ[QWV\PZMM
(ERESHOWWEMODIlEDTHESERVLETTOADDTHEMODEL
COMPONENTSANSWERTOTHEREQUESTOBJECTSOTHE*30
CANRETRIEVEITANDHOWWEASKEDTHE#ONTAINERTO
DISPATCHTOTHE*30
SDFNDJHFRPH[DPSOHZHE
LPSRUWFRPH[DPSOHPRGHO
LPSRUWMDYD[VHUYOHW
LPSRUWMDYD[VHUYOHWKWWS
LPSRUWMDYDLR
LPSRUWMDYDXWLO
SXEOLFFODVV%HHU6HOHFWH[WHQGV+WWS6HUYOHW^
SXEOLFYRLGGR3RVW+WWS6HUYOHW5HTXHVWUHTXHVW
+WWS6HUYOHW5HVSRQVHUHVSRQVH
WKURZV,2([FHSWLRQ6HUYOHW([FHSWLRQ^
UHVSRQVHVHW&RQWHQW7\SH³WH[WKWPO´
UHPRYHWKHROGWHVWRXWSXW
3ULQW:ULWHURXW UHVSRQVHJHW:ULWHU
RXWSULQWOQ³%HHU6HOHFWLRQ$GYLFHEU!´
6WULQJF UHTXHVWJHW3DUDPHWHU³FRORU´
Now that the JSP is going to
produce the output, we should
remove the test output from the
servlet. We commented it out so
that you could still see it here.
Invocación al modelo
(fachadas, o servicios)
RXWSULQWOQ³EU!*RWEHHUFRORU³F
%HHU([SHUWEH QHZ%HHU([SHUW
/LVWUHVXOW EHJHW%UDQGVF
UHTXHVWVHW$WWULEXWH³VW\OHV´UHVXOW
Add an attribute to the request
object for the JSP to use. Notice
the JSP is looking for ÒstylesÓ.
5HTXHVW'LVSDWFKHUYLHZ UHTXHVWJHW5HTXHVW'LVSDWFKHU³UHVXOWMVS´
YLHZIRUZDUGUHTXHVWUHVSRQVH
`
`
Instantiate a
dispatcher forretquest
he JSP.
Use the request dispatcher to ask
the Container to crank up the JSP,
sending it the request and response.
\RXDUHKHUH
Servlet como controlador
Contenedor
1
Browser
Lógica del
contenedor
2
8
5
Cliente
6
result.jsp
Servlet
(controlador)
4
Request
3
Modelo
(Servicio/
Fachada)
KDQGVRQ09&
Servlet como controlador
+WLMNWZ[MZ^TM\^MZ[QWV\PZMM
(ERESHOWWEMODIlEDTHESERVLETTOADDTHEMODEL
COMPONENTSANSWERTOTHEREQUESTOBJECTSOTHE*30
CANRETRIEVEITANDHOWWEASKEDTHE#ONTAINERTO
DISPATCHTOTHE*30
SDFNDJHFRPH[DPSOHZHE
LPSRUWFRPH[DPSOHPRGHO
LPSRUWMDYD[VHUYOHW
LPSRUWMDYD[VHUYOHWKWWS
LPSRUWMDYDLR
LPSRUWMDYDXWLO
SXEOLFFODVV%HHU6HOHFWH[WHQGV+WWS6HUYOHW^
SXEOLFYRLGGR3RVW+WWS6HUYOHW5HTXHVWUHTXHVW
+WWS6HUYOHW5HVSRQVHUHVSRQVH
WKURZV,2([FHSWLRQ6HUYOHW([FHSWLRQ^
UHVSRQVHVHW&RQWHQW7\SH³WH[WKWPO´
UHPRYHWKHROGWHVWRXWSXW
3ULQW:ULWHURXW UHVSRQVHJHW:ULWHU
RXWSULQWOQ³%HHU6HOHFWLRQ$GYLFHEU!´
6WULQJF UHTXHVWJHW3DUDPHWHU³FRORU´
Now that the JSP is going to
produce the output, we should
remove the test output from the
servlet. We commented it out so
that you could still see it here.
RXWSULQWOQ³EU!*RWEHHUFRORU³F
%HHU([SHUWEH QHZ%HHU([SHUW
/LVWUHVXOW EHJHW%UDQGVF
UHTXHVWVHW$WWULEXWH³VW\OHV´UHVXOW
Add an attribute to the request
object for the JSP to use. Notice
the JSP is looking for ÒstylesÓ.
5HTXHVW'LVSDWFKHUYLHZ UHTXHVWJHW5HTXHVW'LVSDWFKHU³UHVXOWMVS´
YLHZIRUZDUGUHTXHVWUHVSRQVH
`
`
Datos enviados a JSP
Instantiate a
dispatcher forretquest
he JSP.
Use the request dispatcher to ask
the Container to crank up the JSP,
sending it the request and response.
\RXDUHKHUH
UHPRYHWKHROGWHVWRXWSXW
3ULQW:ULWHURXW UHVSRQVHJHW:ULWHU
RXWSULQWOQ³%HHU6HOHFWLRQ$GYLFHEU!´
Servlet
como
controlador
6WULQJF UHTXHVWJHW3DUDPHWHU³FRORU´
Now that the JSP is going
produce the output, we sho
remove the test output fro
servlet. We commented it o
that you could still see it h
RXWSULQWOQ³EU!*RWEHHUFRORU³F
%HHU([SHUWEH QHZ%HHU([SHUW
/LVWUHVXOW EHJHW%UDQGVF
UHTXHVWVHW$WWULEXWH³VW\OHV´UHVXOW
Add an attribute to the r
object for the JSP to use.
the JSP is looking for Òsty
5HTXHVW'LVSDWFKHUYLHZ UHTXHVWJHW5HTXHVW'LVSDWFKHU³UHVXOWMVS´
YLHZIRUZDUGUHTXHVWUHVSRQVH
`
`
Instantiate a re
dispatcher for t
Use the request dispatcher to ask
the Container to crank up the JSP,
sending it the request and response.
\RXDUHKHUH
Servlet como controlador
Contenedor
1
Browser
Lógica del
contenedor
8
2
7
5
Cliente
6
result.jsp
Servlet
(controlador)
4
Request
3
Modelo
(Servicio/
Fachada)
Parámetros con múltiple valor
<form method="POST" action="SelectBeer.do">
Seleccione el Tamaño de cerveza <p>
<input type="checkbox" name="size" value ="0.5">Medio litro</option>
<input type="checkbox" name="size" value ="1">1 Litro</option>
<input type="checkbox" name="size" value ="2.5">1.5 litros</option>
<input type="checkbox" name="size" value ="2">2 litros</option>
<input type = "submit">
</form>
:DWFKLW
<RXFDQKDYHPXOWLSOHYDOXHVIRUDVLQJOHSDUDPHWHU7KDW
PHDQV\RX·OOQHHGJHW3DUDPHWHU9DOXHVWKDWUHWXUQVDQ
DUUD\LQVWHDGRIJHW3DUDPHWHUWKDWUHWXUQVD6WULQJ
Parámetros con múltiple valor
6RPHIRUPLQSXWW\SHVOLNHDVHWRIFKHFNER[HVFDQKDYHPRUHWKDQRQHYDOXH7KDW
PHDQVDVLQJOHSDUDPHWHU³VL]HV´IRUH[DPSOHZLOOKDYHPXOWLSOHYDOXHVGHSHQGLQJ
RQKRZPDQ\ER[HVWKHXVHUFKHFNHGRII$IRUPZKHUHDXVHUFDQVHOHFWPXOWLSOHEHHU
VL]HVWRVD\WKDWKH¶VLQWHUHVWHGLQ$//RIWKRVHVL]HVPLJKWORRNOLNHWKLV
IRUPPHWKRG 3267
DFWLRQ ´6HOHFW%HHUGR´!
<form method="POST"
action="SelectBeer.do">
6HOHFWEHHUFKDUDFWHULVWLFVS!
Seleccione
el Tamaño de cerveza <p>
&DQ6L]HVS!
LQSXWW\SH FKHFNER[QDPH VL]HVYDOXH ´R]´!R]EU!
LQSXWW\SH FKHFNER[QDPH
VL]HVYDOXH
<input type="checkbox"
name="size"
value ´R]´!R]EU!
="0.5">Medio litro</option>
LQSXWW\SH FKHFNER[QDPH
VL]HVYDOXH
<input type="checkbox"
name="size"
value ´R]´!R]EU!
="1">1 Litro</option>
EU!EU!
<input type="checkbox"
name="size" value ="2.5">1.5 litros</option>
<input type="checkbox"
name="size" value ="2">2 litros</option>
FHQWHU!
<input
</form>
LQSXWW\SH ´68%0,7´!
type
= "submit">
FHQWHU!
IRUP!
,Q\RXUFRGH\RX¶OOXVHWKHJHW3DUDPHWHU9DOXHVPHWKRGWKDWUHWXUQVDQDUUD\
6WULQJRQH UHTXHVWJHW3DUDPHWHU9DOXHV³VL]HV´>@
6WULQJ>@VL]HV UHTXHVWJHW3DUDPHWHU9DOXHV³VL]HV´
,I\RXZDQWWRVHHHYHU\WKLQJLQWKHDUUD\MXVWIRUIXQRUWHVWLQJ\RXFDQXVH
6WULQJ>@VL]HV UHTXHVWJHW3DUDPHWHU9DOXHV³VL]HV´
IRULQW[ [VL]HVOHQJWK[^
HTXHVW
&RGH5HWXUQ
Forward vs Redirect
request.forward: reenvia el mismo request y response; se usa para
enviar datos a la vista en el scope de request
VHUYOHWUHGLUHFW
H
HU
W
7KHVHUYOHWFDOOV
5HTXHVW'LVSDWFKHUYLHZ UHTXHVWJHW5HTXHVW'LVSDWFKHU³UHVXOWMVS´
YLHZIRUZDUGUHTXHVWUHVSRQVH
!REDIRECTLETSTHESERVLETOFFTHEHOOKCOMPLETELY!FTERDECIDINGTHATITCANTDO
DQGWKH-63WDNHVRYHUWKHUHVSRQVH
THEWORKTHESERVLETSIMPLYCALLSTHESEND2EDIRECTMETHOD
;MZ ^TM\ZMLQZMK\UISM[\PMJZW_[MZLW\PM_WZS
response.sendRedirect:
nueva URL; se puede ver la URL en el
LIZRUNV)RU0H^
&RGH5HWXUQ
KDQGOHWKHUHTXHVW
browser
`HOVH^
+773
2
.
/RFDWLRQ
Z
HGO\VPDU ZZZLFN
WFRP
'DWH:HG
1RY
*07
6HUYHU$
SDFKH
&R\RWH
&RQQHFWLR
QFORVH
UHVSRQVHVHQG5HGLUHFW³KWWSZZZRUHLOO\FRP´
`
UHVSRQVH
wser
KWPO!
ERG\!
MVSVHW3URSHUW\
QDPH ´IRR´
SURSHUW\ ´EDU´!
ERG\!
KWPO!
o
r
b
e
h
t
t
n
a
e URL you w
is is
Alcances (scopes)
-
ServletContext:
contexto global; disponible para todos
<PMJM[\XIZ\"\PM+WV\IQVMZLWM[
los usuarios
^QZ\]ITTaITT\PMKWWSQM_WZS
9OUDOHAVETOTELLTHE#ONTAINERTHATYOUWANTTOCREATEORUSE
ASESSIONBUTTHE#ONTAINERTAKESCAREOFGENERATINGTHESESSION
)$CREATINGANEW#OOKIEOBJECTSTUFlNGTHESESSION)$INTOTHE
COOKIEANDSETTINGTHECOOKIEASPARTOFTHERESPONSE!NDON
SUBSEQUENTREQUESTSTHE#ONTAINERGETSTHESESSION)$FROMACOOKIE
INTHEREQUESTMATCHESTHESESSION)$WITHANEXISTINGSESSIONAND
ASSOCIATESTHATSESSIONWITHTHECURRENTREQUEST
-
HTTPServletRequest: disponible solo a nivel de
request
-
HTTPSession: contexto de sesión
6HQGLQJDVHVVLRQFRRNLHLQWKH5(63216(
+WWS6HVVLRQVHVVLRQ UHTXHVWJHW6HVVLRQ
4HATSIT3OMEWHEREINYOURSERVICEMETHODYOUASKFORA
SESSIONANDEVERYTHINGELSEHAPPENSAUTOMATICALLY
You ask the re
and the Conta
else into actio
do anything e
(This method
te a sess
Alcances (scopes)
Context
request.getServletContext().setAttribute(“key”,”value”);
request.getServletContext().getAttribute(“key”);
Request
request.getParameter(“param”);
request.getParameterValues(“param”);
request.getParameterMap();
request.setAttribute(“key”,”value”);
request.getAttribute(“key”);
Session
session.setAttribute(“key”, value);
session.getAttribute(“key”);
Java Server Pages
-
Componente del lado del servidor para generar
contenido del lado del cliente
-
En un esquema MVC, las JSP asumen el rol de la vista
que genera solicitudes al controlador y pinta los datos
proporcionados por este último
-
Permiten embeber código Java y expresiones Java
junto con HTML/CSS/JS para generar contenido
dinámico
JSP
Java Server Pages
JSP: Traducción y Compilación
Traducción
JSP
Compilación
Servlet
.class
-
Esto se hace solo la primera vez que se accede a la JSP
-
El proceso se repite cada vez que se hagan cambios a la JSP
ATPAGETRANSLATIONTIME$IRECTIVESCOMEINTHREEmAVORSPAGEINCLUDE
ATPAGETRANSLATIONTIME$IRECTIVESCOMEINTHREEmAVORSPAGEINCLUDE
ANDTAGLIB7ELLLOOKATTHEINCLUDEANDTAGLIBDIRECTIVESINLATER
ANDTAGLIB7ELLLOOKATTHEINCLUDEANDTAGLIBDIRECTIVESINLATER
CHAPTERSBUTFORNOWALLWECAREABOUTISTHEPAGEDIRECTIVEBECAUSEITS
CHAPTERSBUTFORNOWALLWECAREABOUTISTHEPAGEDIRECTIVEBECAUSEITS
THEONETHATLETSYOUIMPORT
THEONETHATLETSYOUIMPORT
JSP: Directivas, Expresiones, Scriptlets
7RLPSRUWD
7RLPSRUWDVLQJOH
VLQJOHSDFNDJH
SDFNDJH
6FULSWOHWFRGH
is a page directive
This Directiva
with an import attribute.
n
lo
o
ic
m
se
o
n
Õs
e
r
e
h
t
e
ic
t
o
(N
at the end of a directive .)
RXWSULQWOQ&RXQWHUJHW&RXQW!
#SDJHLPSRUW
´IRR´!
#SDJHLPSRUW
´IRR´!
#SDJHLPSRUW ´IRR´!
KWPO!
KWPO!
KWPO!
ERG\!
ERG\!
ERG\!
7KHSDJHFRXQWLV
7KHSDJHFRXQWLV
7KHSDJHFRXQWLV
RXWSULQWOQ&RXQWHUJHW&RXQW
ERG\!
RXWSULQWOQ&RXQWHUJHW&RXQW
!
KWPO!
!
ERG\!
ERG\!
KWPO!
KWPO!
([SUHVVLRQFRGH
Scriptlet
Scriptlets are no
all statements in rmal Java, so
must end in a sema scriptlet
icolon !
7RLPSRUW
PXOWLSOH
7RLPSRUW
PXOWLSOHSDFNDJHV
SDFNDJHV
#SDJHLPSRUW
´IRR´!
KWPO!
#SDJHLPSRUW
#SDJHLPSRUW ´IRRMDYDXWLO´!
´IRRMDYDXWLO´!
ERG\!
7KHSDJHFRXQWLVQRZ
ckages.
a
p
e
h
s.
t
e
e
g
t
a
a
k
r
c
a
p
se
o
t
a
m
m
o
c
a
se
U
&RXQWHUJHW&RXQW!
!
s
Expresión
e
g
a
k
c
a
p
f
o
st
li
e
ir
t
n
e
e
h
t
The quotes go around
ERG\!
KWPO!
Õt
n
o
d
e
w
Ñ
r
e
t
r
o
sh
is
n
io
ss
e
r
p
x
The e
.OTICEWHATSDIFFERENTBETWEENTHE*AVACODETHATPRINTSTHECOUNTER
.OTICEWHATSDIFFERENTBETWEENTHE*AVACODETHATPRINTSTHECOUNTER
.
..
t
in
r
p
e
h
t
o
d
ly
it
c
li
p
x
need to e
ANDTHEPAGEDIRECTIVE
ANDTHEPAGEDIRECTIVE
4HE*AVACODEISBETWEENANGLEBRACKETSWITHPERCENTSIGNSAND
DISPLAYTHEVALUEOFTHEPERSONShNAMEvPROPERTY"UTHOWDOESTHE#ONTAINERKNOWWHAT
hPERSONvMEANS)FWEHADONLYTHEJSPGET0ROPERTYTAGINTHE*30ITSALMOSTLIKEUSING
ANUNDECLAREDVARIABLEˆTHENAMEhPERSONv4HE#ONTAINERUSUALLYHASNOIDEAWHATYOURE
TALKINGABOUTUNLESSYOU&)234PUTAJSPUSE"EANINTOTHEPAGE4HEJSPUSE"EANISA
WAYOFDECLARINGANDINITIALIZINGTHEACTUALBEANOBJECTYOUREUSINGINJSPGET0ROPERTY
DLQHU
JSP: Etiquetas vs. Expresiones
RNDWWKLVVWDQGDUGDFWLRQ
'HFODUHDQGLQLWLDOL]HDEHDQDWWULEXWHZLWKMVSXVH%HDQ!
VSXVH%HDQLG
´SHUVRQ´W\SH ´IRR(PSOR\HH´!
MVSVHW3URSHUW\QDPH
´QDPH´YDOXH ´)UHG´!
MVSXVH%HDQLG ´SHUVRQ´SURSHUW\
´SHUVRQ´FODVV ´IRR3HUVRQ´VFRSH
´UHTXHVW´!
MVSXVH%HDQ!
ype
t
IdentiÞes the attrib
s
s
a
l
PHLVMVSJHW3URSHUW\QDPH
´SHUVRQ´SURSHUW\
´QDPH´!
e
c
IdentiÞes the
h
e
t
h
r
t
o
s
f
e
r
ute
r
a
e
l
se)
r
Dec
u
o
c
f
o
,
d
standard action. Declares the identciÞorresponds
e
ualiÞ
q
y
l
l
u
f
s
(
i
h
T
ct.
e
j
b
o
n
a
e
b
ZLPDJLQHWKDWDVHUYOHWGRHVVRPHZRUNDQGWKHQIRUZDUGV
e
bean objecte. used when the
r th
o
f
m
a
n
to the
UHTXHVWWRWKH-63WKDWKDVWKHFRGHDERYH
aid:
s
e
d
o
c
t
e
l
v
r
se
XUHRXWZKDWWKH-63FRGHDERYHZRXOGGRIRUHDFKRIWKH
rsonÓ, p);
scope for this bean o
bject.
(Òpe
e
t
u
b
i
r
t
t
A
t
HHGLIIHUHQWVHUYOHWFRGHH[DPSOHV7KHDQVZHUVDUHDWWKH
request.se
<%= ((foo.Person)request.getAttribute(“person”)).getName() %>
RIWKHFKDSWHU
:KDWKDSSHQVLIWKHVHUYOHWFRGHORRNVOLNH
*HWDEHDQDWWULEXWH·VSURSHUW\YDOXHZLWKMVSJHW3URSHUW\!
IRR3HUVRQS QHZIRR(PSOR\HH
${person.name}
SVHW1DPH³(YDQ´
MVSJHW3URSHUW\QDPH ´SHUVRQ´SURSHUW\ ´QDPH´!
UHTXHVWVHW$WWULEXWH³SHUVRQ´S
${requestScope.person.name}
he
t
s
e
Þ
i
Ident rd action.
standa
IdentiÞes the actual bean
object. This will match
the ÒidÓ value from the
<jsp:useBean> tag.
r
e
h
t
o
in
(
e
m
a
n
perty
o
r
p
e
h
t
d
s
n
e
a
iÞ
r
t
e
n
t
t
Ide
e
g
e
h
t
with
g
in
h
t
e
h
t
,
s
d
r
wo
.
)
s
s
la
c
n
a
e
b
e
h
setter in t
rty has
EXPRESSIONSTOANYARBITRARYLEVEL)NOTHERWORDSYOUCAN
PUTACOMPLEXEXPRESSIONINSIDEACOMPLEXEXPRESSION
INSIDEAITKEEPSGOING!NDTHEEXPRESSIONSARE
EVALUATEDFROMTHEINNERMOSTBRACKETSOUT
JSP EL: Expression Language
4HISPARTWILLSEEMCOMPLETELYINTUITIVETOYOUBECAUSE
ITSNODIFFERENTTHANNESTING*AVACODEWITHINPARENS4HE
TRICKYPARTISTOWATCHOUTFORQUOTESVSNOQUOTES
,QDVHUYOHW
MDYDXWLO0DSPXVLF0DS QHZMDYDXWLO+DVK0DS
PXVLF0DSSXW³$PELHQW´³=HUR´
PXVLF0DSSXW³6XUI´³7DKLWL´
PXVLF0DSSXW³'-´³%7´
PXVLF0DSSXW³,QGLH´³)URX)URX´
UHTXHVWVHW$WWULEXWH³PXVLF0DS´PXVLF0DS
En un servlet
6WULQJ>@PXVLF7\SHV ^³$PELHQW´³6XUI´³'-´³,QGLH´`
UHTXHVWVHW$WWULEXWH³0XVLF7\SH´PXVLF7\SHV
7KLV'2(6ZRUNLQD-63
Cuál es el resultado
en una JSP?
Music is ${musicMap[“Surf”]}
0XVLFLV^PXVLF0DS>0XVLF7\SH>@@`
becomes
0XVLFLV^PXVLF0DS>³$PELHQW´@`
becomes
0XVLFLV=HUR
KWWSORFDOKRVWWHVW-637HVWHUGR
0XVLFLV=HUR
EXPRESSIONSTOANYARBITRARYLEVEL)NOTHERWORDSYOUCAN
PUTACOMPLEXEXPRESSIONINSIDEACOMPLEXEXPRESSION
INSIDEAITKEEPSGOING!NDTHEEXPRESSIONSARE
EVALUATEDFROMTHEINNERMOSTBRACKETSOUT
JSP EL: Expression Language
4HISPARTWILLSEEMCOMPLETELYINTUITIVETOYOUBECAUSE
ITSNODIFFERENTTHANNESTING*AVACODEWITHINPARENS4HE
TRICKYPARTISTOWATCHOUTFORQUOTESVSNOQUOTES
,QDVHUYOHW
MDYDXWLO0DSPXVLF0DS QHZMDYDXWLO+DVK0DS
PXVLF0DSSXW³$PELHQW´³=HUR´
PXVLF0DSSXW³6XUI´³7DKLWL´
PXVLF0DSSXW³'-´³%7´
PXVLF0DSSXW³,QGLH´³)URX)URX´
UHTXHVWVHW$WWULEXWH³PXVLF0DS´PXVLF0DS
En un servlet
6WULQJ>@PXVLF7\SHV ^³$PELHQW´³6XUI´³'-´³,QGLH´`
UHTXHVWVHW$WWULEXWH³0XVLF7\SH´PXVLF7\SHV
7KLV'2(6ZRUNLQD-63
Cuál es el resultado
en una JSP?
Music is ${musicMap[“Surf”]}
0XVLFLV^PXVLF0DS>0XVLF7\SH>@@`
becomes
0XVLFLV^PXVLF0DS>³$PELHQW´@`
Music is becomes
Tahiti 80
0XVLFLV=HUR
KWWSORFDOKRVWWHVW-637HVWHUGR
0XVLFLV=HUR
TRICKYPARTISTOWATCHOUTFORQUOTESVSNOQUOTES
EXPRESSIONSTOANYARBITRARYLEVEL)NOTHERWORDSYOUCAN
PUTACOMPLEXEXPRESSIONINSIDEACOMPLEXEXPRESSION
INSIDEAITKEEPSGOING!NDTHEEXPRESSIONSARE
EVALUATEDFROMTHEINNERMOSTBRACKETSOUT
JSP EL:
Expression
Language
,QDVHUYOHW
4HISPARTWILLSEEMCOMPLETELYINTUITIVETOYOUBECAUSE
ITSNODIFFERENTTHANNESTING*AVACODEWITHINPARENS4HE
MDYDXWLO0DSPXVLF0DS QHZMDYDXWLO+DVK0DS
TRICKYPARTISTOWATCHOUTFORQUOTESVSNOQUOTES
En un servlet
PXVLF0DSSXW³$PELHQW´³=HUR´
PXVLF0DSSXW³6XUI´³7DKLWL´
,QDVHUYOHW
PXVLF0DSSXW³'-´³%7´
MDYDXWLO0DSPXVLF0DS
QHZMDYDXWLO+DVK0DS
PXVLF0DSSXW³,QGLH´³)URX)URX´
PXVLF0DSSXW³$PELHQW´³=HUR´
UHTXHVWVHW$WWULEXWH³PXVLF0DS´PXVLF0DS
PXVLF0DSSXW³6XUI´³7DKLWL´
PXVLF0DSSXW³'-´³%7´
PXVLF0DSSXW³,QGLH´³)URX)URX´
6WULQJ>@PXVLF7\SHV
^³$PELHQW´³6XUI´³'-´
UHTXHVWVHW$WWULEXWH³PXVLF0DS´PXVLF0DS
UHTXHVWVHW$WWULEXWH³0XVLF7\SH´PXVLF7\SHV
6WULQJ>@PXVLF7\SHV ^³$PELHQW´³6XUI´³'-´³,QGLH´`
UHTXHVWVHW$WWULEXWH³0XVLF7\SH´PXVLF7\SHV
7KLV'2(6ZRUNLQD-63
7KLV'2(6ZRUNLQD-63
Cuál es el resultado
en una JSP?
0XVLFLV
^PXVLF0DS>0XVLF7\SH>@@`KWWSORFDOKRVWWHVW-637HVWHUGR
0XVLFLV
^PXVLF0DS>0XVLF7\SH>@@`
becomes
0XVLFLV=HUR
becomes
0XVLFLV^PXVLF0DS>³$PELHQW´@`
0XVLFLV^PXVLF0DS>³$PELHQW´@`
becomes
0XVLFLV=HUR
becomes
0X
TRICKYPARTISTOWATCHOUTFORQUOTESVSNOQUOTES
EXPRESSIONSTOANYARBITRARYLEVEL)NOTHERWORDSYOUCAN
PUTACOMPLEXEXPRESSIONINSIDEACOMPLEXEXPRESSION
INSIDEAITKEEPSGOING!NDTHEEXPRESSIONSARE
EVALUATEDFROMTHEINNERMOSTBRACKETSOUT
JSP EL:
Expression
Language
,QDVHUYOHW
4HISPARTWILLSEEMCOMPLETELYINTUITIVETOYOUBECAUSE
ITSNODIFFERENTTHANNESTING*AVACODEWITHINPARENS4HE
MDYDXWLO0DSPXVLF0DS QHZMDYDXWLO+DVK0DS
TRICKYPARTISTOWATCHOUTFORQUOTESVSNOQUOTES
En un servlet
PXVLF0DSSXW³$PELHQW´³=HUR´
PXVLF0DSSXW³6XUI´³7DKLWL´
,QDVHUYOHW
PXVLF0DSSXW³'-´³%7´
MDYDXWLO0DSPXVLF0DS
QHZMDYDXWLO+DVK0DS
PXVLF0DSSXW³,QGLH´³)URX)URX´
PXVLF0DSSXW³$PELHQW´³=HUR´
UHTXHVWVHW$WWULEXWH³PXVLF0DS´PXVLF0DS
PXVLF0DSSXW³6XUI´³7DKLWL´
PXVLF0DSSXW³'-´³%7´
PXVLF0DSSXW³,QGLH´³)URX)URX´
6WULQJ>@PXVLF7\SHV
^³$PELHQW´³6XUI´³'-´
UHTXHVWVHW$WWULEXWH³PXVLF0DS´PXVLF0DS
UHTXHVWVHW$WWULEXWH³0XVLF7\SH´PXVLF7\SHV
6WULQJ>@PXVLF7\SHV ^³$PELHQW´³6XUI´³'-´³,QGLH´`
UHTXHVWVHW$WWULEXWH³0XVLF7\SH´PXVLF7\SHV
7KLV'2(6ZRUNLQD-63
7KLV'2(6ZRUNLQD-63
Cuál es el resultado
en una JSP?
0XVLFLV
^PXVLF0DS>0XVLF7\SH>@@`KWWSORFDOKRVWWHVW-637HVWHUGR
0XVLFLV
^PXVLF0DS>0XVLF7\SH>@@`
becomes
0XVLFLV=HUR
becomes
0XVLFLV^PXVLF0DS>³$PELHQW´@`
0XVLFLV^PXVLF0DS>³$PELHQW´@`
becomes
Music is
Zero 7
0XVLFLV=HUR
becomes
0X
EXPRESSIONSTOANYARBITRARYLEVEL)NOTHERWORDSYOUCAN
PUTACOMPLEXEXPRESSIONINSIDEACOMPLEXEXPRESSION
INSIDEAITKEEPSGOING!NDTHEEXPRESSIONSARE
EVALUATEDFROMTHEINNERMOSTBRACKETSOUT
JSP EL: Expression Language
4HISPARTWILLSEEMCOMPLETELYINTUITIVETOYOUBECAUSE
ITSNODIFFERENTTHANNESTING*AVACODEWITHINPARENS4HE
TRICKYPARTISTOWATCHOUTFORQUOTESVSNOQUOTES
,QDVHUYOHW
En un servlet
MDYDXWLO0DSPXVLF0DS QHZMDYDXWLO+DVK0DS
PXVLF0DSSXW³$PELHQW´³=HUR´
PXVLF0DSSXW³6XUI´³7DKLWL´
PXVLF0DSSXW³'-´³%7´
PXVLF0DSSXW³,QGLH´³)URX)URX´
UHTXHVWVHW$WWULEXWH³PXVLF0DS´PXVLF0DS
6WULQJ>@PXVLF7\SHV ^³$PELHQW´³6XUI´³'-´³,QGLH´`
UHTXHVWVHW$WWULEXWH³0XVLF7\SH´PXVLF7\SHV
7KLV'2(6ZRUNLQD-63
Cuál es el resultado 0XVLFLV
Music
is ${musicMap.Indie}
^PXVLF0DS>0XVLF7\SH>@@`
0XVLFLV=HUR
en una JSP?
KWWSORFDOKRVWWHVW-637HVWHUGR
becomes
0XVLFLV^PXVLF0DS>³$PELHQW´@`
becomes
0XVLFLV=HUR
EXPRESSIONSTOANYARBITRARYLEVEL)NOTHERWORDSYOUCAN
PUTACOMPLEXEXPRESSIONINSIDEACOMPLEXEXPRESSION
INSIDEAITKEEPSGOING!NDTHEEXPRESSIONSARE
EVALUATEDFROMTHEINNERMOSTBRACKETSOUT
JSP EL: Expression Language
4HISPARTWILLSEEMCOMPLETELYINTUITIVETOYOUBECAUSE
ITSNODIFFERENTTHANNESTING*AVACODEWITHINPARENS4HE
TRICKYPARTISTOWATCHOUTFORQUOTESVSNOQUOTES
,QDVHUYOHW
En un servlet
MDYDXWLO0DSPXVLF0DS QHZMDYDXWLO+DVK0DS
PXVLF0DSSXW³$PELHQW´³=HUR´
PXVLF0DSSXW³6XUI´³7DKLWL´
PXVLF0DSSXW³'-´³%7´
PXVLF0DSSXW³,QGLH´³)URX)URX´
UHTXHVWVHW$WWULEXWH³PXVLF0DS´PXVLF0DS
6WULQJ>@PXVLF7\SHV ^³$PELHQW´³6XUI´³'-´³,QGLH´`
UHTXHVWVHW$WWULEXWH³0XVLF7\SH´PXVLF7\SHV
7KLV'2(6ZRUNLQD-63
Cuál es el resultado 0XVLFLV
Music
is ${musicMap.Indie}
^PXVLF0DS>0XVLF7\SH>@@`
0XVLFLV=HUR
en una JSP?
KWWSORFDOKRVWWHVW-637HVWHUGR
becomes
0XVLFLV^PXVLF0DS>³$PELHQW´@`
Music is becomes
Frou Frou
0XVLFLV=HUR
);\ZQVOQVLM`Q[KWMZKML\WIVQV\NWZIZZIa[IVL
JSP2EMEMBERFOLKSTHISIS./4*AVA)N%,THE;=OPERATORIS./4THEARRAYACCESS
EL: Expression Language
4HE%,FORACCESSINGANARRAYISTHESAMEASTHE%,FORACCESSINGA,IST
OPERATOR.OITSJUSTCALLEDTHE;=OPERATOR7ESWEARLOOKITUPINTHESPECˆITH
NAME*USTTHESYMBOL;=,IKE0RINCEKINDOF)FIT$)$HAVEANAMEITWOULDBE
ARRAY,IST-APBEAN0ROPERTYACCESSOPERATOR
,QD6HUYOHW
MDYDXWLO$UUD\/LVWIDYRULWH)RRG QHZMDYDXWLO$UUD\/LVW
IDYRULWH)RRGDGG³FKDLLFHFKUHDP´
IDYRULWH)RRGDGG³IDMLWDV´
IDYRULWH)RRGDGG³WKDLSL]]D´
IDYRULWH)RRGDGG³DQ\WKLQJLQGDUNFKRFRODWH´
UHTXHVWVHW$WWULEXWH³IDYRULWH)RRG´IDYRULWH)RRG
En un servlet
,QD-63
overridd
ce
ni
a
s
ha
t
is
L
ay
rr
A
ly
us
io
bv
)RRGVDUH^IDYRULWH)RRG` O
Cuál es el resultado
en una JSP?
KWWSORFDOKRVWWHVW-637HVWHUGR
Foods are ${favoriteFood}
)RRGVDUH>FKDLLFHFKUHDPID
MLWDVWKDLSL]]DDQ\WKLQJLQ
GDUNFKRFRODWH@
)LUVWIRRGLV^IDYRULWH)RRG>@`
KWWSORFDOKRVWWHVW-637HVWHUGR
right
,IWKHW
WKHEUD
D/LVW
6WULQJ
FRHUFH
7KLVZ
^IDYRU
);\ZQVOQVLM`Q[KWMZKML\WIVQV\NWZIZZIa[IVL
JSP2EMEMBERFOLKSTHISIS./4*AVA)N%,THE;=OPERATORIS./4THEARRAYACCESS
EL: Expression Language
4HE%,FORACCESSINGANARRAYISTHESAMEASTHE%,FORACCESSINGA,IST
OPERATOR.OITSJUSTCALLEDTHE;=OPERATOR7ESWEARLOOKITUPINTHESPECˆITH
NAME*USTTHESYMBOL;=,IKE0RINCEKINDOF)FIT$)$HAVEANAMEITWOULDBE
ARRAY,IST-APBEAN0ROPERTYACCESSOPERATOR
,QD6HUYOHW
MDYDXWLO$UUD\/LVWIDYRULWH)RRG QHZMDYDXWLO$UUD\/LVW
IDYRULWH)RRGDGG³FKDLLFHFKUHDP´
IDYRULWH)RRGDGG³IDMLWDV´
IDYRULWH)RRGDGG³WKDLSL]]D´
IDYRULWH)RRGDGG³DQ\WKLQJLQGDUNFKRFRODWH´
UHTXHVWVHW$WWULEXWH³IDYRULWH)RRG´IDYRULWH)RRG
En un servlet
,QD-63
overridd
ce
ni
a
s
ha
t
is
L
ay
rr
A
ly
us
io
bv
)RRGVDUH^IDYRULWH)RRG` O
Cuál es el resultado
en una JSP?
KWWSORFDOKRVWWHVW-637HVWHUGR
Foods are ${favoriteFood}
)RRGVDUH>FKDLLFHFKUHDPID
MLWDVWKDLSL]]DDQ\WKLQJLQ
GDUNFKRFRODWH@
,IWKHW
WKHEUD
D/LVW
6WULQJ
FRHUFH
[chai ice cream, fajitas, thai
pizza,
t
righ
7KLVZ
anything^IDYRULWH)RRG>@`
in dark chocolate]
)LUVWIRRGLV
KWWSORFDOKRVWWHVW-637HVWHUGR
^IDYRU
);\ZQVOQVLM`Q[KWMZKML\WIVQV\NWZIZZIa[IVL
JSP2EMEMBERFOLKSTHISIS./4*AVA)N%,THE;=OPERATORIS./4THEARRAYACCESS
EL: Expression Language
4HE%,FORACCESSINGANARRAYISTHESAMEASTHE%,FORACCESSINGA,IST
OPERATOR.OITSJUSTCALLEDTHE;=OPERATOR7ESWEARLOOKITUPINTHESPECˆITH
NAME*USTTHESYMBOL;=,IKE0RINCEKINDOF)FIT$)$HAVEANAMEITWOULDBE
ARRAY,IST-APBEAN0ROPERTYACCESSOPERATOR
,QD6HUYOHW
MDYDXWLO$UUD\/LVWIDYRULWH)RRG QHZMDYDXWLO$UUD\/LVW
IDYRULWH)RRGDGG³FKDLLFHFKUHDP´
IDYRULWH)RRGDGG³IDMLWDV´
IDYRULWH)RRGDGG³WKDLSL]]D´
IDYRULWH)RRGDGG³DQ\WKLQJLQGDUNFKRFRODWH´
UHTXHVWVHW$WWULEXWH³IDYRULWH)RRG´IDYRULWH)RRG
En un servlet
,QD-63
overridd
ce
ni
a
s
ha
t
is
L
ay
rr
A
ly
us
io
bv
)RRGVDUH^IDYRULWH)RRG` O
Cuál es el resultado
en una JSP?
KWWSORFDOKRVWWHVW-637HVWHUGR
Food is ${favoriteFood[0]}
)RRGVDUH>FKDLLFHFKUHDPID
MLWDVWKDLSL]]DDQ\WKLQJLQ
GDUNFKRFRODWH@
)LUVWIRRGLV^IDYRULWH)RRG>@`
KWWSORFDOKRVWWHVW-637HVWHUGR
right
,IWKHW
WKHEUD
D/LVW
6WULQJ
FRHUFH
7KLVZ
^IDYRU
);\ZQVOQVLM`Q[KWMZKML\WIVQV\NWZIZZIa[IVL
JSP2EMEMBERFOLKSTHISIS./4*AVA)N%,THE;=OPERATORIS./4THEARRAYACCESS
EL: Expression Language
4HE%,FORACCESSINGANARRAYISTHESAMEASTHE%,FORACCESSINGA,IST
OPERATOR.OITSJUSTCALLEDTHE;=OPERATOR7ESWEARLOOKITUPINTHESPECˆITH
NAME*USTTHESYMBOL;=,IKE0RINCEKINDOF)FIT$)$HAVEANAMEITWOULDBE
ARRAY,IST-APBEAN0ROPERTYACCESSOPERATOR
,QD6HUYOHW
MDYDXWLO$UUD\/LVWIDYRULWH)RRG QHZMDYDXWLO$UUD\/LVW
IDYRULWH)RRGDGG³FKDLLFHFKUHDP´
IDYRULWH)RRGDGG³IDMLWDV´
IDYRULWH)RRGDGG³WKDLSL]]D´
IDYRULWH)RRGDGG³DQ\WKLQJLQGDUNFKRFRODWH´
UHTXHVWVHW$WWULEXWH³IDYRULWH)RRG´IDYRULWH)RRG
En un servlet
,QD-63
overridd
ce
ni
a
s
ha
t
is
L
ay
rr
A
ly
us
io
bv
)RRGVDUH^IDYRULWH)RRG` O
Cuál es el resultado
en una JSP?
KWWSORFDOKRVWWHVW-637HVWHUGR
Food is ${favoriteFood[0]}
)RRGVDUH>FKDLLFHFKUHDPID
MLWDVWKDLSL]]DDQ\WKLQJLQ
GDUNFKRFRODWH@
right
Food is chai ice cream
)LUVWIRRGLV^IDYRULWH)RRG>@`
KWWSORFDOKRVWWHVW-637HVWHUGR
,IWKHW
WKHEUD
D/LVW
6WULQJ
FRHUFH
7KLVZ
^IDYRU
);\ZQVOQVLM`Q[KWMZKML\WIVQV\NWZIZZIa[IVL
JSP2EMEMBERFOLKSTHISIS./4*AVA)N%,THE;=OPERATORIS./4THEARRAYACCESS
EL: Expression Language
4HE%,FORACCESSINGANARRAYISTHESAMEASTHE%,FORACCESSINGA,IST
OPERATOR.OITSJUSTCALLEDTHE;=OPERATOR7ESWEARLOOKITUPINTHESPECˆITH
NAME*USTTHESYMBOL;=,IKE0RINCEKINDOF)FIT$)$HAVEANAMEITWOULDBE
ARRAY,IST-APBEAN0ROPERTYACCESSOPERATOR
,QD6HUYOHW
MDYDXWLO$UUD\/LVWIDYRULWH)RRG QHZMDYDXWLO$UUD\/LVW
IDYRULWH)RRGDGG³FKDLLFHFKUHDP´
IDYRULWH)RRGDGG³IDMLWDV´
IDYRULWH)RRGDGG³WKDLSL]]D´
IDYRULWH)RRGDGG³DQ\WKLQJLQGDUNFKRFRODWH´
UHTXHVWVHW$WWULEXWH³IDYRULWH)RRG´IDYRULWH)RRG
En un servlet
,QD-63
overridd
ce
ni
a
s
ha
t
is
L
ay
rr
A
ly
us
io
bv
)RRGVDUH^IDYRULWH)RRG` O
Cuál es el resultado
en una JSP?
KWWSORFDOKRVWWHVW-637HVWHUGR
Food
is ${favoriteFood[“3”]}
)RRGVDUH>FKDLLFHFKUHDPID
MLWDVWKDLSL]]DDQ\WKLQJLQ
GDUNFKRFRODWH@
)LUVWIRRGLV^IDYRULWH)RRG>@`
KWWSORFDOKRVWWHVW-637HVWHUGR
right
,IWKHW
WKHEUD
D/LVW
6WULQJ
FRHUFH
7KLVZ
^IDYRU
);\ZQVOQVLM`Q[KWMZKML\WIVQV\NWZIZZIa[IVL
JSP2EMEMBERFOLKSTHISIS./4*AVA)N%,THE;=OPERATORIS./4THEARRAYACCESS
EL: Expression Language
4HE%,FORACCESSINGANARRAYISTHESAMEASTHE%,FORACCESSINGA,IST
OPERATOR.OITSJUSTCALLEDTHE;=OPERATOR7ESWEARLOOKITUPINTHESPECˆITH
NAME*USTTHESYMBOL;=,IKE0RINCEKINDOF)FIT$)$HAVEANAMEITWOULDBE
ARRAY,IST-APBEAN0ROPERTYACCESSOPERATOR
,QD6HUYOHW
MDYDXWLO$UUD\/LVWIDYRULWH)RRG QHZMDYDXWLO$UUD\/LVW
IDYRULWH)RRGDGG³FKDLLFHFKUHDP´
IDYRULWH)RRGDGG³IDMLWDV´
IDYRULWH)RRGDGG³WKDLSL]]D´
IDYRULWH)RRGDGG³DQ\WKLQJLQGDUNFKRFRODWH´
UHTXHVWVHW$WWULEXWH³IDYRULWH)RRG´IDYRULWH)RRG
En un servlet
,QD-63
overridd
ce
ni
a
s
ha
t
is
L
ay
rr
A
ly
us
io
bv
)RRGVDUH^IDYRULWH)RRG` O
Cuál es el resultado
en una JSP?
KWWSORFDOKRVWWHVW-637HVWHUGR
Food
is ${favoriteFood[“3”]}
)RRGVDUH>FKDLLFHFKUHDPID
MLWDVWKDLSL]]DDQ\WKLQJLQ
GDUNFKRFRODWH@
right
Food is anything in dark chocolate
)LUVWIRRGLV^IDYRULWH)RRG>@`
KWWSORFDOKRVWWHVW-637HVWHUGR
,IWKHW
WKHEUD
D/LVW
6WULQJ
FRHUFH
7KLVZ
^IDYRU
JSP EL: Expression Language
En un servlet
String[] favoriteMusic ={“Reggeaton”, “Champeta”,
“Vallenato”, “Joropo”, “Calypso”};
request.setAttribute(“musicList”, favoriteMusic);
Cuál es el resultado
en una JSP?
Music is ${favoriteMusic}
JSP EL: Expression Language
En un servlet
String[] favoriteMusic ={“Reggeaton”, “Champeta”,
“Vallenato”, “Joropo”, “Calypso”};
request.setAttribute(“musicList”, favoriteMusic);
Cuál es el resultado
en una JSP?
Music is ${favoriteMusic}
Music is
JSP EL: Expression Language
En un servlet
String[] favoriteMusic ={“Reggeaton”, “Champeta”,
“Vallenato”, “Joropo”, “Calypso”};
request.setAttribute(“musicList”, favoriteMusic);
Cuál es el resultado
en una JSP?
Music is ${musicList}
JSP EL: Expression Language
En un servlet
String[] favoriteMusic ={“Reggeaton”, “Champeta”,
“Vallenato”, “Joropo”, “Calypso”};
request.setAttribute(“musicList”, favoriteMusic);
Cuál es el resultado
en una JSP?
Music is ${musicList}
Music is [Ljava.lang.String;@d29dd9]
JSP EL: Expression Language
Asuma que la variable fulano no existe. Cuál sería el resultado
de las siguientes expresiones en una JSP:
Mi amigo se llama ${fulano}
${7 + fulano}
${8 / fulano}
${5 - fulano}
${6 % fulano}
${7 < fulano}
${7 == fulano}
${fulano == false}
JSP EL: Expression Language
Asuma que la variable fulano no existe. Cuál sería el resultado
de las siguientes expresiones en una JSP:
Mi amigo se llama ${fulano}
${7 + fulano}
${8 / fulano}
${5 - fulano}
${6 % fulano}
${7 < fulano}
${7 == fulano}
${fulano == false}
Mi amigo se llama
JSP EL: Expression Language
Asuma que la variable fulano no existe. Cuál sería el resultado
de las siguientes expresiones en una JSP:
Mi amigo se llama ${fulano}
${7 + fulano}
${8 / fulano}
${5 - fulano}
${6 % fulano}
${7 < fulano}
${7 == fulano}
${fulano == false}
Mi amigo se llama
7
JSP EL: Expression Language
Asuma que la variable fulano no existe. Cuál sería el resultado
de las siguientes expresiones en una JSP:
Mi amigo se llama ${fulano}
${7 + fulano}
${8 / fulano}
${5 - fulano}
${6 % fulano}
${7 < fulano}
${7 == fulano}
${fulano == false}
Mi amigo se llama
7
Infinity
JSP EL: Expression Language
Asuma que la variable fulano no existe. Cuál sería el resultado
de las siguientes expresiones en una JSP:
Mi amigo se llama ${fulano}
${7 + fulano}
${8 / fulano}
${5 - fulano}
${6 % fulano}
${7 < fulano}
${7 == fulano}
${fulano == false}
Mi amigo se llama
7
Infinity
5
JSP EL: Expression Language
Asuma que la variable fulano no existe. Cuál sería el resultado
de las siguientes expresiones en una JSP:
Mi amigo se llama ${fulano}
${7 + fulano}
${8 / fulano}
${5 - fulano}
${6 % fulano}
${7 < fulano}
${7 == fulano}
${fulano == false}
Mi amigo se llama
7
Infinity
5
Excepción !!
JSP EL: Expression Language
Asuma que la variable fulano no existe. Cuál sería el resultado
de las siguientes expresiones en una JSP:
Mi amigo se llama ${fulano}
${7 + fulano}
${8 / fulano}
${5 - fulano}
${6 % fulano}
${7 < fulano}
${7 == fulano}
${fulano == false}
Mi amigo se llama
7
Infinity
5
Excepción !!
false
JSP EL: Expression Language
Asuma que la variable fulano no existe. Cuál sería el resultado
de las siguientes expresiones en una JSP:
Mi amigo se llama ${fulano}
${7 + fulano}
${8 / fulano}
${5 - fulano}
${6 % fulano}
${7 < fulano}
${7 == fulano}
${fulano == false}
Mi amigo se llama
7
Infinity
5
Excepción !!
false
false
JSP EL: Expression Language
Asuma que la variable fulano no existe. Cuál sería el resultado
de las siguientes expresiones en una JSP:
Mi amigo se llama ${fulano}
${7 + fulano}
${8 / fulano}
${5 - fulano}
${6 % fulano}
${7 < fulano}
${7 == fulano}
${fulano == false}
Mi amigo se llama
7
Infinity
5
Excepción !!
false
false
true
KWWSORFDOKRVWWHVW-637HVWHUGR
0RYLHOLVW
JSP EL: Expression Language
$PHOLH
5HWXUQRIWKH.LQJ
0HDQ*LUOV
Ciclos haciendo uso de scriptlets:
,QD-63ZLWKVFULSWLQJ
WDEOH!
6WULQJ>@LWHPV 6WULQJ>@UHTXHVWJHW$WWULEXWH³PRYLH/LVW´
6WULQJYDU QXOO
IRULQWL LLWHPVOHQJWKL^
YDU LWHPV>L@
!
WU!WG! YDU!WG!WU!
`!
WDEOH!
FKDSWHU
$K"NWZ-IKP&
JSP EL: Expression Language
4HECFOR%ACHTAGFROMTHE*34,ISPERFECTFORTHISˆITGIVESYOU
ASIMPLEWAYTOITERATEOVERARRAYSANDCOLLECTIONS
-63FRGH
b
li
g
a
t
is
h
t
t
u
o
(WeÕll talk ab in the chapter.)
directive later
#WDJOLESUH¿[ ´F´XUL ´KWWSMDYDVXQFRPMVSMVWOFRUH´!
KWPO!ERG\!
VWURQJ!0RYLHOLVWVWURQJ!
EU!EU!
WDEOH!
FIRU(DFKYDU ´PRYLH´LWHPV ´^PRYLH/LVW`´!
WU!
WG!^PRYLH`WG!
WU!
FIRU(DFK!
WDEOH!
e
h
t
(
y
a
r
r
a
e
ir
t
en
e
h
t
h
g
u
o
r
h
t
ch
s
a
p
e
o
s
t
Lo
in
r
p
d
n
a
)
e
ibut
r
t
t
a
Ó
t
is
s
L
a
h
ie
v
o
le
b
m
Ò
a
t
is
h
T
(
ow.
r
w
e
n
a
in
t
n
e
m
ele
w.)
o
r
r
e
p
n
m
lu
o
c
e
n
just o
ERG\!KWPO!
&UDVKUHIUHVKHURQ+70/WDEOHV
.
w
o
R
le
b
a
T
r
o
f
s
<tr> stand
JSP EL: Expression Language
Condicional simple
<c:if test =“${usertype == ‘root’}”>
……
</c:if>
Condicional múltiple
<c:choose>
<c:when test=“…”>
……
</c:when>
<c:otherwise>
……
</c:otherwise>
</c:choose>

Documentos relacionados