Notas de estudio de expresión EL (super detalladas)

1. ¿Qué es la expresión EL y qué hace la expresión EL?

El nombre completo de la expresión EL es: Expression Language es un lenguaje de expresión.

¿Cuál es la función de la expresión EL? La expresión EL reemplaza principalmente el script de expresión en la página jsp para generar datos en la página jsp . Porque las expresiones EL son mucho más concisas que los scripts de expresión jsp al generar datos.

a.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--先往页面中保存一些数据--%>
    <%
        request.setAttribute("key","值");
    %>
    表达式脚本输出key的值是:<%=request.getAttribute("key")%><br>
    EL表达式输出key的值是:${key}<br>
    <br>
    输出不存在的值:<br>
    表达式脚本输出key的值是:<%=request.getAttribute("key1")%><br>
    EL表达式输出key的值是:${key1}<br>
</body>
</html>

Mostrar resultados:
Inserte la descripción de la imagen aquí

Nota :

El formato de la expresión EL es: $ {Expression}

Cuando la expresión EL genera un valor nulo, la salida es una cadena vacía.

Cuando el script de expresión jsp genera un valor nulo, la salida es una cadena nula.

2. Orden de búsqueda de expresiones EL de datos de dominio

La expresión EL es principalmente para generar datos en la página jsp.

Genere principalmente los datos en el objeto de dominio.

b.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        //往四个域中都保存了相同的key的数据
        pageContext.setAttribute("key","pageContext");
        request.setAttribute("key","request");
        session.setAttribute("key","session");
        application.setAttribute("key","application");
    %>
    ${key}
</body>
</html>

Mostrar resultados:
Inserte la descripción de la imagen aquí

Después de anotar el pageContext:

Inserte la descripción de la imagen aquí

Comente la solicitud nuevamente:

Inserte la descripción de la imagen aquí

Anote la sesión nuevamente, cierre el navegador y abra b.jsp:

Inserte la descripción de la imagen aquí

Nota: Cuando los cuatro campos tienen los mismos datos clave, la expresión EL buscará en el orden de los cuatro campos, de pequeño a grande, y mostrará la salida cuando se encuentre.

Ordenar de pequeño a grande: pageContext ==== >>> solicitud ==== >>> sesión ==== >>> aplicación

3. La expresión EL genera los atributos comunes y los atributos de matriz del Bean. Lista de propiedades de la colección, propiedades de la colección de mapas

3.1 Requisito: salida de atributos comunes y atributos de matriz en la clase Person. Enumere los atributos de la colección y los atributos de la colección de mapas.

src / com / pojo / Person.java:

public class Person {
    
    
//    需求i. 需求——输出 Person 类中普通属性,数组属性。list 集合属性和 map 集合属性。
    private String name;
    private String[] phones;
    private List<String> cities;
    private Map<String,Object> map;

c.jsp:

<body>
    <%
        Person person = new Person();
        person.setName("旭哥好帅");
        person.setPhones(new String[]{"10086","10010","12306"});

        List<String> cities = new ArrayList<String>();
        cities.add("北京");
        cities.add("南京");
        cities.add("东京");
        person.setCities(cities);

        Map<String,Object> map = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");
        person.setMap(map);
        //把 person 放到四个域当中,任何一个都可以
        pageContext.setAttribute("p",person);
    %>

    输出 person: ${p} <br><br>
    输出 person.name 属性: ${p.name} <br><br>
    输出 person的phones 数组属性: ${p.phones}  这里输出的是数组的地址<br>
    输出 person的phones[0] 数组属性: ${p.phones[0]} <br><br>
    输出 person的List集合中的所有元素值: ${p.cities}  这里输出整个 list 集合中的元素<br>
    输出 person的List集合中的个别元素值: ${p.cities[0]} <br><br>
    输出 person的Map集合中的所有元素值: ${p.map} <br>
    输出 person的Map集合中的某个key的值: ${p.map.key1}  这里输出 key1 <br><br><br><br>

</body>

Mostrar resultados:

Inserte la descripción de la imagen aquí

Si escribe otro método getAge () en persona ( nota: no hay un atributo de edad en la clase Person )

public int getAge() {
    
    
    return 20;
}

Mostrar resultados:

Inserte la descripción de la imagen aquí

El atributo de edad aún se puede mostrar.

Esto se debe a que: en las expresiones EL, lo que está buscando no es un atributo, sino un método de obtención.

4. Operación de expresión EL

Sintaxis: $ {expresión de operación}

Las expresiones EL admiten los siguientes operadores:

4.1 Operaciones relacionales

Operador relacional Descripción ejemplo resultado
== o eq igual $ {5 == 5} o $ {5 eq 5} cierto
! = o ne no igual a $ {5! = 5} o $ {5 ne 5} falso
<或 lt Menos que $ {3 <5} 或 $ {3 lt 5} cierto
> O gt mas que el $ {2> 10} o $ {2 gt 10} falso
<= o le Menos que o igual a $ {5 <= 12} o $ {5 le 12} cierto
> = o ge mayor o igual a $ {3> = 5} o $ {3 ge 5} falso

4.2 Operaciones lógicas

Operadores logicos Descripción ejemplo resultado
&& 或 y Y operación $ {12 == 12 && 12 <11} 或 $ {12 == 12 y 12 <11} falso
|| 或 o O operación $ {12 == 12 || 12 <11} 或 $ {12 == 12 o 12 <11} cierto
! O no Operación de negación $ {! true} 或 $ {not true} falso

4.3 Operaciones aritméticas

Operador aritmético Descripción ejemplo resultado
+ adición $ {12 + 18} 30
- Sustracción $ {18 - 8} 10
* multiplicación $ {12 * 12} 144
/ O div división $ {144/12} o $ {144 div 12} 12
% O mod Modulo $ {144% 10} o $ {144 mod 10} 4

4.4 funcionamiento en vacío

La operación vacía puede juzgar si un dato está vacío, si está vacío, dará como resultado verdadero, y si no está vacío, dará como resultado falso.

Está vacío en las siguientes situaciones:

  1. Cuando el valor es nulo, está vacío
  2. Cuando el valor es una cadena vacía, está vacío
  3. El valor es una matriz de tipo de objeto, cuando la longitud es cero
  4. colección de listas, el número de elementos es cero
  5. colección de mapas, el número de elementos es cero
<body>
    <%
    // 1、值为 null 值的时候,为空
        request.setAttribute("emptyNull", null);
    // 2、值为空串的时候,为空
        request.setAttribute("emptyStr", "");
    // 3、值是 Object 类型数组,长度为零的时候
        request.setAttribute("emptyArr", new Object[]{});
    // 4、list 集合,元素个数为零
        List<String> list = new ArrayList<>();
    // list.add("abc");
        request.setAttribute("emptyList", list);
    // 5、map 集合,元素个数为零
        Map<String,Object> map = new HashMap<String, Object>();
    // map.put("key1", "value1");
        request.setAttribute("emptyMap", map);
    %>
    ${ empty emptyNull } <br/>
    ${ empty emptyStr } <br/>
    ${ empty emptyArr } <br/>
    ${ empty emptyList } <br/>
    ${ empty emptyMap } <br/>
</body>

4.5 Operación ternaria

Expresión 1? Expresión 2: Expresión 3

Si el valor de la expresión 1 es verdadero, devuelve el valor de la expresión 2, si el valor de la expresión 1 es falso, devuelve el valor de la expresión 3

Ejemplo:

${ 12 != 12   ?   "旭哥好帅!" : "旭哥太帅辣!" }

4.6 "." Operación de punto y operador de corchete []

.Operación de puntos, puede generar el valor de un atributo en el objeto Bean.

[] La operación entre corchetes puede generar el valor de un elemento en un conjunto ordenado.

Y la operación de corchetes [] también puede generar el valor de la clave que contiene caracteres especiales en la clave del conjunto de mapas.

<body>
    <%
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("a.a.a", "aaaValue");
        map.put("b+b+b", "bbbValue");
        map.put("c-c-c", "cccValue");
        request.setAttribute("map", map);
    %>
    <%--输出某个key--%>
    ${ map['a.a.a'] } <br>      <%--不是 ${ map.a.a.a } --%>
    ${ map["b+b+b"] } <br>
    ${ map['c-c-c'] } <br>
</body>

5. Los 11 objetos ocultos de las expresiones EL

Los 11 objetos implícitos en la expresión EL se definen por sí mismos en la expresión EL y se pueden usar directamente.

variable Tipos de efecto
pageContext PageContextImpl Puede obtener nueve objetos integrados en jsp
pageScope Mapa <Cadena, Objeto> Puede obtener los datos en el dominio pageContext
requestScope Mapa <Cadena, Objeto> Puede obtener los datos en el campo Solicitud
sessionScope Mapa <Cadena, Objeto> Puede obtener los datos en el campo Sesión.
applicationScope Mapa <Cadena, Objeto> Puede obtener los datos en el dominio ServletContext
param Mapa <Cadena, Cadena> Puede obtener el valor del parámetro de solicitud.
paramValues Mapa <Cadena, Cadena []> También puede obtener el valor del parámetro de solicitud y usarlo al obtener múltiples valores
encabezamiento Mapa <Cadena, Cadena> Puede obtener la información del encabezado de la solicitud.
headerValues Mapa <Cadena, Cadena []> Puede obtener la información del encabezado de la solicitud, puede obtener múltiples valores
Galleta Mapa <Cadena, Cookie> Puede obtener la información de las cookies de la solicitud actual.
initParam Mapa <Cadena, Cadena> Puede configurar los parámetros de contexto en web.xml

5.1 EL obtiene atributos en cuatro dominios específicos

pageScope ====== pageContext 域

requestScope ====== Solicitud 域

sessionScope ====== Sesión 域

applicationScope ====== ServletContext 域

<body>
    <%
        pageContext.setAttribute("key1","pageContext1");
        pageContext.setAttribute("key2","pageContext2");
        request.setAttribute("key2","request");
        session.setAttribute("key2","session");
        application.setAttribute("key2","application");
    %>
    ${ pageScope.key2 } <br>
    ${ requestScope } <br>
    ${ requestScope.key2 } <br>
    ${ sessionScope.key2 } <br>
    ${ applicationScope.key2 } <br>
</body>

5.2 Uso del objeto pageContext

