el表达式的作用、JSTL的概念和作用

el表达式的作用

  1. 获取作用域中数据
  2. 用于计算
  3. 小结

jsp与EL的区别:

区别 JSP表达式 EL表达式
语法 <%= 变量或表达式 %> ${变量或表达式}
输出哪里的值 Java中脚本变量值 作用域中值,任何一个作用域都可以

案例:使用JSP和EL取出作用域中的值

分别使用JSP代码和EL从作用域中取数据

从指定的作用域中获取数据

什么是页面域:

  • 对象名:pageContext
  • 范围:只在一个页面起作用
  • 作用域大小比较: 页面域pageContext < 请求域request < 会话域session < 上下文域 application
  • 底层数据结构:都是Map结构,都有三个方法:setAttribute() getAttribute() removeAttribute()

四个与页面域有关的方法:

el表达式的作用、JSTL的概念和作用_第1张图片

示例:取出不同作用域中的值

效果

el表达式的作用、JSTL的概念和作用_第2张图片

代码

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


    四个作用域


<%
    //页面域
    pageContext.setAttribute("name","法海");
    //请求域
    request.setAttribute("name","许仙");
    //会话域
    session.setAttribute("name","白素贞");
    //上下文域
    application.setAttribute("name","小青");
%>

JSP脚本变量输出

<% //删除所有域中同名的键 //pageContext.removeAttribute("name"); //删除其中一个域,指定常量:PAGE_SCOPE页面域 //pageContext.removeAttribute("name", PageContext.PAGE_SCOPE); %> 页面域: <%=pageContext.getAttribute("name")%>
请求域: <%=request.getAttribute("name")%>
会话域: <%=session.getAttribute("name")%>
上下文域: <%=application.getAttribute("name")%>
自动查找: <%=pageContext.findAttribute("name")%>

使用EL输出

<%--点号后面是键的名字--%> 页面域:${pageScope.name}
请求域:${requestScope.name}
会话域:${sessionScope.name}
上下文域:${applicationScope.name}
自动查找:${name}

在EL中从四个域中取出变量值写法,四个作用域底层都是Map结构

作用域 EL的写法
页面域 ${pageScope.key}
请求域 ${requestScope.key}
会话域 ${sessionScope.key}
上下文域 ${applicationScope.key}
自动查找 ${key}

使用EL取出不同数据类型的值

目标

​ 使用EL,分别从JavaBean,Map,集合List,数组中取出它们的值

效果

el表达式的作用、JSTL的概念和作用_第3张图片

代码

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="com.itheima.entity.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    EL取不同数据类型的值


得到JavaBean中的属性值

<% Student student = new Student(100,"猪八戒",true,59); //把学生放在页面域 pageContext.setAttribute("stu", student); %> <%--可以使用三元运算--%> ${stu.name} ${stu.gender?"男":"女"}

得到List集合中的值

<% List names = new ArrayList<>(); names.add("孙悟空"); names.add("猪八戒"); names.add("包青天"); //放请求域 request.setAttribute("names", names); %> <%--通过索引(下标)来取--%> ${names[0]} ${names[1]} ${names[5]}

得到数组中的值

<% int[] nums = {101,35,20,67}; pageContext.setAttribute("nums",nums); %> <%--通过索引(下标)来取--%> ${nums[2]}

得到Map中的值

<% Map map = new HashMap<>(); map.put("item1", "牛魔王"); map.put("item2", "新包青天"); map.put("item3-4", "孙悟空"); pageContext.setAttribute("m",map); %> <%-- 对象名.键名 如果键中包含特殊字符:对象名["键名"] --%> ${m.item1} ${m["item3-4"]}

键名中有特殊字符的写法

对象名["键"]

使用EL中从域中取出不同数据类型的写法

数据类型 写法
JavaBean ${对象名.属性} 本质上是调用的get方法
List ${对象[索引]}
数组 ${数组对象[索引]}
Map集合 ${Map对象.键} 或 ${Map对象[“键”]}

EL中各种运算符(了解)

算术运算符

算术运算符 说明 范例 结果
+ ${1+1} 2
- ${2-1} 1
* ${1*1} 1
/或div ${5 div 2} 2.5
%或mod 取余 ${5 mod 2} 1

比较运算符

关系运算符 说明 范例 结果
==或 eq 等于(equal) ${1 eq 1} true
!= 或 ne 不等于(not equal) ${1 != 1} false
< 或 lt 小于(Less than) ${1 lt 2} true
<=或 le 小于等于(Less than or equal) ${1 <= 1} true
> 或 gt 大于(Greater than) ${1 > 2} false
>=或 ge 大于等于(Greater than or equal) ${1 >=1} true

