JSP Sintaxis
Esta sección presentará brevemente la sintaxis básica en el desarrollo de JSP.
Scriptlet
Un scriptlet puede contener cualquier cantidad de sentencias, variables, métodos o expresiones de Java, siempre que sean válidos en el lenguaje de script.
Formato de sintaxis del scriptlet:
<% fragmento de código %>
O también puede escribir la declaración XML equivalente, como se muestra a continuación:
<jsp:scriptlet> 代码片段 </jsp:scriptlet>
Cualquier texto, etiqueta HTML o elemento JSP debe escribirse fuera del scriptlet.
A continuación se muestra un ejemplo, que también es el primer ejemplo de JSP de este tutorial:
<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>
<%
out.println("Your IP address is " + request.getRemoteAddr());
%>
</body>
</html>
Nota:Asegúrese de que Apache Tomcat esté instalado en el directorio C:\apache-tomcat-7.0.2 y que el entorno de ejecución esté configurado correctamente.
Guarde el código anterior en hello.jsp, luego colóquelo en el directorio C:\apache-tomcat-7.0.2\webapps\ROOT, abra el navegador e ingrese http://localhost:8080/hello.jsp en la barra de direcciones. Después de ejecutarlo, se obtiene el siguiente resultado:
Problema de codificación de caracteres chinos
Si queremos mostrar correctamente los caracteres chinos en la página, debemos agregar el siguiente código al encabezado del archivo JSP:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
A continuación, modificaremos el programa anterior a:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ejemplo(example.com)</title>
</head>
<body>
Hello World!<br/>
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
%>
</body>
</html>
De esta manera, los caracteres chinos se mostrarán correctamente.
Declaración JSP
Una declaración puede declarar una o más variables y métodos para que los utilice el código Java posterior. En un archivo JSP, debe declarar estas variables y métodos antes de poder usarlos.
Formato de sintaxis de la declaración JSP:
<%! declaration; [ declaration; ]+ ... %>
O también puede escribir la declaración XML equivalente, como se muestra a continuación:
<jsp:declaration> 代码片段 </jsp:declaration>
Ejemplo de programa:
<%! int i = 0; %> <%! int a, b, c; %> <%! Circle a = new Circle(2.0); %>
Expresión JSP
La expresión del lenguaje de script contenida en una expresión JSP se convierte primero en String y luego se inserta en el lugar donde aparece la expresión.
Dado que el valor de la expresión se convierte en String, puede usar la expresión en una línea de texto sin preocuparse de si es una etiqueta HTML.
El elemento de expresión puede contener cualquier expresión que cumpla con la especificación del lenguaje Java, pero no puede usar un punto y coma para terminar la expresión.
Formato de sintaxis de la expresión JSP:
<%= expresión %>
De igual manera, también puede escribir la declaración XML equivalente:
<jsp:expression> 表达式 </jsp:expression>
Ejemplo de programa:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ejemplo(example.com)</title>
</head>
<body>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body>
</html>
Después de ejecutarlo, se obtiene el siguiente resultado:
今天的日期是: 2016-6-25 13:40:07
Comentarios JSP
Los comentarios JSP tienen principalmente dos funciones: comentar el código y comentar (deshabilitar) un bloque de código.
Formato de sintaxis de los comentarios JSP:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ejemplo(example.com)</title>
</head>
<body>
<%-- 该部分注释在网页中不会被显示--%>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body>
</html>
Después de ejecutarlo, se obtiene el siguiente resultado:
今天的日期是: 2016-6-25 13:41:26
Reglas de sintaxis para usar comentarios en diferentes casos:
| Sintaxis | Descripción |
|---|---|
| <%-- comentario --%> | Comentario JSP, el contenido del comentario no se envía al navegador ni siquiera se compila |
| <!-- comentario --> | Comentario HTML, el contenido del comentario se puede ver al ver el código fuente de la página web a través del navegador |
| <\% | Representa la constante estática <% |
| %\> | Representa la constante estática %> |
| \' | Comillas simples utilizadas en atributos |
| \" | Comillas dobles utilizadas en atributos |
Directivas JSP
Las directivas JSP se utilizan para establecer atributos relacionados con toda la página JSP.
Formato de sintaxis de las directivas JSP:
<%@ directive attribute="value" %>
Aquí hay tres tipos de etiquetas de directiva:
| Directiva | Descripción |
|---|---|
| <%@ page ... %> | Define los atributos de dependencia de la página, como el lenguaje de script, la página de error, los requisitos de caché, etc. |
| <%@ include ... %> | Incluye otros archivos |
| <%@ taglib ... %> | Introduce la definición de una biblioteca de etiquetas, que puede ser etiquetas personalizadas |
Acciones JSP
Las etiquetas de acción JSP utilizan la estructura de sintaxis XML para controlar el motor de servlets. Pueden insertar dinámicamente un archivo, reutilizar componentes JavaBean, guiar al usuario a otra página, generar HTML relacionado para el complemento de Java, etc.
Las etiquetas de acción tienen un solo formato de sintaxis, que cumple estrictamente con el estándar XML:
<jsp:action_name attribute="value" />
Las etiquetas de acción son básicamente funciones predefinidas. La siguiente tabla enumera algunas etiquetas de acción JSP disponibles:
| Sintaxis | Descripción |
|---|---|
| jsp:include | Se utiliza para incluir recursos estáticos o dinámicos en la página actual |
| jsp:useBean | Busca e inicializa un componente JavaBean |
| jsp:setProperty | Establece el valor del componente JavaBean |
| jsp:getProperty | Inserta el valor del componente JavaBean en la salida (output) |
| jsp:forward | Transfiere un objeto request que contiene la solicitud del usuario de un archivo JSP a otro |
| jsp:plugin | Se utiliza para incluir objetos Applet y JavaBean en la página HTML generada |
| jsp:element | Crea dinámicamente un elemento XML |
| jsp:attribute | Define los atributos del elemento XML creado dinámicamente |
| jsp:body | Define el cuerpo del elemento XML creado dinámicamente |
| jsp:text | Se utiliza para encapsular datos de plantilla |
Objetos implícitos JSP
JSP admite nueve variables definidas automáticamente, comúnmente conocidas como objetos implícitos. Son objetos disponibles automáticamente en las páginas JSP, sin necesidad de declaración o inicialización adicional.
La siguiente tabla presenta un resumen de estos nueve objetos implícitos:
| Objeto | Descripción |
|---|---|
| request | HttpServletRequestInstancia de la clase, objeto que representa la solicitud HTTP, contiene la información enviada por el cliente al servidor, como datos de formulario, parámetros de URL, etc. |
| response | HttpServletResponseInstancia de la clase, objeto que representa la respuesta HTTP, se utiliza para enviar datos y respuestas al cliente. |
| out | JspWriterInstancia de la clase, objeto utilizado para enviar contenido de texto al cliente, generalmente se usa para generar HTML. |
| session | HttpSessionInstancia de la clase, objeto que representa la sesión del usuario, se puede utilizar para almacenar y recuperar datos específicos del usuario en múltiples páginas. |
| application | ServletContextInstancia de la clase, representa el contexto de la aplicación web, se puede utilizar para almacenar y recuperar datos globales de la aplicación. |
| config | ServletConfigInstancia de la clase, contiene información de configuración sobre la página JSP actual, como parámetros de inicialización. |
| pageContext | PageContextInstancia de la clase, proporciona acceso a todos los objetos y espacios de nombres de la página JSP |
| page | Similar a la palabra clave this en las clases de Java, representa la instancia de la página JSP actual y se puede utilizar para llamar a los métodos de la página. |
| exception | exceptionObjeto de la clase, representa el objeto de excepción correspondiente en la página JSP donde ocurre el error, se utiliza para manejar situaciones de excepción en la página JSP, y se puede utilizar para capturar y manejar las excepciones que ocurren en la página. |
Sentencias de control de flujo
JSP proporciona soporte completo para el lenguaje Java. Puede usar la API de Java en programas JSP e incluso crear bloques de código Java, incluyendo sentencias condicionales y sentencias de bucle, etc.
Sentencias condicionales
if…elsebloque, vea el siguiente ejemplo:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! int day = 3; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ejemplo(example.com)</title>
</head>
<body>
<h3>IF...ELSE 实例</h3>
<% if (day == 1 || day == 7) { %>
<p>今天是周末</p>
<% } else { %>
<p>今天不是周末</p>
<% } %>
</body>
</html>
Después de ejecutarlo, se obtiene el siguiente resultado:
IF...ELSE 实例 今天不是周末
Ahora veamos el bloque switch...case, que es muy diferente del bloque if...else. Utiliza out.println() y todo está contenido dentro de las etiquetas del scriptlet, como se muestra a continuación:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! int day = 3; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ejemplo(example.com)</title>
</head>
<body>
<h3>SWITCH...CASE 实例</h3>
<%
switch(day) {
case 0:
out.println("星期天");
break;
case 1:
out.println("星期一");
break;
case 2:
out.println("星期二");
break;
case 3:
out.println("星期三");
break;
case 4:
out.println("星期四");
break;
case 5:
out.println("星期五");
break;
default:
out.println("星期六");
}
%>
</body>
</html>
Acceda a través del navegador y, después de ejecutarlo, se obtiene el siguiente resultado:
SWITCH...CASE 实例 星期三
Sentencias de bucle
En los programas JSP se pueden utilizar los tres tipos básicos de bucles de Java: for, while y do...while.
Veamos un ejemplo del bucle for. Lo siguiente genera "Tutorial para Novatos" en diferentes tamaños de fuente:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! int fontSize; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ejemplo(example.com)</title>
</head>
<body>
<h3>For 循环实例</h3>
<%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
<font color="green" size="<%= fontSize %>">
Ejemplo
</font><br />
<%}%>
</body>
</html>
Después de ejecutarlo, se obtiene el siguiente resultado:

