EL表达式和JSTL标签

Posted XiaoFanMi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EL表达式和JSTL标签相关的知识,希望对你有一定的参考价值。

EL表达式和JSTL标签

EL表达式概述

什么是EL表达式?

  1. EL即Expression Language(表达式语言)
  2. 简称EL,通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增强程序的可读性及维护性。

EL的功能

​ 替代JSP页面中的复杂代码

EL的特点

  1. 自动转换类型
  2. 使用简单

EL表达式语法

以“${”作为开始,以“}”作为结束

直接使用变量名获取值$

例:${ username }

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    request.setAttribute("name","jim");
    //1.获取数据 2.强制类型转化  3.响应输出数据
    String str = (String)request.getAttribute("name");
    out.print(str);
%>
</body>
</html>

使用EL

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${name}
</body>
</html>

El表达式操作符

有算术运算符、比较运算符、逻辑运算符、验证运算符empty与条件运算符、 运算符

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

</head>
<body>
        <%
            request.setAttribute("num1", 5);
            request.setAttribute("num2", "10");
            request.setAttribute("num3", "abc");
        %>
        <%--算术运算--%>
        <%--    ${num1 + num2}--%>
        <%-- +只能做加法   ${num1+num3}--%>
        <%-- 比较运算 --%>
        <%--    ${num1 > num2}--%>
        <%--    ${num1 eq num2}--%>
        <%--    ${num1 lt num2}--%>

        <%--  判断是否为空 empty   ""  null 都为true --%>
        <%
            request.setAttribute("str1", "");
            request.setAttribute("str2", "admin");
        %>
        ${empty str1}
        ${empty str2}
        ${empty str3}

        <%--条件运算符--%>
        <input type="checkbox" ${str2 == "admin" ? "checked":""}>
</body>
</html>

运算符”.”

作用 –获取对象属性

创建一个user类

package com.ff.bean;

public class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        System.out.println("调用getName()");
        return name;
    }

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

    public int getAge() {
        System.out.println("调用getAge()");
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>

</head>
<body>
        <%
            User user = new User("Jim",11);
            request.setAttribute("user",user);
        %>
        ${user.name}<br><%--本质是调用user类中的getName()方法--%>
        ${user.age}<br>
        ${user.getName()}<br>
        ${user.getAge()}<br>

</body>
</html>

EL隐式对象

对象名称说 明
pageScope返回页面范围的变量名,这些名称已映射至相应的值
requestScope返回请求范围的变量名,这些名称已映射至相应的值
sessionScope返回会话范围的变量名,这些名称已映射至相应的值
applicationScope返回应用范围内的变量,并将变量名映射至相应的值

–它们可以读取使用JSP内置对象pageContext、request、session以及application的setAttribute()方法所设定的对象的数值-----即getAttribute(String name),却不能取得其他相关信息。

– 例如,要取得session中储存的一个username属性的值,可以利用下面的方法:session.getAttribute(“username”)

–在EL中则使用下面的方法:${sessionScope.username}

–注意:如果没有设定使用EL内置对象的作用范围,则按照pageScope、requestScope、sessionScope和applicationScope的先后顺序读取属性值。

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

</head>
<body>
        <%
            pageContext.setAttribute("name","pageValue");
            application.setAttribute("name","appValue");
            request.setAttribute("name","requestValue");
            session.setAttribute("name","sessionValue");
        %>
        ${name}
        <%--
           4个域对象中有相同的属性名
           按照 pageContext request  session application顺序查找
        --%>
        ${applicationScope.name}<br>
        ${pageScope.age}<br>
        ${requestScope.getName()}<br>
        ${sessionScope.getAge()}<br>
</body>
</html>

JSTL核心标签

什么是JSTL

JSTL(JavaServerPages Standard Tag Library)JSP标准标签库使用JSTL实现JSP页面中逻辑处理

JSTL的环境搭建

–导入标签库jar文件

–在JSP页面添加taglib指令

–使用JSTL标签

<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

条件标签

<c:if test=" " scope="page" var="res"> </c:if>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    request.setAttribute("name", "Tom");
%>
<%--
    test="条件表达式 ${num==11}"
    var="定义一个变量 键"
    scope ="指定存储结果的作用域"

	等价pageContext.setAttribute("res",true/false)
--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    
<c:if test="${name == 'Tom' }" scope="page" var="res">
    成立
</c:if>
</body>
</html>

迭代标签

<c:forEach items=collection var=name begin=start end=end step=count>

…循环体代码…

第一个示例:

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.ff.bean.User" %>
<%@ page import="java.util.Arrays" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
</head>
<body>
    <%
        List<User> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            User user = new User("用户"+i,20+i);
            list.add(user);
        }
        request.setAttribute("list",list);
    %>

<table border="1" width="400px">
    <tr>
        <td>序号</td>
        <td>姓名</td>
        <td>年龄</td>
        <td>操作</td>
    </tr>
    <%--
        items=${取出迭代集合或数组}
        var = "声明一个变量,接收每次循环中取出的数据"
        varStatus = "s" 获取循环状态信息
        step = "3" 循环步长为3 默认为1
        begin = "0" 开始索引
        end = "5" 结束索引
    --%>
    <c:forEach items="${list}" var="user" varStatus="s" begin="2" end="5" step="2">
        <tr>
            <td>${s.count} ${s.index} ${s.first} ${s.last} </td>
            <td>${user.name}</td>
            <td>${user.age}</td>
            <td><a href="">删除</a></td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

在这里插入图片描述

第二个示例

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.ff.bean.User" %>
<%@ page import="java.util.Arrays" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
</head>
<body>
    <%
        String[] str = {"a","b","c"};
        request.setAttribute("str",str);
    %>

    <c:forEach items="${str}" var="str" >
        ${str}<br>
    </c:forEach>
</body>
</html>

在这里插入图片描述

迭代标签

<c:forTokens>标记:items属性指定需要迭代的字符串,delims表示分隔符,var表示使用分隔符分割items产生的字符串。

​ <c:forTokens items=“a🅱️c:d” delims=":" var=“token”>

​ <c:out value="${token}"/>

​ < </c:forTokens>>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
</head>
<body>
<%--
    本质对拆分后的数组进行遍历
--%>
    <%
        String str = "a:b:c:de";
        request.setAttribute("str",str);
    %>
<c:forTokens items="${str}" delims=":" var="s">
    ${s}<br>
</c:forTokens>
</body>
</html>

在这里插入图片描述

JSTL格式化标签

format标签

<%@ page import="java.util.Date" %>
<%@ page import="java.util.Locale" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/fmt" %>
</head>
<body>
    <%
        request.setAttribute("date",new Date());
        request.setAttribute("locale", Locale.JAPAN);
    %>
<%--    <c:setLocale value="${locale}"></c:setLocale>   国际化,程序可以适应不同国家的语言--%>
    <c:formatDate value="${date}" pattern="yyyy-MM-dd  HH : mm : ss"></c:formatDate>
</body>
</html>

在这里插入图片描述

以上是关于EL表达式和JSTL标签的主要内容,如果未能解决你的问题,请参考以下文章

Ognl 和 EL 和jstl区别

EL(表达式语言)与JSTL(JSP标准标签库)

EL表达式和JSTL标签

EL表达式和JSTL标签

El表达式详解

JSTL