[Javaweb] Tutorial básico de JSP


Introducción a JSP

JSP significa Java Server Pages (Java Server Pages), que es una tecnología de desarrollo web dinámico.

  • Diseño simplificado de servlets Java, utilizado principalmente para implementar la parte de la interfaz de usuario de las aplicaciones web Java.

  • Utilice etiquetas JSP para insertar código Java en páginas web HTML (las partes dinámicas están escritas en Java). Las etiquetas generalmente comienzan con <% y terminan con %>

  • JSP incorpora código Java en páginas HTML, obtiene datos de entrada del usuario a través de formularios web , accede a bases de datos y otras fuentes de datos y luego crea páginas web dinámicamente.

  • Las aplicaciones web desarrolladas con JSP son multiplataforma y pueden ejecutarse tanto en Linux como en otros sistemas operativos.

  • JSP separa la lógica de la página web de la visualización del diseño web

Las principales diferencias entre html y jsp:

.html es una página estática que contiene contenido de página fijo

.jsp es una página dinámica. Los datos de la página se pueden actualizar dinámicamente y admiten código java anidado y código html.


Cómo funciona JSP

Cuando el navegador accede a la página y el servidor encuentra el archivo con el sufijo .jsp , encontrará el archivo index.jsp según la ruta , traducirá el index.jsp al archivo index_jsp.java y lo compilará para generar index_jsp. archivo de clase , cargue el archivo de clase y ejecútelo .

Traducir JSP a un archivo Java es generar todo el código HTML en el JSP a través de la secuencia y finalmente traducirlo a una clase y luego cargarlo en la máquina virtual. Es esencialmente un servlet y responde (la respuesta es transmitir el código HTML en forma JSP para volver a escribirlo en el navegador)

Insertar descripción de la imagen aquí


ciclo de vida JSP

Ciclo de vida de JSP, es decir, todo el proceso desde la creación hasta la destrucción,

Similar al ciclo de vida del servlet ( Principio de funcionamiento y ciclo de vida del servlet ), el ciclo de vida de JSP también incluye la compilación de archivos JSP en servlets.

  • Fase de compilación:
    el contenedor de servlet analiza el archivo JSP, convierte el archivo JSP en un servlet, luego compila el archivo fuente del servlet y genera la clase de servlet.

  • Fase de inicialización: jspInit()
    carga la clase de servlet correspondiente a JSP, crea una instancia y llama a su método de inicialización
    (generalmente solo se ejecuta una vez)

  • Fase de ejecución: _jspService ()
    llama al método de servicio de la instancia de servlet correspondiente a JSP (todos los comportamientos interactivos relacionados con la solicitud hasta que se destruyan)

  • Fase de destrucción: jspDestroy ()
    llama al método de destrucción de la instancia de servlet correspondiente al JSP y luego destruye la instancia de servlet

Ejemplo de código:

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<html>
<head>
    <title>life.jsp</title>
</head>
<body>

<%!
    private int initVar=0;
    private int serviceVar=0;
    private int destroyVar=0;
%>

<%!
    public void jspInit(){
    
    
        initVar++;
        System.out.println("jspInit(): JSP被初始化了"+initVar+"次");
    }
    public void jspDestroy(){
    
    
        destroyVar++;
        System.out.println("jspDestroy(): JSP被销毁了"+destroyVar+"次");
    }
%>

<%
    serviceVar++;
    System.out.println("_jspService(): JSP共响应了"+serviceVar+"次请求");

    String content1="初始化次数 : "+initVar;
    String content2="响应客户请求次数 : "+serviceVar;
    String content3="销毁次数 : "+destroyVar;
%>
<h1>JSP demo</h1>
<p><%=content1 %></p>
<p><%=content2 %></p>
<p><%=content3 %></p>

</body>
</html>


comentarios JSP

<!-- html注释内容,查看源码时能看到 -->

<%-- jsp注释,查看⻚⾯源码时看不到 --%>

Notas principales:

gramática describir
<%--Comentario--%> Comentarios JSP, el contenido del comentario no se enviará al navegador ni se compilará
<!-- Comentarios --> Comentarios HTML, puede ver el contenido del comentario al ver el código fuente de la página web a través del navegador.
<% Representa estática <% constante
%> Representa % estático> constante
\' Comillas simples utilizadas en atributos
\" Comillas dobles utilizadas en atributos

Código Java anidado en JSP

Utilice un script pequeño: <% código java%>

Formato básico:

声明标签: 
<%!变量或者⽅法声明%>

表达式标签: 
<%= 表达式%> 在⻚⾯上显示的效果

程序代码标签: 
<%java代码%> ⻚⾯上动态展示内容

page指令:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


代码示例:
 <body>
 <%! int i=10;%><!--成员变量-->
 <%! public void show(){
    
    }%> <!--成员⽅法-->
 <%=i%> <!--输出变量值-->
 </body>

sintaxis JSP

problema de codificación china

Si queremos mostrar chino normalmente 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"%>

guion

Los programas de script pueden contener declaraciones, variables, métodos o expresiones de Java siempre que sean válidos en el lenguaje de script.

Cualquier texto, etiquetas HTML y elementos JSP deben escribirse fuera del programa de script.

Formato de sintaxis:

一、 
<% 代码片段 %>


二、等价的xml格式:
<jsp:scriptlet>
   代码片段
</jsp:scriptlet>



declarar variables

Una declaración de declaración puede declarar una o más variables y métodos.

一、
<%! declaration; [ declaration; ]+ ... %>



二、等价的xml语句
<jsp:declaration>
   代码片段
</jsp:declaration>

Ejemplo de código:

<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Circle a = new Circle(2.0); %> 

expresión

La expresión del lenguaje de secuencias de comandos contenida en una expresión JSP primero se convierte en una cadena y luego se inserta en el lugar donde aparece la expresión.

El elemento de expresión puede contener cualquier expresión que se ajuste a la especificación del lenguaje Java , pero no se puede utilizar un punto y coma para terminar la expresión.

一、
<%= 表达式 %>

二、 等价的xml语句
<jsp:expression>
   表达式
</jsp:expression>

Ejemplo de código:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>demo</title>
</head>
<body>
	<p>
	   今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
	</p>
</body> 
</html> 

Producción:

今天的日期是: 2021-9-21 13:40:07

instrucción

Las instrucciones JSP se utilizan para establecer propiedades relacionadas con páginas JSP.

Formato de sintaxis:

<%@ directive attribute="value" %>
directive:指令名称 attribute 属性名 value:属性值

Tres etiquetas de comando:

Nombre del comando describir
<%@ página… %> Defina atributos de dependencia de la página, como lenguaje de secuencia de comandos, página de error, requisitos de caché, etc.
<%@ incluye… %> incluir otros archivos
<%@ etiquetalib… %> Introduzca la definición de la biblioteca de etiquetas (puede ser una etiqueta personalizada)

Comando de página

La directiva de página proporciona al contenedor instrucciones de uso para la página actual. Una página JSP puede contener varias directivas de página.

El formato de sintaxis del comando Página:

<%@ page attribute="value" %>
Nombre del Atributo valor de atributo describir
idioma Java El idioma utilizado al interpretar el archivo JSP, generalmente lenguaje java, el predeterminado es java
se extiende El nombre completo de cualquier clase. ¿Qué clase se debe heredar al compilar el archivo JSP? JSP es un servlet, por lo que al especificar la herencia de una clase común, es necesario implementar los métodos init, destroy y otros del servlet.
importar Cualquier nombre de paquete o nombre de clase Importe las clases, paquetes, etc. utilizados en JSP. La importación es el único atributo de directiva de página que se puede declarar varias veces. Una importación puede hacer referencia a uogelei, separados por comas en inglés <%@ page import=nombre del paquete. Nombre de clase, paquete nombre.Nombre de clase %>
sesión verdadero Falso Si el objeto de sesión está integrado en JSP. Si es verdadero, el objeto de sesión está integrado y se puede utilizar directamente. De lo contrario, el valor predeterminado es verdadero.
descarga automática verdadero Falso Si se debe ejecutar el caché. Si es verdadero, la cadena de salida usando out.println() y otros métodos no llega al servidor del cliente inmediatamente, sino que se almacena temporalmente en el caché. El caché está lleno o el programa se completa o No llega al cliente hasta que se ejecuta la operación out.flush(). El valor predeterminado es verdadero.
buffer ninguno o número KB Especifique el tamaño de la caché, válido cuando autoFlush está configurado en verdadero, por ejemplo <%@ pagebuffer=10kb%>
esThreadSafe verdadero Falso ¿Es seguro para subprocesos? Si es verdadero, se ejecutarán varios subprocesos para ejecutar el programa jsp al mismo tiempo. De lo contrario, solo se ejecutará un subproceso y los demás esperarán. El valor predeterminado es falso.
esPáginaError verdadero Falso Especifique si la página es una página de visualización de errores. Si es verdadero, el JSP tiene una excepción de objeto Exception incorporada, que se puede usar directamente. De lo contrario, no hay ninguna. El valor predeterminado es falso.
página de error Ruta relativa a una página JSP Indica una página de error. Si el programa JSP arroja una excepción no detectada, irá a la página especificada por errorPage. El atributo isErrorPage de la página especificada por errorPage suele ser verdadero y el objeto de excepción incorporado es una excepción no detectada.
tipo de contenido Tipos de documentos válidos El navegador del cliente determina el tipo de documento basándose en este atributo. Por ejemplo, el formato HTML es texto/html, el formato de texto sin formato es texto/sin formato, la imagen JPG es imagen/jpeg, la imagen GIF es imagen/documento gif de WORD es aplicación /msword: este atributo suele ir seguido de charset para establecer la codificación y su función es notificar al servidor y al navegador que utilicen la misma tabla de códigos.
codificación de página UTF8, ISO8859-1, etc.

incluir directiva

JSP puede incluir otros archivos a través de la directiva de inclusión.

Los archivos incluidos pueden ser archivos JSP, archivos HTML o archivos de texto. Los archivos incluidos pueden considerarse parte del archivo JSP y se compilarán y ejecutarán al mismo tiempo.

El nombre del archivo en la directiva de inclusión es en realidad una dirección URL relativa. Si no hay una ruta asociada con el archivo, el compilador JSP buscará en la ruta actual de forma predeterminada.

Formato de sintaxis:

<%@ include file="⽂件相对 url 地址" %>

directiva taglib

JSP API permite a los usuarios personalizar etiquetas. Una biblioteca de etiquetas personalizadas es una colección de etiquetas personalizadas.

La directiva Taglib introduce la definición de una colección de etiquetas personalizadas, incluidas rutas de biblioteca y etiquetas personalizadas.

El atributo uri determina la ubicación de la biblioteca de etiquetas y el atributo de prefijo especifica el prefijo de la biblioteca de etiquetas (se puede personalizar)

Formato de sintaxis:

<%@ taglib uri="uri" prefix="" %>

Objetos integrados JSP

Un total de 9 objetos están predefinidos en JSP: solicitud, respuesta, sesión, aplicación, salida, contexto de página, configuración, página, excepción

objeto de solicitud

Función:
Representa la información de la solicitud del cliente y acepta datos transmitidos al servidor a través del protocolo HTTP (incluida información del encabezado, información del sistema, métodos de solicitud, parámetros de solicitud, etc.)

Tipo: javax.servlet.httpServletRequest

El alcance del objeto de solicitud es una solicitud.


objeto de respuesta

Función:
Representa la respuesta al cliente y pasa el objeto procesado por el contenedor JSP al cliente.

Tipo: HTTPServletRespuesta

Alcance: sólo válido dentro de páginas JSP


objeto de sesión

Objetos creados automáticamente por el servidor relacionados con las solicitudes de los usuarios.

El servidor genera un objeto de sesión para cada usuario para guardar la información del usuario y rastrear el estado de operación del usuario.

La clase Map se usa dentro del objeto de sesión para guardar datos y el formato de los datos guardados es "Clave/valor".