Reescribamos el ejemplo anterior usando un bucle while:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! int fontSize=0; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ejemplo(example.com)</title>
</head>
<body>
<h3>While 循环实例</h3>
<%while ( fontSize <= 3){ %>
<font color="green" size="<%= fontSize %>">
Ejemplo
</font><br />
<%fontSize++;%>
<%}%>
</body>
</html>
Acceda a través del navegador, el resultado de salida es (fontSize se inicializa en 0, por lo que se genera una línea adicional):
JSP admite todos los operadores lógicos y aritméticos de Java.
La siguiente tabla enumera los operadores comunes de JSP, ordenados por prioridad de mayor a menor:
| Categoría | Operador | Asociatividad |
|---|---|---|
| Sufijo | () [] . (operador de punto) | De izquierda a derecha |
| Unario | ++ - - ! ~ | De derecha a izquierda |
| Multiplicativo | * / % | De izquierda a derecha |
| Aditivo | + - | De izquierda a derecha |
| Desplazamiento | >> >>> << | De izquierda a derecha |
| Relacional | > >= < <= | De izquierda a derecha |
| Igualdad/desigualdad | == != | De izquierda a derecha |
| AND bit a bit | & | De izquierda a derecha |
| XOR bit a bit | ^ | De izquierda a derecha |
| OR bit a bit | | | De izquierda a derecha |
| AND lógico | && | De izquierda a derecha |
| OR lógico | || | De izquierda a derecha |
| Condicional | ?: | De derecha a izquierda |
| Asignación | = += -= *= /= %= >>= <<= &= ^= |= | De derecha a izquierda |
| Coma | , | De izquierda a derecha |
Literales JSP
El lenguaje JSP define los siguientes literales:
- Booleano (boolean): true y false;
- Entero (int): igual que en Java;
- Flotante (float): igual que en Java;
- Cadena (string): comienza y termina con comillas simples o dobles;
- Null:null.