EL表达式 && JSTL

EL表达式

1、概念:

  • Expression Language 表达式语⾔

2、作⽤:

  • 替换和简化jsp⻚⾯中java代码的编写

3、基本格式:

  • ${表达式}

4、注意:

jsp默认⽀持el表达式的。如果要忽略el表达式

  • 1、设置jsp中page指令中:isELIgnored="true" 忽略当前jsp⻚⾯中所有的el表达式

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

  • 2、忽略当前这个el表达式

    <%--写表达式--%>
    ${3 > 4}
    ​
    <%--忽略表达式--%>
    \${3 > 4}

5、EL表达式的使用:

1、运算:(判空重点)

  • 运算符:

    • a、算数运算符:+、-、*、/(div)除、%(mod)取余

    • b、比较运算符:>、<、>=、<=、==、!=

    • c、逻辑运算符:&&(and) ||(or) !(not)

    • d、空运算符:empty

      • 功能:⽤于判断字符串、集合、数组对象是否为null或者⻓度是否为0

      • ${empty list}:判断字符串、集合、数组对象是否为null或者⻓度为0

      • ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 ⻓度>0<%

<h3>算数运算符</h3>
${3 - 4}<br>
${3 / 4}<br>
${3 div 4}<br>
${3 % 4}<br>
${3 mod 4}<br>
​
<h3>比较运算符</h3>
${3 == 4}<br>
​
<h3>逻辑运算符</h3>
${3 > 2 && 3 < 4}<br>
${3 > 2 or 3 < 4}<br>
​
<h3>空运算符</h3>
<% String str = "";
 request.setAttribute("str",str);
 List list = new ArrayList();
 request.setAttribute("list",list);
%>
 ${not empty str}
 ${not empty list}

2、获取值

  • 1、EL表达式只能从域对象中获取值

  • 2、语法:

    • 1、 ${域名称.键名}:从指定域中获取指定键的值

      • 域名称:

        • 1、pageScope --> pageContext

          2、 requestScope --> request

          3、sessionScope --> session

          4、applicationScope --> application(ServletContext)

      • 举例:在request域中存储了name=张三

      • 获取:${requestScope.name}

    • 2、${键名}:表示依次从最⼩的域中查找是否有该键对应的值,直到找到为⽌。

      • pageScope < requestScope < sessionScope < applicationScope

<%
    pageContext.setAttribute("v1","李白");
    request.setAttribute("v2","王五");
    session.setAttribute("v3","张飞");
    application.setAttribute("v4","妮妮");
%>
​
<h3>EL表达式获取值</h3>
​
${pageScope.v1}
${requestScope.v2}
${sessionScope.v3}
${applicationScope.v4}

3、获取对象、List集合、Map集合的值

1、获取对象:${域名称.键名.属性名}

  • 本质上会去调⽤对象的getter⽅法

2、List集合:${域名称.键名[索引]}

User代码:

package com.admin;
​
​
public class User {
​
  private long id;
  private String username;
  private String password;
​
​
  public long getId() {
    return id;
  }
​
  public void setId(long id) {
    this.id = id;
  }
​
​
  public String getUsername() {
    return username;
  }
​
  public void setUsername(String username) {
    this.username = username;
  }
​
​
  public String getPassword() {
    return password;
  }
​
  public void setPassword(String password) {
    this.password = password;
  }
​
}

对象的jsp代码:

<%
    User user = new User();
    user.setId(12);
    user.setUsername("list");
    user.setPassword("123456");
    request.setAttribute("s",user);
​
%>
​
${s.id}<br>
${s.username}<br>
${s.password}

list集合的jsp代码

<%
    ArrayList<String> arrayList = new ArrayList<>();
    arrayList.add("张三");
    arrayList.add("李四");
    arrayList.add("王五");
​
    request.setAttribute("a",arrayList);
%>
​
${a}

6、获取虚拟路径

el表达式中有11个隐式对象

pageContext:

获取jsp其他⼋个内置对象

${pageContext.request.contextPath}:动态获取虚拟路径