El valor del objeto de sesión no se limita al tipo de cadena.


objeto de aplicación

Función:
guardar información en el servidor hasta que se apague (la información guardada en el objeto de la aplicación será válida en toda la aplicación)

En comparación con el objeto de sesión, el objeto de aplicación tiene un ciclo de vida más largo y es similar a las "variables globales" del sistema.

  • Diferencia:
    solicitud-solicitud única
    sesión-durante el acceso al navegador (durante la sesión)
    aplicación-durante el inicio del servidor, los datos almacenados pueden ser entre navegadores

fuera objeto

Función:
generar información en el navegador web y administrar el búfer de salida en el servidor de aplicaciones.

Cuando utilice el objeto de salida para generar datos, puede operar el búfer de datos para borrar los datos restantes en el búfer a tiempo para dejar espacio para otras salidas.

Una vez completada la salida de datos, el flujo de salida debe cerrarse a tiempo

Ejemplo de código:

out.print("<script type='text/javascript'>alert('⽤户名不存在');location.href='index.jsp'</script>");

objeto de contexto de página

Función:
Obtener cualquier rango de parámetros

A través de él, puede obtener salida, solicitud, respuesta, sesión, aplicación y otros objetos de la página JSP.

La creación e inicialización del objeto pageContext las completa el contenedor, que se puede utilizar directamente en la página JSP.


objeto de configuración

Función:
Obtener información de configuración del servidor

Se puede obtener un objeto de configuración mediante el método getServletConfig() del objeto pageConext.

Cuando se inicializa un servlet, el contenedor pasa cierta información al servlet a través del objeto de configuración. Los desarrolladores pueden proporcionar parámetros de inicialización para programas de servlet y páginas JSP en el entorno de la aplicación en el archivo web.xml.

Ejemplo de código:

//将image路径转换成服务器端的路径
String url= config.getServletContext().getRealPath("/image");
<h1>url=<%=url %></h1>

objeto de página

El objeto de página representa el propio JSP y sólo es legal dentro de la página JSP.

El objeto implícito de página contiene esencialmente las variables a las que hace referencia la interfaz de servlet actual, similar al puntero this en la programación Java.


objeto de excepción

Función:
muestra información de excepción, solo se usa en páginas que contienen isErrorPage="true"

Si utiliza este objeto en una página JSP general, el archivo JSP no se compilará.

Si ocurre una excepción no detectada en la página JSP, se generará un objeto de excepción y el objeto de excepción se transferirá a la página de error establecida en la directiva de página, y luego el objeto de excepción correspondiente se procesará en la página de error.


código de estado

código de estado información describir
100 Continuar El servidor solo recibe una parte de la solicitud, pero mientras el servidor no la rechace, el cliente continuará con la solicitud.
101 Protocolos de conmutación protocolo de cambio de servidor
200 DE ACUERDO Solicitud confirmada
201 Creado Completar cuando se solicite, se crea un nuevo recurso.
202 Aceptado La solicitud fue aceptada pero no procesada.
300 Múltiples opciones Una tabla de hipervínculos. Los usuarios pueden seleccionar un hipervínculo y acceder a él. Se admiten un máximo de 5 hipervínculos.
301 Movido permanentemente La página solicitada se ha movido a una nueva URL.
302 Encontró La página solicitada se ha movido temporalmente a una nueva URL
303 Ver Otros La página solicitada se puede encontrar en una URL diferente.
306 No usado Este código de estado ya no se utiliza, pero se conserva.
307 Redirección temporal La página solicitada se ha movido temporalmente a una nueva URL
400 Solicitud incorrecta El servidor no reconoce la solicitud.
401 No autorizado La página solicitada requiere un nombre de usuario y contraseña.
402 pago requerido Este código de estado no se puede utilizar todavía
403 Prohibido Está prohibido el acceso a la página solicitada.
404 Extraviado El servidor no puede encontrar la página solicitada.
405 Método no permitido El método especificado en la solicitud no está permitido.
406 Inaceptable El servidor solo puede crear una respuesta que sea inaceptable para el cliente.
407 Se requiere autenticación proxy Se debe autenticar un servidor proxy antes de poder atender las solicitudes.
408 Pide tiempo fuera El tiempo de solicitud excedió el tiempo que el servidor podía esperar y la conexión se desconectó.
409 Conflicto Hay un conflicto en la solicitud.
410 Desaparecido La página solicitada ya no está disponible
411 Longitud requerida "Longitud del contenido" no está definida y el servidor se niega a aceptar la solicitud.
412 Condición previa Falló La condición previa solicitada fue evaluada por el servidor como falsa
413 Request Entity Too Large 因为请求的实体太大,服务器拒绝接受请求
414 Request-url Too Long 服务器拒绝接受请求,因为URL太长。多出现在把"POST"请求转换为"GET"请求时所附带的大量查询信息
415 Unsupported Media Type 服务器拒绝接受请求,因为媒体类型不被支持
500 Internal Server Error 请求不完整,服务器遇见了出乎意料的状况
501 Not Implemented 请求不完整,服务器不提供所需要的功能
502 Bad Gateway 请求不完整,服务器从上游服务器接受了一个无效的响应
503 Service Unavailable 请求不完整,服务器暂时重启或关闭
504 Gateway Timeout 网关超时
505 HTTP Version Not Supported 服务器不支持所指定的HTTP版本

