EL表达式&JSTL表达式

本文详细介绍了EL表达式和JSTL标签库。EL表达式用于输出数据,支持运算及存取各种属性,遵循特定搜索域顺序,并有11个隐含对象。JSTL作为JSP标签库,提供核心、格式化、SQL、XML和函数等标签,用于增强HTML标签功能,简化页面逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EL表达式&JSTL表达式

1.EL表达式

1.1 概述

EL表达式格式 : ${}

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象

EL表达式在输出null值的时候,输出的是空字符串,而jsp表达式输出的是null

EL 提供“.“和“[ ]“两种运算符来存取数据。

当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。

1.2 EL表达式搜索域数据的顺序

EL表达式主要是在jsp页面中输出数据。主要是输出域对象中的数据。

<%
    request.setAttribute("key","value2");
    pageContext.setAttribute("key","value1");
    session.setAttribute("key","value3");
    application.setAttribute("key","value4");
%>
    ${ key }

测试发现:当四个域中都有相同的key的数据的时候 ,EL表达式会按照四个域的从小到大的顺序去进行输出。

1.3 EL表达式输出JavaBean的普通属性,数组属性。List集合属性,Map集合属性。
<body>
    <%
        Person person = new Person();
        person.setName("张三");
        person.setPhones(new String[]{
                "12345678",
                "12121212",
                "19060207110"
        });

        ArrayList<String> cities = new ArrayList<>();
        cities.add("西安");
        cities.add("北京");
        cities.add("上海");

        person.setCities(cities);

        HashMap<String, Object> map = new HashMap<>();
        map.put("key1","value1");
        map.put("key2",2);
        map.put("key3","value3");

        person.setMap(map);

        pageContext.setAttribute("person",person);

    %>

    输出Person:${person}<\br>
    输出Person name:${person.name}<br>
    输出Person 数组phones:${person.phones}<br>
    输出Person phones[1]:${person.phones[1]}<br>
    输出Person List集合cities:${person.cities}<br>
    输出Person cities[1]:${person.cities}<br>
    输出Person Map集合map:${person.map}<br>
    输出Person map key1:${person.map.get("key1")}<br>
</body>

输出:

image-20211008194016416

原理:EL表达式里面,找到的JavaBean的相应的值其实是调用了get方法,所以当一个实体类没有get方法,EL表达式获取不到相应的属性值。

1.4 EL表达式来进行运算
术语定义
算术型+、-(二元)、*、/、div、%、mod、-(一元)
逻辑型and、&&、or、||、!、not
关系型==、eq、!=、ne、<、lt、>、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。
empty 空操作符是前缀操作,可用于确定值是否为空。
条件型A ?B :C。根据 A 赋值的结果来赋值 B 或 C。
1.5 EL表达式的11个隐含对象

隐式对象

JSP 表达式语言定义了一组隐式对象,其中许多对象在 JSP scriplet 和表达式中可用:

术语定义
pageContextJSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext 等。例如,${pageContext.response} 为页面的响应对象赋值。

此外,还提供几个隐式对象,允许对以下对象进行简易访问:

术语定义
param将请求参数名称映射到单个字符串参数值(通过调用 ServletRequest.getParameter (String name) 获得)。getParameter (String) 方法返回带有特定名称的参数。表达式 ${param . name}相当于 request.getParameter (name)。
paramValues将请求参数名称映射到一个数值数组(通过调用 ServletRequest.getParameter (String name) 获得)。它与 param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramvalues. name} 相当于 request.getParamterValues(name)。
header将请求头名称映射到单个字符串头值(通过调用 ServletRequest.getHeader(String name) 获得)。表达式 ${header. name} 相当于 request.getHeader(name)。
headerValues将请求头名称映射到一个数值数组(通过调用 ServletRequest.getHeaders(String) 获得)。它与头隐式对象非常类似。表达式 ${headerValues. name} 相当于 request.getHeaderValues(name)。
cookie将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式 $ { cookie. name .value} 返回带有特定名称的第一个 cookie 值。如果请求包含多个同名的 cookie,则应该使用 $ {headerValues. name} 表达式。
initParam将上下文初始化参数名称映射到单个值(通过调用 ServletContext.getInitparameter(String name) 获得)。

