当前位置: 首页 > 图灵资讯 > 技术篇> EL表达式2

EL表达式2

来源:图灵教育
时间:2023-06-04 09:17:03

1.从小范围内优先阅读EL表达式数据。51

pageContext<request<session<application

1.1EL表达式有四个隐含范围:51

-pagescope对应pagecontext范围。

-requestScope对应request范围。

-sessionScope对应session范围。

-aplicationScope对应aplication范围。

代码在E:\java学习javaWeb\coursecourse24\web8.jsp

<%--从小范围内阅读EL表达式优先级的数据  50-51--%><%@page contentType="text/html;charset=UTF-8"%><%    数据存储在四个域中,而且name是一样的    session.setAttribute("data", "session");    request.setAttribute("data", "request");    pageContext.setAttribute("data", "pageContext");    application.setAttribute("data", "application");%><%--在没有规定范围的前提下,EL表达式优先从小范围内获取数据-%><%--pageContext < request < session < application --%>${data}<hr><%-- 数据-%可以在EL表达式的指定范围内读取><%--EL表达式有四个隐含的隐含范围对象-%><%--pageScope requestScope sessionScope applicationScope--%><%--以下是指定范围取数据。--%>${pageScope.data}<br>${requestScope.data}<br>${sessionScope.data}<br>${applicationScope.data}<br><%--在实际开发中,name是不同的,因为当数据存储到某个域时。所以 xxxScope  都可以省略。所以 xxxScope  都可以省略。-%>

EL表达式预处理null。如果是null,将空字符串输出到浏览器。

代码在E:\java学习javaWeb\coursecourse24web9.jsp

<%--EL表达式深度学习  51--%><%@page contentType="text/html;charset=UTF-8" %><%    request.setAttribute("username", "zhangsan");%><%--取出数据,输出到浏览器-%><%=request.getAttribute("username")%>采用EL表达式:${username}<%--当我们写错了,拿出来的是null-%><%=request.getAttribute("usernam")%><%--EL表达式的主要任务是做页面显示,要求最终页面显示友好。--%><%--当我们写错了,EL表达式处理了null。--%><%--当我们写错了,EL表达式处理了null。如果是null,则在浏览器上显示空白。--%>采用EL表达式:${usernam}<hr><%--表面上,EL表达式就是这样写的,实际上在运行时,还是要翻译生成java代码。--%><%--  ${usernam} 这个EL表达式相当于这个java代码:-%><%=request.getAttribute("usernam") == null ? "" : request.getAttribute("usernam")%>

2.EL表达式取数据有两种形式:51

-第一种:.(大部分都是这样)

-第二种:[](如果存储在域中,这个name含有特殊字符,可以使用[])

-request.setAttribute("abc.def","zhangsan");

-${requestScope.abc.def}这样就不能取值了。

-应该这样:${requestScope["abc.def"]}

代码在E:\java学习javaWeb\coursecourse24web10.jsp

<%--EL表达式深度学习  51--%><%@ page import="com.bjpowernode.javaweb.jsp.bean.User" %><%@page contentType="text/html;charset=UTF-8" %><%    ////创建user对象    User user = new User();    user.setUsername("zhangsan");    ///存储在request域中    request.setAttribute("fadsa",user);%><%--使用EL表达式取出并输出到浏览器-%>${fadsa}<br><%--数据写法1-%>${fadsa.username}<br><%--取数据写法2-%><%--username取user,注意[]需要添加注意[] 双引号--%><%--[] 如果里面没有加双引号,就会被视为变量。假如是带双引号 "username“,去找user对象的username属性。假如是带双引号 "username“,去找user对象的username属性。-%>${fadsa["username"]}<br><hr><%    // 存储数据到request域。    request.setAttribute("abc.def", "hello jsp el!!!");%><%--取出数据并输出到浏览器-%><%--这是空白滴:-%>${requestScope.abc.def}<%--正确取法--%>${requestScope["abc.def"]}

3.掌握使用EL表达式,如何从Map集合中获取数据:51

${map.key}

代码在E:\java学习javaWeb\coursecourse24web11.jsp