EL表达式

在JSP2.0中,EL从JSTL中剥离出来,放置在JSP规范中,称为JSP2.0规范的一部分

在JSP中使用EL表达式,可以简化对象和变量的访问是EL表达式

语法:

${
    
    需要展示信息的名字}



当表达式没有指定变量或者对象的范围时:
容器会依次从pageContext—>request—>session—>application中查找该变量或对象,
通过隐含对象获得指定作⽤域的值:
pageScope对象,⽤于获取当前⻚⾯的属性值
requestScope对象,⽤于获取请求范围的属性值
sessionScope对象,⽤于获取会话范围的属性值
applicationScope对象,⽤于获取程序范围的属性值


语法:
 ${
    
    requestScope.key}

基础操作符:

术语 定义
算术型 + 、-、 * /(div) 除 、 %(mod) 余数
逻辑型 and、&&、or、||、!、not
关系型 ==、eq、!=、ne、、gt、<=、le、>=、ge。可以与其他值进⾏⽐较,或与布尔型、字符串型、整型或浮点型⽂字进⾏⽐较
Empty Empty操作符是⼀个前缀操作符⽤于判断⼀个值是否为null或者为empty如String str =“”; ${empty str} 返回值为true
条件型 A ?B :C。根据 A 赋值的结果来赋值 B 或 C

代码示例:

单个变量:${
    
    a+10}<br>
单个变量:${
    
    s}<br>
单个对象:${
    
    key.属性名}
 //对象类型
 Users u=new Users();
 u.setName("王⽼五");
 u.setPass("abc");
 pageContext.setAttribute("u1",u);
 user.name=${
    
    u1.name}
 user.pass=${
    
    u1.pass}
 // list集合对象:
 List list=new ArrayList();
 list.add("刘能");
 list.add(30);
 list.add(u);
 pageContext.setAttribute("list2",list);
 list1=${
    
    list2[0]}<br/>
 list2=${
    
    list2[1]}<br/>
 list3=${
    
    list2[2].pass}<br/>
// map集合:
 k1=${
    
    map1.k1}<br>
 k2=${
    
    map1.k2.username}--- ${
    
    map1.k2.password}

判断变量是否有值或是否存在:  ${
    
    empty key值}
 List list2=new ArrayList();
 list2.add("aa");
 request.setAttribute("list222",list2);

判断list中是否有数据:  ${
    
    empty list222} 

JSTL

JSP标准标签库(JSTL)是JSP标签集合,封装了JSP应用的通用核心功能