JSTL

1、介绍

  • 1、Jsp standrad Tag Lib:JSP中标准的标签工具类库。

  • 2、是suN公司提供

  • 组成:

    • 1)核心标签:Java在jsp上基本功能进行封装ifwhile

    • 2)sql标签: JDBC在Js2上使用功能

    • 3)xml标签:DOM4J在JSz使用功能

    • 4)rormat标签:JSP文件格式转换

2、使用步骤

3、常⽤的JSTL标签

1、set标签:

  • 作用:在jsp文件上设置域对象中共享数据

  • 使用:

    <c:set scope="session" var="key" value="12">
  • 代替:

    <%
        session.setAttribute("key","12")
    %>
  • 属性:

    • scope:指定操作的域对象别名 (scope="application/session/request/page")

    • var:声明域对象中关键字

    • value:存入的共亨数

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>set标签使用</h1>
​
<c:set scope="application" var="id" value="1" />
<c:set scope="session" var="name" value="zs" />
<c:set scope="request" var="age" value="27" />
<c:set scope="page" var="ah" value="lq" />
​
${applicationScope.id}
${sessionScope.name}
${requestScope.age}
${pageScope.ah}

2、if 标签:

if标签相当于java代码中的if语句:

【作用】:在jsp文件上控制哪些内容可以写入到响应体。

【使用】:test 是必须属性,接受boolean表达式,如果为true则会显示if标签内容,若为false,则不显示标签体内容,

一般情况下test属性值会结合EL表达式一起使用

<c:if test="通过EL表达式进行判断">
    内容
</c:if>

例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
​
<h1>if标签:</h1>
​
<c:set scope="request" var="age" value="12"/>
<c:if test="${requestScope.age >= 18}">
    <font color="red"><h1>欢迎光临</h1></font>
</c:if>
​
<c:if test="${requestScope.age <= 18}">
    <font color="red"><h1>您的年龄不够哦!!!!</h1></font>
</c:if>

3、choose标签:

【作用】:在JSP文件上实现多分支选择判断,决定哪一个内容能写入到响应体,在页面显示,及起到一个java中的switch语句的作用;

【使用】:

  • 使用choose标签声明 相当于switch声明

  • 使用when标签做判断 相当于case(test 是必须属性,接受boolean表达式,一般情况下test属性值会结合EL表达式一起使用)

  • otherwise标签 相当于default

<c:choose>
    <c:when test="EL表达式判断">内容1</c:when>
    <c:when test="EL表达式判断">内容2</c:when>
</c:choose>

例题:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<font color="#663399">
    <h1>choose标签</h1>
</font>
​
<C:set scope="request" var="number" value="8"/>
<c:choose>
    <c:when test="${requestScope.number == 1}"> 星期一 </c:when>
    <c:when test="${requestScope.number == 2}"> 星期二 </c:when>
    <c:when test="${requestScope.number == 3}"> 星期三 </c:when>
    <c:when test="${requestScope.number == 4}"> 星期四 </c:when>
    <c:when test="${requestScope.number == 5}"> 星期五 </c:when>
    <c:when test="${requestScope.number == 6}"> 星期六 </c:when>
    <c:when test="${requestScope.number == 7}"> 礼拜天 </c:when>
    <c:otherwise> 数字输入错误!!!! </c:otherwise>
</c:choose>

4、forEach标签:

【作用】:循环遍历,相当于java语句中的for循环语句;

a、第一种使用方法:

  • forEach各个属性代表的含义:

    • var="声明循环变量的名称"(就是java代码中 普通for 循环中的 i)

    • begin="初始化循环变量 "(就是java代码中 普通for 循环中的 int i=1)

    • end="循环变量可以接受的最大值"(就是java代码中 普通for 循环中的 i < 5;)

    • stap="循环变量执行递增(是1),还是递减(是 -1)"(就是java代码中 普通for 循环中的 i++、i--)

<c:forEach var="i" begin="1" end="5" step="1">
    开心${pageScope.i}次<br>