<%--关于Map集合取数据的EL表达式深度学习  51--%><%@ page import="java.util.HashMap" %><%@ page import="java.util.Map" %><%@ page import="com.bjpowernode.javaweb.jsp.bean.User" %><%--EL表达式深度学习  51--%><%@page contentType="text/html;charset=UTF-8" %><%    //map集合    Map<String,String> map = new HashMap<>();    map.put("username","zhangsan");    map.put("password","123");    ///将Map集合存储在request域中    request.setAttribute("userMap",map);%><%--使用EL表达式,取出map中的数据,输出到浏览器-%>${userMap.username}<br>${userMap.password}<br>${userMap["username"]}<br>${userMap["password"]}<hr><%    Map<String,User> userMap2 = new HashMap<>();    User user = new User();    user.setUsername("lisi");    userMap2.put("user",user);    request.setAttribute("abcdusermap2);%><%--用EL表达式将username从Map集合中的username中取出-%>${abcd.user.username}

3.1掌握EL表达式的使用,如何从数组和List集合中获取数据:51

-${数组[0]}}

-${数组[1]}

-${list[0]}

代码在E:\java学习javaWeb\coursecourse24web12.jsp

<%--关于数组和List集合数据的EL表达式深度学习  51--%><%@ page import="com.bjpowernode.javaweb.jsp.bean.User" %><%@ page import="java.util.List" %><%@ page import="java.lang.reflect.Array" %><%@ page import="java.util.ArrayList" %><%@ page import="java.util.Set" %><%@ page import="java.util.HashSet" %><%@page contentType="text/html;charset=UTF-8" %><%    //数组    String[] username = {"zhangsan","lisi","wangwu"};    数组存储在向域中    request.setAttribute("nameArray",username);%><%--用EL表达式取出数组中的数据-%>${nameArray}<br>${nameArray[0]}<br>${nameArray[1]}<br>${nameArray[2]}<br><hr><%    User u1 = new User();    u1.setUsername("zhangsan");    User u2 = new User();    u2.setUsername("lisi");    //对象数组    User[] users = {u1, u2};    ///存入request域    request.setAttribute("userArray",users);%><%--去除数组中第二个用户名的名称-%>${userArray[1].username}<hr><%    List<String> list = new ArrayList<>();    list.add("abc");    list.add("def");    request.setAttribute("myList",list);%><%--取出List集合-%><%--list集合也是通过下标获取数据的。--%>${myList}<br>${myList[0]}<br>${myList[1]}<hr><%    Set<String> set = new HashSet<>();    set.add("a");    set.add("b");    request.setAttribute("set", set);%><%--取出set集合-%>set集:set集:${set}<%--以下单个数据无法获取:PropertyNotFoundException: 类型[java.util.HashSet]找不到属性[0]-%><%--${set[0]}--%>

3.2page指令中有一个属性可以忽略EL表达式51

<%@pagecontentType="text/html;charset=UTF-8"isELIgnored="true"%>

isELIgnored="true“意思是忽略EL表达式

isELIgnored="false表示不忽视EL表达式。(这是默认值)

isELIgnored="true“这是全局的控制。

局部控制可以使用反斜杠:${username}EL表达式也可以忽略不计。

代码在E:\java学习javaWeb\coursecourse24web13.jsp

<%--关于忽略指令的EL表达式深度学习  51--%><%--<%@page contentType="text/html;charset=UTF-8" isELIgnored="false" %>--%><%@page contentType="text/html;charset=UTF-8" %><%--<%@page contentType="text/html;charset=UTF-8" isELIgnored="true" %>--%><%    request.setAttribute("username", "zhangsan");%><%-- isELIgnored="true" 表示忽略了JSP中整个页面的所有EL表达式。若要忽略其中一个,可使用以下反斜杠。若要忽略其中一个,可使用以下反斜杠。 --%>\${username}${username}${username}

3.3通过EL表达式获取应用的根:51

${pageContext.request.contextPath}

代码在E:\java学习javaWeb\coursecourse24web14.jsp