JSTL支持通用的、结构化的任务(迭代、条件判断、XML文档操作、国际化标签、SQL标签),还提供了一个框架来使用集成JSTL的自定义标签,根据JSTL标签所提供的功能,可以将其分为5个类别:核心标签、格式化标签、sql标签、xml标签、jstl函数

  • 作用:
    简化jsp⻚⾯编写代码

  • 语法格式:
    ①standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下
    ②在JSP页面中引入<%@ taglib prefix=”页面使用的名称” uri=”功能范围的路径”%>

功能范围 前缀 uri
core c http://java/sun.com/jsp/jstl/core
i18n fmt http://java/sun.com/jsp/jstl/fmt
sql sql http://java/sun.com/jsp/jstl/sql
xml x http://java/sun.com/jsp/jstl/xml
functions fn http://java/sun.com/jsp/jstl/function

核心标签

核心标签是最常用的 JSTL标签

引用核心标签库语法:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

核心标签分类:

  • 表达式操作
    out、set、remove、catch
  • 流程控制
    if、choose、when、otherwise
  • 迭代操作
    forEach、forTokens
  • URL操作
    import、param、url、redirect

① <c:set>
主要⽤来将变量存储⾄JSP范围中 或是JavaBean的属性或Map对象中

名称 说明 是否必须写 默认值
Value 要被存储的值
var 存⼊的变量名称
scope var变量的JSP范围 Page
target JavaBean或Map对象
property 指定target对象的属性

② <c:out>
主要用来显示数据的内容

名称 说明 是否必须写 默认值
value 需要显示出来的值
default 如果value的值为null,则显示default的值
escapeXml 是否转换特殊字符,如:<转换成 & lt; True

③ <c:remove>
主要负责移除变量

名称 说明 是否必须写 默认值
Var 欲移除的变量名称
Scope var变量的jsp范围 Page

④ <c:if>
主要用于进行if判断,如果为true,则输出标签体中的内容

名称 说明 是否必须写 默认值
Test 表达式的结果为true,则执⾏体内容,false则相反
var 如果用来存储test运算的结果(true或false)
scope Var变量的JSP范围 page

⑤ <c:choose>,<c:when>,<c:otherwise>
作用相当于if-else

名称 说明 是否必须写 默认值
test 如果表达式的结果为true,则执⾏体内容,false则相反

⑥ <c:forEach>
循环控制,它可以将数组,集合(Collection)中的成员循序浏览一遍

名称 说明 是否必须写 默认值
var ⽤来存放现在指定的成员
items 被迭代的集合对象
varStatus ⽤来存放现在指的相关成员信息
begin 开始的位置 0
end 结束的位置 最后⼀个成员
step 每次迭代的间隔数 1

格式化标签:

① fmt:formatDate

  • 作用
    将日期类型格式化为指定模式的字符串
属性 描述
value 将要被格式化的数据
pattern 格式化的模式,与SimpleDateFormat的参数设置⼀样
var 格式化后的字符串所要存放的变量,若不指定var,则会将格式化的结果直接显示在⻚⾯
scope Espacio de atributos de dominio donde se almacenan las variables, página predeterminada
tipo Sus valores son fecha, hora y ambos, lo que indica si el valor dado contiene fecha, hora o ambas, el valor predeterminado es fecha.

②fmt:parseFecha

  • Función:
    se utiliza para convertir la cadena especificada en tipo de fecha

<fmt:parseDate value="${now }" patrón=“aaaa-MM-dd” var=“hoy”/>

Atributos describir
Valor La hora a la que llega el servidor
Patrón Formato convertido
Era Variables mostradas en la página.

③ fmt: formatoNúmero

  • Función:
    Formatear números según el formato especificado.
Atributos describir
maxIntegerDigits El mayor número de dígitos en la parte entera.
minEnteroDígitos El menor número de dígitos en la parte entera.
maxFrctionDigits Número máximo de dígitos en la parte decimal
minFrcciónDígitos Número mínimo de dígitos en la parte decimal.
era Variable para almacenar resultados formateados.
alcance Alcance del atributo var
solo entero Si se analizan solo números enteros verdaderos o números de coma flotante falsos

Supongo que te gusta

Origin blog.csdn.net/m0_50609545/article/details/120401355
Recomendado
Clasificación