</c:forEach>
  • 例题:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div style="color: darkgreen">
    <h1>forEach标签</h1>
</div>
​
<select>
    <c:forEach var="i" begin="1" end="5" step="1">
        <option>
            第${pageScope.i}页
        </option>
    </c:forEach>
</select>

b、第二种使用方法:

创建的集合需要先加入到域中
​
<c:forEach items="通过EL表达式获取域对象集合" var="声明循环变量">
    ${循环变量.对象属性名}
</c:forEach>

例题:(list集合)

<%@ page import="java.util.ArrayList" %>
<%@ page import="com.admin.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@include file="forEach.jsp"%>
<div style="color: darkgreen">
    <h2> 第二种方法: </h2>
    <h3>遍历集合</h3>
</div>
​
<%
    User zs = new User(1,"zs","123");
    User ls = new User(2, "ls", "345");
    ArrayList<User> user = new ArrayList<>();
​
    user.add(zs);
    user.add(ls);
​
    request.setAttribute("u",user);
​
    for (User user1 : user) {
%>
        <table border="3">
            <tr>
                <td>id</td>
                <td>用户名</td>
                <td>密码</td>
            </tr>
​
            <tr>
                <td><%=user1.getId()%></td>
                <td><%=user1.getUsername()%></td>
                <td><%=user1.getPassword()%></td>
            </tr>
        </table>
<%
    }
%>
​
<hr>
​
<table border="3">
    <tr>
        <td>id</td>
        <td>用户名</td>
        <td>密码</td>
    </tr>
​
    <c:forEach items="${u}" var="stu">
        
        <tr>
            <td>${stu.id}</td>
            <td>${stu.username}</td>
            <td>${stu.password}</td>
        </tr>
    </c:forEach>
</table>

例题:(map集合)

<%@ page import="com.admin.User" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: HP
  Date: 2021/8/20
  Time: 19:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div style="border: red">
    <h1>Map集合遍历</h1>
</div>
​
<%
    User zs = new User(1, "zs", "123");
    User ls = new User(2, "ls", "456");
    User ww = new User(3, "ww", "789");
​
    Map map=new HashMap();
    map.put("一班",zs);
    map.put("三班",ls);
    map.put("二班",ww);
​
    request.setAttribute("maps",map);
%>
​
<table border="4" >
    <tr>
        <td>id</td>
        <td>班级</td>
        <td>用户名</td>
        <td>密码</td>
    </tr>
​
    <c:forEach items="${maps}" var="m">
        <tr>
            <td>${m.value.id}</td>
            <td>${m.key}</td>
            <td>${m.value.username}</td>
            <td>${m.value.password}</td>
        </tr>
    </c:forEach>
​
</table>

5、练习

需求:在request域中有⼀个存有User对象的List集合。需要使⽤jstl+el将list集合数据展示到jsp⻚⾯的表格table中

<%@ page import="com.admin.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%--
    练习:
        需求:在request域中有⼀个存有User对象的List集合。需要使⽤jstl+el将list集合数据展示到jsp⻚⾯的表格table中
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div style="border: red">
    <h3>需求:在request域中有⼀个存有User对象的List集合。需要使⽤jstl+el将list集合数据展示到jsp⻚⾯的表格table中</h3>
</div>
​
<%
    User zs = new User(1, "zs", "187");
    User ls = new User(2, "ls", "177");
    User ww = new User(3, "ww", "166");
    User ss = new User(4, "ss", "160");
​
    List list=new ArrayList();
    list.add(zs);
    list.add(ls);
    list.add(ww);
    list.add(ss);
    //将集合放到域中
    session.setAttribute("arraylist",list);
%>
​
<table border="3">
    <tr>
        <td>id</td>
        <td>姓名</td>
        <td>身高</td>
    </tr>
    <c:forEach items="${sessionScope.arraylist}" var="array">
        <tr>
            <td>${array.id}</td>
            <td>${array.username}</td>
            <td>${array.password}</td>
        </tr>
    </c:forEach>
</table>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值