首页 > 其他分享 >EL表达式2

EL表达式2

时间:2023-06-03 13:34:04浏览次数:23  
标签:username EL name request param 表达式

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

pageContext < request < session < application

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

    - pageScope 对应的是 pageContext范围。

    - requestScope 对应的是 request范围。

    - sessionScope 对应的是 session范围。

    - applicationScope 对应的是 application范围。

代码在 E:\java学习\javaWeb\course\course24\web

8.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表达式有4个隐含的隐式的范围对象--%>
<%--pageScope requestScope sessionScope applicationScope--%>
<%--以下是指定范围取数据。--%>
${pageScope.data}<br>
${requestScope.data}<br>
${sessionScope.data}<br>
${applicationScope.data}<br>
<%--在实际开发中,因为向某个域中存储数据的时候,name都是不同的。所以 xxxScope  都是可以省略的。--%>

EL表达式对null进行了预处理。如果是null,则向浏览器输出一个空字符串。

代码在 E:\java学习\javaWeb\course\course24\web

9.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进行了处理。如果是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\course\course24\web

10.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>

<%--取数据写法一--%>
${fadsa.username}<br>

<%--取数据写法二--%>
<%--取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\course\course24\web

11.jsp

<%--EL表达式深度学习之关于map集合取数据  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("abcd",userMap2);
%>
<%--使用EL表达式将Map集合中的user对象中的username取出--%>
${abcd.user.username}

3.1 掌握使用EL表达式,怎么从数组和List集合中取数据:51

    - ${数组[0]}

    - ${数组[1]}

    - ${list[0]}

代码在 E:\java学习\javaWeb\course\course24\web

12.jsp
<%--EL表达式深度学习之关于数组和List集合取数据  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}
<%--以下无法获取单个数据:PropertyNotFoundException: 类型[java.util.HashSet]上找不到属性[0]--%>
<%--${set[0]}--%>

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

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

      isELIgnored="true" 表示忽略EL表达式

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


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


      可以使用反斜杠进行局部控制:\${username} 这样也可以忽略EL表达式。

代码在 E:\java学习\javaWeb\course\course24\web

13.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\course\course24\web

14.jsp
<%--EL表达式深度学习之关于获取应用的根  51--%>
<%@page contentType="text/html;charset=UTF-8" %>
<%
    // JSP有九大内置对象
    // pageContext,request,session,application,response,out,config,page,exception
    // 其中四个域对象,其中最小的域是pageContext
    // pageContext翻译为:页面上下文。通过pageContext可以获取什么????
%>
<%--从以下代码来看,pageContext.getRequest() 方法是没用的。这--%>
<%--是获取request对象。而JSP中自带了内置对象request,直接用request内置对象就行了--%>
<%--简单讲这个pageContext.getRequest()在jsp中没用但是在EL中有大用--%>
<%=pageContext.getRequest()%>


<%=request%>
<%--
    在EL表达式当中没有request这个隐式对象。
    requestScope 这个只代表“请求范围”。不等同于request对象。
    在EL表达式当中有一个隐式的对象:pageContext
    EL表达式中的pageContext和JSP中的九大内置对象pageContext是同一个对象。
--%>

<%--<%=pageContext.getRequest()%>这段代码对应的EL表达式${pageContext.request}--%>

${pageContext.request}


<%--获取应用的根--%>
<%=request.getContextPath()%>


<%--写成EL表达式就是--%>
使用EL表达式来获取应用的根路径:
${pageContext.request.contextPath}

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

    - pageContext

    - param

    - paramValues

    - initParam

代码在 E:\java学习\javaWeb\course\course24\web

15.jsp
<%--EL表达式深度学习之其他隐式对象  52--%>
<%@page contentType="text/html;charset=UTF-8" %>
<%--JSP中EL表达式的隐含对象:
    1. pageContext
    2. param
    3. paramValues
    4. initParam
    5. 其他(不是重点)
--%>

应用的根路径:${pageContext.request.contextPath}


<%--request是JSP九大内置对象之一。--%>
<%--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(复选框)进行提交的。同一组的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九大内置对象中的application
ServletContext和application其实是一回事,只不过一个应用在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\course24\web\WEB-INF
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         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 != > >= < <= 

逻辑运算符

   [ ] !  && ||  not and or

条件运算符

   [ ] ? : 

取值运算符

 [ ]和.

empty运算符

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

  [ ] ${empty param.username}

  [ ] ${not empty param.username}

  [ ] ${!empty param.password}

代码在 E:\java学习\javaWeb\course\course24\web

16.jsp

