<%-- comentario --%>
<% if (i == 3) { %> Buenos días <% } %>
<%= clock.getDayOfMonth() %>
Fíjate que no lleva el ';' al final de la línea de código.
<%! int time = Calendar.getInstance().get(Calendar.AM_PM); %>
<jsp:useBean id=="clock" class=="jspCalendar" />
Sintaxis:
<jsp:accion nombre=“xxx” propiedad=“xxx” />
<jsp:accion nombre=“xxx” propiedad=“xxx” valor=“xxx” />
<%@ page language=="java" imports=="java.util.*" %> <%@ include file=="copyright.html" %>
WEB-INF (aunque no hereden de HttpServlet ni estén enlazadas en el fichero web.xml) de la misma forma que lo haríamos con una clase normal: paquete.clase.WEB-INF/lib.request.getRequestDispatcher. Además la dirección mostrada seguirá siendo la del servlet y no verá la dirección real del JSP, con sendRedirect no podremos enviarles a una página en WEB-INF (además, en el cliente se actualiza la dirección).response.sendRedirect("WEB-INF/pp.jsp"); request.getRequestDispatcher("WEB-INF/pp.jsp").forward(request, response);
Piensa que esto haría que las url de los elementos cambiasen por lo que las direcciones relativas en los links o css ya no serán válidas, tendrás hacer cambios del estilo: href=“download/app.zip” por href=“/pages/download/app.zip”.
El hecho que haya un tag para las declaraciones tiene su motivo bien fundado, por ejemplo, para definir métodos:
<%! private String holaIndio () { return "jau!"; } %> <%= holaIndio() %>
Piensa que estas declaraciones son estáticas, por lo que si tu declaras una variable y la vas modificando, si se conecta otro usuario se puede topar con que esté modificada. El siguiente código lo demuestra sacando el número de veces que la página ha sido cargada desde que el server se inició:
<%! private int accessCount = 0; %> Veces que la página se ha cargado: <%= ++accessCount %>
response.FlushBuffer). También podemos indicar que no haya buffer (<%@ page buffer=“none” %>); esta directiva es útil cuando la página puede tardar un tiempo considerable en formarse.synchronized (this) { out.print(i); }
Existen objetos que se crean automáticamente al hacerse una llamada a un archivo .jsp, estos sustituyen a los elementos accesibles desde los métodos doGet o doPost de un Servlet.
this.Podemos añadir contenido de forma dinámica a nuestro JSP. Una de las ventajas que esto nos dá es que podemos montar plantillas para nuestras páginas y no repetir así cabeceras, menús… Podemos insertar el contenido de una página html, el de un documento de texto plano, la salida de otro jsp o la de un servlet.
Para añadir contenido utilizamos la acción include: <jsp:include page=“pgs/chiguagua.jsp” />.
Podemos pasar parámetros a las páginas que incluimos, para ello usaremos el jsp:param:
<jsp:include page="pgs/StandardHeading.jsp"> <jsp:param name="bgColor" value="YELLOW" /> </jsp:include>
Para recoger el valor de bgColor dentro del código de StandardHeading.jsp haremos un: request.getParameter(“bgColor”). Si a la página que ha incluido StandardHeading.jsp también se le han pasado parámetros (no tiene por qué ser por código, sino por dirección, algo así: direccion?fgColor=WHITE) estos podrán ser accedidos con el response.getParameter desde StandardHeading.
Para enviar el contenido de otra página (aunque en la dirección seguirá apareciendo la misma que a la que se llamó) utilizaremos jsp:forward:
<jsp:forward page="index.html" />
Son unos tags que equivalen a código java en las páginas JSP. Su sintaxis es muy sencilla, para crear un objeto haremos <jsp:useBean id=“nombre del objeto” class=“nombre de la clase” />.
Jugaremos con la clase Prueba:
package pck; public class Prueba { String msg = ""; String name = ""; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
<jsp:useBean id=“obj” class=“pck.Prueba” /> equivale a pck.Prueba obj = new pck.Prueba();, luego podremos hacer: <%= obj.getMsg() %>. Es decir, podremos combinar los distintos tipos de tags.Si queremos jugar con las propiedades de los objetos usados en los beans sus clases tendrán que tener métodos getters y setters. Para ello usamos los tags: jsp:setProperty y jsp:getProperty, combinando sus atributos: name (nombre del objeto), property (nombre de la propiedad, sin get ni set y con la primera letra en minusculas) y value (el valor, esta sólo para setProperty).
<jsp:setProperty name=“obj” property=“msg” value=“Mi mama me mima” /> equivale a <% obj.setMsg(“Mi mama me mima”); %><jsp:getProperty name=“obj” property=“msg” /> equivale a <%= obj.getMsg() %>Imaginemos que la página .jsp que tenemos que llamar para que se ejecute el código es page.jsp. Ahora lo que queremos es asignar los parámetros incluidos en la dirección de la página a las propiedades de nuestro objeto, para ello la sintaxis es la siguiente: <jsp:setProperty name=“nombre objeto” property=“propiedad a asignar” param=“nombre del parámetro”>:
<jsp:setProperty name=“obj” property=“msg” param=“m” />.Si por alguna de esas grandes casualidades de la vida, el parámetro pasado se llama igual que la propiedad que queremos asignar sólo tendremos que indicar el atributo property:
<jsp:setProperty name=“obj” property=“msg” />Otro atajo lo encontramos cuando los parámetros que nos vienen en la dirección tienen igual nombre que las propiedades del objeto, sólo tendremos que indicar el property como * y todas quedarán asignadas automáticamente.
<jsp:setProperty name=“obj” property=“*” />Otra de las cosas que podemos hacer es anidarlo todo de la forma siguiente:
<jsp:useBean id="obj" class="pck.Prueba"> <jsp:setProperty name="obj" property="*" /> </jsp:useBean>
El scope es otro atributo de jsp:useBean y se refiere a donde se guardan (y por tanto donde son accesibles), el contexto de los bean. Se usa con la siguiente sintaxis: <jsp:useBean … scope=“valor” /> Tiene cuatro posibles valores:
Se basa en escribir expresiones en los JSP de forma: ${expresión}. (Si quisiesemos poner esta sintaxis textualmente haríamos: \${expresión}). Podemos desactivar esta característica usando <%@ page isELEnabled=“false” %> … pero con lo que mola…
Aquí van unos cuantos ejemplos de EL:
request.setAttribute("hola", "buenos días"); request.getRequestDispatcher("pp.jsp").forward(request, response);
En el JSP:
${hola}
<jsp:useBean id="obj" class="pck.Kclass"> <jsp:setProperty name="obj" property="*"/> </jsp:useBean> ${obj.msg} <br /> ${obj.name}
${obj.vect[0]}
${empty “”} devolvería true. O también podriamos usar el: ${expresión ? valor1 : valor2}<td bgcolor="${cliente.dinero < 0 ? 'yellow' : 'red'}"> ${cliente.dinero} </td>
${param.msg}