逻辑运算符 :

逻辑运算符 说明 范例 结果
&& 或 and 交集(与) ${true and false} false
|| 或 or 并集(或) ${true || false } true
! 或 not ${not true} false

三元运算符:

${条件表达式?真值:假值}

判空运算符:

语法:${empty 键}
1. 判断键是否为NULL,如果为空则返回true
2. 如果键是一个空字符串,也返回true
3. 如果键是一个集合,集合中没有元素,返回true

JSTL的概念和作用

什么是JSTL

​ JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库。我们可以在JSP页面上编写各种标签来完成一些复杂的功能,它出现的目的是为了减少JSP页面上的Java代码量,让JSP页面更好维护。它的底层本质上运行的还是Java代码。有如下几类定制标签库:

  1. core:核心配置库(今天学的内容)
  2. format:格式化和国际化标签库
  3. xml:用于XML解析的标签库
  4. sql:可以在JSP页面上直接访问数据库
  5. function: 提供了一些函数库

使用核心标签

使用指令:<%@taglib%>
el表达式的作用、JSTL的概念和作用_第4张图片
el表达式的作用、JSTL的概念和作用_第5张图片

JSTL的标签:if标签

在JSP页面上使用if标签

作用

用于页面判断,如果为真,则执行标签体中内容。

示例:if标签的案例

需求:

如果用户提交的age值大于18,则显示你已经成年,否则显示未成年。

执行效果

el表达式的作用、JSTL的概念和作用_第6张图片

代码

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    JSP核心标签库


<%--如果用户提交的age值大于18,则显示你已经成年,否则显示未成年。--%>

    你已经成年


    未成年



JSTL的标签:choose标签

使用choose,when,otherwise三个标签的使用

作用

多分支判断的标签,选择其中一个标签主体执行。

属性

el表达式的作用、JSTL的概念和作用_第7张图片

案例:通过输入分数,得到评级

需求

​ 在一个表单输入一个分数,提交给自己。然后在同一个页面中根据分数输出相应的等级,80~100优秀 60~80及格 0~60不及格 其它输出分数不正确。

效果

el表达式的作用、JSTL的概念和作用_第8张图片

代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    评级


请输入分数: <%--将得到的值显示在value中--%>
<%--使用EL和JSTL判断--%> <%--test是判断的条件,要使用EL--%> 优秀 及格 不及格 错误的分数
  1. choose:相于switch
  2. when: 相当于case
  3. otherwise:相当于default

JSTL的标签:forEach标签(重点)

循环遍历标签的使用

forEach的作用

  1. 对一个集合或数组进行遍历
  2. 也有for-i循环的功能

属性

el表达式的作用、JSTL的概念和作用_第9张图片

案例:遍历集合

需求:

​ 学生信息:包含编号,姓名,性别,成绩。在Servlet中得到所有的学生信息,转发到JSP页面,在JSP页面上使用forEach标签,从List中输出所有的学生信息。

流程图

放在哪个作用域原则:在满足功能的前提下,使用小的使用域,比较节约资源。
el表达式的作用、JSTL的概念和作用_第10张图片
el表达式的作用、JSTL的概念和作用_第11张图片

代码

Student.java
package com.itheima.entity;

/**
 * 学生对象
 */
public class Student {

    private int id;  //编号
    private String name;  //名字
    private boolean gender; //true男
    private double score;  //成绩

    public Student(int id, String name, boolean gender, double score) {
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.score = score;
    }

    public Student() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isGender() {
        return gender;
    }

    public void setGender(boolean gender) {
        this.gender = gender;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }
}
Servlet代码
//假设从数据库读取的List集合
List<Student> students = Arrays.asList(
    new Student(1000, "猪八戒", true, 65),
    new Student(2000, "白骨精", false, 85),
    new Student(3000, "嫦娥", true, 90),
    new Student(4000, "唐僧", true, 87),
    new Student(5000, "蜘蛛精", false, 85)
);
JSP代码
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    取出所有学生数据
    



    <%--
    items: 要遍历的集合或数组(必须属性)
    var: 代表集合中每个元素JavaBean,这是变量名
    begin: 开始集合索引,从0开始,默认就是0
    end: 结束的索引
    step: 步长,默认是1

    varStatus:是一个对象,表示这一行的状态对象,参数值是变量名
        又包含4个属性:
        index: 表示当前行的索引号,从0开始
        count: 表示到当前行为止,一共有多少行记录
        first: 第1行为true
        last: 最后1行为true
    --%>
    
    
学生信息
序号 编号 姓名 性别 成绩
${row.count} ${stu.id} ${stu.name} ${stu.gender?"男":"女"} ${stu.score}

你可能感兴趣的:(前端)