<%--EL表达式深度学习之运算符  52--%>
<%@ page import="com.bjpowernode.javaweb.jsp.bean.Student" %>
<%@page contentType="text/html;charset=UTF-8" %>
<%--
    关于EL表达式中的运算符
        1. 算术运算符
            + - * / %
        2. 关系运算符
            == != > >= < <= 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方法。--%>
${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;
    }
}

标签:username,EL,name,request,param,表达式
From: https://blog.51cto.com/u_15784725/6407817

相关文章

  • elementUI中<el-select>下拉框选项过多的页面优化方案——多列选择
    效果展示(多列可以配置)  一、icon下拉框的多列选择:  二、常规、通用下拉框的多列选择:【注】第二种常规、通用下拉框的多列选择,是在第一种的前端代码上删除几行代码就行(把icon显示标签删去),所以下面着重介绍第一种icon下拉框的多列选择。思路  不使用下拉框标签<el-option>......
  • 零代码编程:用ChatGPT将PDF文件的表格批量转为Excel表格
    电脑中有几百个PDF文件,文件内容格式一致,每个PDF文件第一页是一个表格。想把这几百个PDF文件里面的表格都提取出来,转为excel表,该怎么办?打开ChatGPT(一定要用GPT4,编程能力很强。相比之下,gpt3.5弱太多了),输入提示词如下:d盘有一个文件夹:guanlianjiaoyi,里面有很多pdf文件;你的任务是写一个......
  • Debian11安装GNOME-TWEAKS报错WARNING : Shell not installed or running
    先写结论:打开方式是按下Alt+F2弹出命令窗输入gnome-tweaks,就会弹出优化界面,点击扩展就可以按需开启扩展插件。还有一种方法,如果你在安装debian11系统时安装完了GNOME,那么你可以在显示应用程序内找到一个叫工具的软件合集,内有名叫优化的程序。闲聊:不过其实一开始我就注意到了有这......
  • Mapbox样式配置之过滤器表达式
    需求如一个图层,有个属性字段m,值可能有1,2,3,我想等于1和2的时候给红色,等于3的时候给黄色。解决办法在Mapbox中,你可以使用样式表(Style)来配置图层的样式,包括根据属性字段值来设置不同的颜色。以下是一个示例,演示如何根据属性字段m的值设置图层的颜色:{"version":8,"source......
  • vue+elementUI 合并行3
    1、返回数据为一维数组getData(){that.tableData=res.data.data.list;}2、合并函数挂在vue底层:Vue.prototype.$spanMethodFunc=function(list,props,row,col)写在method内:spanMethodFunc(list,props,row,col){if(col>=props.length||!props[co......
  • vue+elemntUI合并行2
    返回的是一维数组o:[{id:1,name:s;age:11},{id:1,name:s;age:11},{id:2,name:p;age:15}]1、对返回的数据做处理getData(){that.tableData=res.data.data.list;that.getFormatList();//重新合并行},getFormatList(){letrecordObj={};this.re......
  • vue+elementui 合并行
    1,数据格式是二维的如:o:{id:123,prams:{name:aaa,age:11}}的对象第一步:先获取返回的数据为indexInfoList,遍历转化为一维数组 that.indexInfoList.forEach(ele => {if(ele.prams.length>=1){ele.prams.map((related,index)=>{......
  • 数据可视化之Zeppelin
    前言数据可视化这块不是项目的重点,不过为了让大家能有一个更加直观的感受,我们可以选择一些现成的数据可视化工具实现。我们前面分析过,想要查询hive中的数据可以使用hue,不过hue无法自动生成图表。所以我们可以考虑使用Zeppelin,Zeppelin是一个Apache的孵化项目.一个基于web的笔记......
  • CF321E - Ciel and Gondolas
    考虑\(dp_{i,j}\)表示用\(i\)条船载走前\(j\)个人的最小贡献,\(w_{i,j}\)表示区间\([i,j]\)里的人同乘一条船的代价。则\(dp_{i,j}=\min_{1\lek\ltj}(dp_{i-1,k}+w_{k+1,j})\)。我们发现,\(w_{i,j}\)可以通过\(w_{i,j-1}+s_{j,j}-s_{j,i-1}\)递推计算。其中\(s_{i,......
  • 在python中对Excel进行简单的操作
    #表格的操作 #创建表格 wb=Workbook() #打开第一个工作表 wb.active #保存 wb.save("路径+文件名或文件名") #关闭 wb.close() #读取Excel中所有的工作表 wb.get_sheet_names() #访问第一个工作表 wb.worksheets[0] wb.get_sheet_names()[0] #编辑第一个工作表......