<%--EL表达式深度学习关于获取应用的根  51--%><%@page contentType="text/html;charset=UTF-8" %><%    // JSP有九个内置对象    // pageContext,request,session,application,response,out,config,page,exception    // 四个域对象中,最小的域是pagecontextext    // pageContext翻译为:页面上下文。可以通过pageContext获得什么?什么可以通过pageContext获得????%><%--从以下代码来看,pageContext.getRequest() 方法是无用的。这--%><%--是获取request的对象。JSP有自己的内置对象request,直接使用request内置对象-%><%--简单来说说这个pagecontexttet.getRequest()在jsp中没用,但在el中有大用-%><%=pageContext.getRequest()%><%=request%><%--    在EL表达式中,没有request作为隐藏对象。    requestScope 这只代表“请求范围”。    requestScope 这只代表“请求范围”。不等于request对象。    在EL表达式中有一个隐藏的对象:pageContext    pagecontext和JSP中的九个内置对象pagecontext是EL表达式中的同一对象。--%><%--<%=pageContext.getRequest()%>该代码对应的EL表达式${pageContext.request}--%>${pageContext.request}<%--获取应用的根-%><%=request.getContextPath()%><%--写成EL的表达式是-%>采用EL表达式获取应用的根路径:${pageContext.request.contextPath}

4.EL表达式中的其他隐藏对象:52

-pageContext

-param

-paramValues

-initParam

代码在E:\java学习javaWeb\coursecourse24web15.jsp

<%--其他隐藏对象的EL表达式深度学习  52--%><%@page contentType="text/html;charset=UTF-8" %><%--EL表达式在JSP中的隐含对象:    1. pageContext    2. param    3. paramValues    4. initParam    5. 其他(不是重点)-%>应用的根路径:${pageContext.request.contextPath}<%--request是JSP九大内置对象之一。--%><%--request.getParameter("username") 获取要求的参数。--%><%--request.getParameter("username") 获取请求参数。-%><%--在浏览器的url中输入http://localhost:8080/jsp/15.jsp?username=zhangsan--%><%--用户在浏览器中提交的数据-%>用户名:<%=request.getParameter("username")%><%--使用EL表达式获取用户在浏览器中提交的数据-%>用户名:${param.username}<%--假设用户提交的数据:http://localhost:8080/jsp/15.jsp?aihao=smoke&aihao=drink&aihao=tangtou--%><%--上述提交的数据显然是由checkbox(复选框)提交的。aihao=smoke&aihao=drink&aihao=tangtou--%><%--上述提交的数据显然是由checkbox(复选框)提交的。同一组checkbox的name是一样的。--%><%--param 请求参数一维数组中的第一个元素是获得的。--%><%--以下两行代码获取的是第一个元素  smoke 因为当提交多个数据时,输入name只会获得第一个value-%>爱好:${param.aihao} 爱好:<%=request.getParameter("aihao")%> <%--如果你想得到-%,你想得到它>一维数组:${paramValues.aihao}一维数组:<%=request.getParameterValues("aihao")%><%--获取数组中的元素:[下标]-%>爱好:${paramValues.aihao[0]}、${paramValues.aihao[1]}、${paramValues.aihao[2]} <%--EL表达式中的隐含对象:initParam--%><%--Servletcontext是Servlet的上下文对象。对应JSP九大内置对象中的aplicationServletcontext和aplication实际上是一回事,只有一个应用在java中,一个应用在jsp中-%><%    String a = application.getInitParameter("pageSize");    String b = application.getInitParameter("pageNum");%><%--输出--%>每页显示的记录条数:<%=a%> 页码:<%=b%> 每页显示的记录条数:<%=application.getInitParameter("pageSize")%> 页码:<%=application.getInitParameter("pageNum")%> <%--使用EL表达式-%-%>每页显示的记录条数:${initParam.pageSize} 页码:${initParam.pageNum}

E:\java学习javaWeb\course\course24web\WEB-INFweb.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="https://www.tulingxueyuan.cn/d/file/p/20230604/z2vjfy2fdaz"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"         version="4.0"><!--    Servlet上下文初始参数  52-->    <context-param>        <param-name>pageSize</param-name>        <param-value>20</param-value>    </context-param>    <context-param>        <param-name>pageNum</param-name>        <param-value>5</param-value>    </context-param></web-app>

6.EL表达式运算符52

算术运算符

+、-、*、/、%

关系运算符

[]==eq!=>>=<<=

逻辑运算符