除了上述两种类型的隐式对象之外,还有些对象允许访问多种范围的变量,如 Web 上下文、会话、请求、页面:

术语定义
pageScope将页面范围的变量名称映射到其值。例如,EL 表达式可以使用 ${pageScope.objectName} 访问一个 JSP 中页面范围的对象,还可以使用 ${pageScope .objectName. attributeName} 访问对象的属性。
requestScope将请求范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如,EL 表达式可以使用 $ { requestScope. objectName} 访问一个 JSP 请求范围的对象,还可以使用 ${requestScope. objectName. attributeName} 访问对象的属性。
sessionScope将会话范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如:${sessionScope. name}
applicationScope将应用程序范围的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象。

示例

<%
    request.setAttribute("key","value2");
    pageContext.setAttribute("key","value1");
    session.setAttribute("key","value3");
    application.setAttribute("key","value4");
%>
<%--获取key1的值--%>
${pageScope.key}
${requestScope.key}
${sessionScope.key}
${applicationScope.key}

输出:value1 value2 value3 value4

pageContext示例:

<body>

协议:${pageContext.request.scheme}<br>
服务器ip:${pageContext.request.serverName}<br>
服务器端口号:${pageContext.request.serverPort}<br>
获取工程路径:${pageContext.request.contextPath}<br>
获取请求方法:${pageContext.request.method}<br>
获取客户端ip地址:${pageContext.request.remoteHost}<br>
获取会话的id编号:${pageContext.session.id}<br>


</body>

输出:

在这里插入图片描述

2.JSTL标签库

2.1概述

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

根据JSTL标签所提供的功能,可以将其分为5个类别。

  • 核心标签
  • 格式化标签
  • SQL 标签
  • XML 标签
  • JSTL 函数

JSP 标准标签库(JSTL) | 菜鸟教程 (runoob.com)

JSTL标签库的使用就是弥补HTML标签的不足;它自定义许多标签,可以供我们使用,标签的功能和java代码一样

2.2 导入的包或者maven配置
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>

<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>
2.3 使用步骤:
  • 引入相应的taglib
  • 使用其中的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-skx1YOcD-1633703734453)(D:/Java/note/image-20211004152651848.png)]

c:if
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入JSTL核心标签库,我们才能使用JSTL标签--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h4>if测试</h4>
<form action="coreif.jsp" method="get">
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="登录">
</form>

<%--判断提交的用户名是管理员,登陆成功--%>
<c:if test="${param.username == 'admin'}" var="
isAdmin">
    <c:out value="欢迎"></c:out>
</c:if>
c:when c:chhose c:otherwise
<%--定义一个变量score,值85--%>
<c:set var="score" value="50"/>

<c:choose>
    <c:when test="${score >= 90}">
        你的成绩为优秀
    </c:when>
    <c:when test="${score >= 80}">
        你的成绩为良好
    </c:when>
    <c:when test="${score >= 70}">
        你的成绩为中等
    </c:when>
    <c:when test="${score >= 60}">
        你的成绩为及格
    </c:when>
    <c:otherwise>
        你的成绩为不及格
    </c:otherwise>

</c:choose>

c:forEach
<%
    ArrayList<String> people = new ArrayList<>();

    people.add(0,"张三");
    people.add(1,"李四");
    people.add("王五");

    request.setAttribute("list",people);
%>
<%--
var:每一次遍历出来的变量
items:要遍历的对象
begin:开始
end:结束
step:步长
--%>
<c:forEach var="people" items="${list}">
    <c:out value="${people}"/><br>
</c:forEach>

<hr>

<c:forEach begin="1" end="3" step="2" var="people" items="${list}">
    <c:out value="${people}"/><br>
</c:forEach>
c:set
<%--
    c:set
    作用:往域中保存数据
    scope:域
    var:key名
    value:value值
--%>
保存之前:${ pageContext.abc }<br>
<c:set scope="page" var="abc" value="value1"/>
保存之后:${ pageContext.abc }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值