1.1 Introducción a JSP

Hay dos formas populares de escribir un servlet: imperativo y declarativo . Ya hemos tratado con el primero: este es, de hecho, un Servlet. El segundo se llama JSP (Java Server Pages), y ahora nos familiarizaremos con él.

Ejemplo de servlet JSP:


<html> 
    <body> 
        <% out.print(2*5); %> 
    </body> 
 </html> 

No muy parecido al Servlet clásico al que estamos acostumbrados, ¿verdad? Esto es cierto. JSP es una página HTML con inserciones de código Java (resaltado en verde) .

Verá, si tiene mucho código Java en un servlet y poco código HTML, entonces se siente más cómodo usando un servlet clásico . Pero, ¿qué sucede si necesita una página HTML grande en la que el servidor solo cambie un par de líneas?

En este caso, lo más simple sería crear esta página HTML y de alguna manera ejecutar el código Java en el servidor directamente en ella.

1.2 Compilación de JSP

Veamos otro ejemplo:


<html> 
  <body> 
    <%
        double num = Math.random();
        if (num > 0.95) {
     %>
         <h2>You are lucky, user!</h2><p>(<%= num %>)</p>
    <%
        }
    %> 
  </body> 
</html> 

Obtenemos un número aleatorio, y si es mayor a 0,95, imprimimos el texto "¡Tienes suerte, usuario!"

El código Java se resalta aquí en azul . Normal (no resaltado): código HTML y rojo: etiquetas de servicio , que ayudan a comprender dónde está el código Java y dónde está el HTML.

¿Notas algo raro? La llave de cierre "}"está en otro "code block". ¿Cuál es la forma correcta de escribir dicho código? ¿Cómo funciona?

La respuesta será súper simple :)

El servidor web, después de encontrar un archivo JSP, lo compila en un servlet clásico. Basado en la página JSP anterior, se generará este Servlet:

public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  throws Exception {
    PrintWriter out = response.getWriter();
    out.print("<html> ");
    out.print("<body>");
        double num = Math.random();
        if (num > 0.95) {
            out.print("<h2>You're lucky user! </h2><p>(" + num + ")</p>");
        }
    out.print("</body>");
    out.print("</html>");
    }
}

¡El contenedor web acaba de generar el código de servlet, donde el HTML se convirtió en texto y las inserciones de código Java se convirtieron en código Java normal!