  1. protocolo:
  2. Servidor IP:
  3. Puerto de servicio:
  4. Obtenga la ruta del proyecto:
  5. Obtener método de solicitud:
  6. Obtenga la dirección IP del cliente:
  7. Obtenga el número de identificación de la sesión:
<body>
    <%--把request放到pageContext中,用req表示,这样更加简洁--%>
    <%
        pageContext.setAttribute("req", request);
    %>

    <%--表达式脚本输出
    request.getScheme() 它可以获取请求的协议
    request.getServerName() 获取请求的服务器 ip 或域名
    request.getServerPort() 获取请求的服务器端口号
    getContextPath() 获取当前工程路径
    request.getMethod() 获取请求的方式(GET 或 POST)
    request.getRemoteHost() 获取客户端的 ip 地址
    session.getId() 获取会话的唯一标识
    --%>
    <%=request.getScheme() %> <br>

    1.协议(pageContext.request.scheme): ${ pageContext.request.scheme }<br>
    1.协议(简化写法:req.scheme): ${ req.scheme }<br>
    2.服务器 ip:${ pageContext.request.serverName }<br>
    3.服务器端口:${ pageContext.request.serverPort }<br>
    4.获取工程路径:${ pageContext.request.contextPath }<br>
    5.获取请求方法:${ pageContext.request.method }<br>
    6.获取客户端 ip 地址:${ pageContext.request.remoteHost }<br>
    7.获取会话的 id 编号:${ pageContext.session.id }<br>
</body>

5.3 Uso de otros objetos implícitos en expresiones EL

1) param, paramValues

param Map <String, String> Puede obtener el valor del parámetro de solicitud

paramValues ​​Map <String, String []> También puede obtener el valor del parámetro de solicitud, que se utiliza al obtener varios valores

Parámetro de salida directamente:

<body>
    ${ param }
</body>

Visite http: // localhost: 8080 / 09_EL_JSTL / other_el_obj.jsp, la pantalla de efectos:

Inserte la descripción de la imagen aquí

Aquí param representa el parámetro solicitado, que es un tipo de mapa. No hay parámetros en este momento, por lo que solo hay uno {}

Visite http: // localhost: 8080 / 09_EL_JSTL / other_el_obj.jsp? Username = abc123, visualización de efectos:

Inserte la descripción de la imagen aquí

访问 http: // localhost: 8080 / 09_EL_JSTL / other_el_obj.jsp? Username = abc123 & password = 123456 :

Inserte la descripción de la imagen aquí

other_el_obj.jsp:

<body>
    ${ param } <br>
    输出请求参数 username 的值:${ param.username } <br>
    输出请求参数 password 的值:${ param.password } <br>
    输出请求参数 username 的值:${ paramValues.username[0] } <br>
    输出请求参数 hobby 的值:${ paramValues.hobby[0] } <br>
    输出请求参数 hobby 的值:${ paramValues.hobby[1] } <br>
</body>

Mostrar resultados:

Inserte la descripción de la imagen aquí

2) encabezado, headerValues

header Map <String, String> Puede obtener la información del encabezado de la solicitud

headerValues ​​Map <String, String []> Puede obtener la información del encabezado de la solicitud, puede obtener múltiples valores

输出请求头【User-Agent】的值:${ header['User-Agent'] } <br>
输出请求头【Connection】的值:${ header.Connection } <br>
输出请求头【User-Agent】的值:${ headerValues['User-Agent'][0] } <br>

Inserte la descripción de la imagen aquí

3) galleta

cookie Map <String, Cookie> Puede obtener la información de cookies de la solicitud actual

获取 Cookie 的名称:${ cookie.JSESSIONID.name } <br>
获取 Cookie 的值:${ cookie.JSESSIONID.value } <br>

Inserte la descripción de la imagen aquí

4) initParam

initParam Map <String, String> Puede obtener los parámetros de contexto configurados en web.xml

输出&lt;Context-param&gt;username 的值:${ initParam.username } <br>
输出&lt;Context-param&gt;url 的值:${ initParam.url } <br>

web.xml:

<context-param>
    <param-name>username</param-name>
    <param-value>root</param-value>
</context-param>

<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql:///test</param-value>
</context-param>

Salida de muestra:

p <String, String>
Puede obtener los parámetros de contexto configurados en web.xml

输出&lt;Context-param&gt;username 的值:${ initParam.username } <br>
输出&lt;Context-param&gt;url 的值:${ initParam.url } <br>

web.xml:

<context-param>
    <param-name>username</param-name>
    <param-value>root</param-value>
</context-param>

<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql:///test</param-value>
</context-param>

Salida de muestra:
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_45024585/article/details/112747243
Recomendado
Clasificación