8.5. JSP
8.5.1. Características del lenguaje JSP
Fecha de aparición: 1995
Perspectivas:
- Usado para proyectos grandes y complejos, donde PHP (y otros lenguajes de scripting) se quedan pequeños. O eso aseguran los chicos de Oracle, claro.
- El lenguaje de programación es Java, es decir, lo conoce cualquier programador.
- Velocidad de ejecución superior a la de otros lenguajes semi-interpretados.
Filosofía:
- Adaptación natural de Java al lado del servidor.
- Orientado a objetos. Multiplataforma. Fuertemente tipado.
- Puede embeberse dentro de HTML, como PHP.
- El código Java se precompila en un Servlet y se deja cargado en la memoria del servidor. Las peticiones subsiguientes se ejecutan así de forma más rápida. Este enfoque está siendo adoptado por otras tecnologías del lado del servidor, como NodeJS o algunos frameworks basados en otros lenguajes, que precompilan las vistas para servirlas mucho más deprisa.
8.5.2. Configuración necesaria en el servidor
Para ejecutar Java en el lado del servidor, lo más apropiado es instalar Tomcat. Es el servidor de referencia para la tecnología JSP.
Apache Tomcat es un servidor web capaz de contener y servir los servlets de Java. Implementa todos los servicios necesarios para que JSP funcione correctamente. Existen otros servidores, como JBoss o Embarcadero, pero Tomcat continúa siendo el más extendido en la actualidad. Como se ejecuta sobre la máquina virtual de Java, es posible hacerlo funcionar en cualquier sistema operativo.
Otras soluciones, como ejecutar JSP a través de CGI en un servidor web convencional, son técnicamente viables pero resultan mucho más lentas.
8.5.3. Sintaxis básica de JSP
El código JSP se embebe en HTML de este modo:
<html>
<head>...</head>
<body>
Este texto se ha generado desde HTML<br/>
<%
out.println("Y este se ha generado con JSP");
%>
</body>
</html>
Las variables se declaran como en cualquier programa Java. Por ejemplo:
int var = 5;
out.print("La variable var vale " + var);
Estos son los operadores más habituales:
Comparación: <, >, <=, >=, ==, !=
Asignación: =
Y estas son algunas estructuras de control:
while (condicion) {
Acciones;
}
if (condicion) {
Acciones-1;
}
else {
Acciones-2;
}
8.5.4. Entrada / Salida
La entrada de datos a través de un formulario HTML se hace usando el objeto request, que estará precargado en cualquier Servlet. La salida se puede hacer con un simple System.out.println():
// Leer datos de un formulario:
variable = request.getParameter("campo");
// Salida:
System.out.println ("cadena" + variable + "cadena2");
8.5.5. Bibliotecas, clases y métodos
La forma de escribir clases y métodos en JSP es la misma que en Java, como es lógico. No vamos a explicar aquí todas las peculiaridades del lenguaje, que son muchas y pintorescas. Solo recordaremos que, en Java, no pueden existir métodos fuera de las clases, porque es un lenguaje orientado a objetos bastante estricto.
La sintaxis para declarar una clase, sus atributos y sus métodos es esta:
class MiClase extends ClaseMadre {
public|private|protected tipo atributo;
public|private|protected tipo nombre(params) {
Acciones;
}
}
Cada clase debe ir en un archivo independiente con el mismo nombre que la clase que contiene.
Las clases de Java pueden agruparse en paquetes (packages). La forma de importar un paquete para usar sus clases en nuestro programa es:
import paquete; // Esto importa el paquete completo
import paquete.clase; // Esto importa solo una clase del paquete
Pero cuidado, cuando se trabaja con JSP existe una pequeña diferencia en la forma de importar paquetes: en lugar de la sentencia import, se debe emplear una directiva del precompilador. Las directivas son instrucciones para el precompilador de Java que modifican su modo de proceder durante la compilación. Todas las directivas empiezan por el símbolo “@”.
En el caso concreto de la importación de paquetes o clases en un script JSP, la directiva que debemos emplear es:
<%@ page import="paquete" %>
8.5.6. Ejemplo 1 en JSP: Hola mundo
<% out.println(“<html><body>”); out.println(“<h1>Hola, mundo</h1>”); out.println(“</body></html>”); %>
8.5.7. Ejemplo 2 en JSP: login con comprobación de email por Ajax
Nuevamente, mostraremos solo el script del lado del sevidor (login.jsp). El código del lado del cliente lo tienes disponible en la sección que dedicamos al lenguaje Perl, donde solo tendrás que cambiar la referencia a “login.pl” por “login.jsp”.
<% @page import="java.sql.*"
# Conectamos a la BD
Connection conex = null;
Statement st = null;
Class.forName("org.gjt.mm.mysql.Driver");
conex = DriverManager.getConnection("jdbc:mysql://servidor", "user", "pass");
# Recuperamos la información del formulario
name = request.getParameter("username");
pass = request.getParameter("password");
# Consultamos usuario y contraseña en la base de datos
st = conex.createStatement();
ResultSet = st.executeQuery("SELECT id FROM users WHERE user = '" + name +
"' AND password = '" + pass + "'");
# Generamos la respuesta JSON para el cliente
if (st.EOF)
out.println("{'error': 'Usuario o contraseña incorrectos'}");
else
out.println("{'success': 'Autenticación correcta', 'userid':"+ ResultSet.getInt() + "}");
conex.close()
%>