[]!&&||notandor

条件运算符

[]?:

取值运算符

[]和.

empty运算符

[]empty运算符的结果是boolean类型

[]${emptyparam.username}

[]${notemptyparam.username}

[]${!emptyparam.password}

代码在E:\java学习javaWeb\course\course24web16.jsp

<%--EL表达式深度学习运算符  52--%><%@ page import="com.bjpowernode.javaweb.jsp.bean.Student" %><%@page contentType="text/html;charset=UTF-8" %><%--    EL表达式中的运算符        1. 算术运算符            + - * / %        2. 关系运算符            == != > >= < <= eq        3. 逻辑运算符            != > >= < <= eq        3. 逻辑运算符            ! && || not and or (注意:!和not都是取反)        4. 条件运算符            ? :        5. 取值运算符:            [] 和 .        6. empty 运算符--%>${10+20}<br>   <%--30--%><%-- “+”运算符只能在EL表达式中进行求和运算。字符串拼接操作不会进行。 --%><%--“20”将自动转换为数字20-%>${10+"20"}<br>   <%--30--%><%-- java.lang.NumberFormatException: For input string: "abc" --%><%-- + 两边不是数字的时候,一定会变成数字。如果转不成数字,就报错:NumberFormatException--%><%--${10+"abc"}<br>--%>   <%--报错--%><%-- 关系运算符 --%>${"abc" == "abc"} <br>    <%--true--%>${"abc"} == ${"abc"} <br>  <%--abc == abc --%><%    Object obj = new Object();    request.setAttribute("k1", obj);    request.setAttribute("k2", obj);%>${k1 == k2} <br> <%--true 因为是同一个对象-%><%    String s1 = new String("hehe");    String s2 = new String("hehe");    request.setAttribute("a", s1);    request.setAttribute("b", s2);%>${a == b} <%--true 判断值-%> <br><%    Object o1 = new Object();    Object o2 = new Object();    request.setAttribute("o1", o1);    request.setAttribute("o2", o2);%>${o1 == o2} <br> <%--false 不同对象--%><%    Student stu1 = new Student("110", "警察");    Student stu2 = new Student("110", "警察");    request.setAttribute(stu1), stu1);    request.setAttribute(stu2”, stu2);%><%--在EL表达式中 "==" 调用equals方法。--%>${stu1 == stu2} <br>  <%--true 由于调用了对象的equals方法-%>${stu1 eq stu2} <br>  <%--true 由于调用了对象的equals方法-%><hr><%-- != 也会调用对象的equals方法。= 也会调用对象的equals方法。-%>${stu1 != stu2} <br> <%--false--%>${200 != 200} <br>  <%--false--%><%--以下语法错误不加括号-%>\${!stu1 eq stu2} <br><%--正确的写法-%>${!(stu1 eq stu2)}<br>  <%--false--%>${not(stu1 eq stu2)}<br>  <%--false--%><hr><%--empty运算符:运算结果为boolean类型。--%><%--判断是否为空,如果为空,结果是true。如果不是空的,结果是false-%>${empty param.username} <br>   <%--param可以获得用户在浏览器中提交的数据-%>${!empty param.username} <br>${not empty param.username} <br><hr><%--结果false-%><%--empty param.username的前半部分是boolean类型。后面是null 不一致-%不一致->${empty param.username==null} <br>  <%--false--%>${(empty param.password) == null} <br>  <%--false--%><%--没有empty 运算符,param.username只获得提交的数据,有,没有null-%>${param.username==null} <br>   <%--true--%><%--条件运算符-%>${empty param.username ? 对不起,用户名不能为空! “对不起,用户名不能为空!” : 欢迎光临!!!!" }

com.bjpowernode.javaweb.jsp.bean

Student

package com.bjpowernode.javaweb.jsp.bean;import java.util.Objects;public class Student {    private String id;    private String name;    @Override    public boolean equals(Object o) {        System.out.println(执行equals方法);        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        Student student = (Student) o;        return Objects.equals(id, student.id) && Objects.equals(name, student.name);    }    @Override    public int hashCode() {        return Objects.hash(id, name);    }    public Student() {    }    public Student(String id, String name) {        this.id = id;        this.name = name;    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}