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 ANUNDECLAREDVARIABLETHENAMEhPERSONv4HE#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;=OPERATOR7ESWEARLOOKITUPINTHESPECITH 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;=OPERATOR7ESWEARLOOKITUPINTHESPECITH 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;=OPERATOR7ESWEARLOOKITUPINTHESPECITH 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;=OPERATOR7ESWEARLOOKITUPINTHESPECITH 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;=OPERATOR7ESWEARLOOKITUPINTHESPECITH 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;=OPERATOR7ESWEARLOOKITUPINTHESPECITH 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,ISPERFECTFORTHISITGIVESYOU 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>