复习 EL 表达式与 JSTL

时间:2022-07-26
本文章向大家介绍复习 EL 表达式与 JSTL,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.1 EL 表达式

1.1.1 概述

  EL(Expression Language)是为了使 JSP 写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让 JSP 的代码更加简化。

1.1.2 EL 表达式语法

  EL 表达式允许指定一个表达式来表示属性值。一个简单的表达式语法:${表达式}. EL中通用的操作符是 .{} 。这两个操作符允许通过内嵌的 JSP 对象访问各种各样的 JavaBean 属性。注意:EL 表达式的实质是从域中取值.

示例

<%--
  Created by IntelliJ IDEA.
  User: Demo_Null
  Date: 2020/6/23
  Time: 17:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.ArrayList" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<%
    ArrayList<String> list = new ArrayList<>();
    list.add("001");
    list.add("002");
    list.add("003");
    list.add("004");

    request.setAttribute("list",list);
%>

list 的第一个元素为 ${list.get(0)}

</body>
</html>

1.1.3 基本操作符

操作符

描述

.

访问一个Bean属性或者一个映射条目

[]

访问一个数组或者链表的元素

( )

组织一个子表达式以改变优先级

+

-

减或负

*

/ 、 div

% 、mod

取模

== 、eq

测试是否相等

!= 、ne

测试是否不等

< 、lt

测试是否小于

> 、gt

测试是否大于

<= 、le

测试是否小于等于

>= 、ge

测试是否大于等于

&& 、and

测试逻辑与

|| 、or

测试逻辑或

! 、not

测试取反

empty

测试是否空值

1.1.4 EL 隐式对象

隐式对象

描述

pageScope

page 作用域

requestScope

request 作用域

sessionScope

session 作用域

applicationScope

application(ServletContext)作用域

param

Request 对象的参数,字符串

paramValues

Request 对象的参数,字符串集合

header

HTTP 信息头,字符串

headerValues

HTTP 信息头,字符串集合

initParam

上下文初始化参数

cookie

Cookie 值

pageContext

当前页面的 pageContext 可取 JSP 其他八个内置对象

1.1.5 EL 获取值

对象

// 本质上会去调用对象的getter方法
${域名称.键名.属性名}

List 集合

${域名称.键名[索引]}

Map 集合

${域名称.键名.key名称}
${域名称.键名["key名称"]}'

1.2 JSTL

1.2.1 概述

  JSTL 的英文全称是 JavaServer Pages Standard Tag Library,中文全称是 JSP 标准标识库。JSTL 技术标准是由 JCP(Java Community Process)组织的 JSR052 专家组发布,Apache 组织将其列入 Jakarta 项目,Sun 公司将 JSTL 的程序包加入互联网服务开发工具包内(Web Services Developer Pack(WSDP)),作为 JSP 技术应用的一个标准。   JSTL 标签是基于 JSP 页面的,这些标签可以插入在 JSP 代码中,本质上 JSTL 也是提前定义好的一组标签,这些标签封装了不同的功能,在页面上调用标签时,就等于调用了封装起来的功能。JSTL 的目标是简化 JSP 页面的设计。对于页面设计人员来说,使用脚本语言操作动态数据是比较困难的,而采用标签和表达式语言则相对容易,JSTL 的使用为页面设计人员和程序开发人员的分工协作提供了便利。   JSTL 标识库的作用是减少 JSP 文件的 Java 代码,使 Java 代码与 HTML 代码分离,所以 JSTL 标识库符合 MVC 设计理念。MVC 设计理念的优势是将动作控制、数据处理、结果显示三者分离。

1.2.2 JSTL 的使用

JSTL 的五大标签库

库名

URI

前缀

Core(核心库)

http://java.sun.com/jsp/jstl/core

c

I18N(国际化)

http://java.sun.com/jsp/jstl/fmt

fmt

SQL

http://java.sun.com/jsp/jstl/sql

sql

XML

http://java.sun.com/jsp/jstl/xml

x

Functions

http://java.sun.com/jsp/jstl/functions

fn

使用标签库

直接使用 taglib 引入会报红,需要先引入 jstl 的 jar 包

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

1.2.3 核心标签库

标签

描述

<c:out>

用于在 JSP 中显示数据,就像 <%= … >

<c:set>

用于保存数据

<c:remove>

用于删除数据

<c:catch>

用来处理产生错误的异常状况,并且将错误信息储存起来

<c:if>

与我们在一般程序中用的 if 一样

<c:choose>

本身只当做 <c:when> 和 <c:otherwise> 的父标签

<c:when>

<c:choose> 的子标签,用来判断条件是否成立

<c:otherwise>

<c:choose> 的子标签,接在 <c:when> 标签后,当 <c:when> 标签判断为 false 时被执行

<c:import>

检索一个绝对或相对 URL,然后将其内容暴露给页面

<c:forEach>

基础迭代标签,接受多种集合类型

<c:forTokens>

根据指定的分隔符来分隔内容并迭代输出

<c:param>

用来给包含或重定向的页面传递参数

<c:redirect>

重定向至一个新的 URL

<c:url>

使用可选的查询参数来创造一个 URL

示例

<%--
  Created by IntelliJ IDEA.
  User: Demo_Null
  Date: 2020/6/23
  Time: 17:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page import="cn.itcast.domain.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
	<head>
	    <title>test</title>
	</head>
	<body>
		<%
		    List list = new ArrayList();
		    list.add(new User("张三",23,new Date()));
		    list.add(new User("李四",24,new Date()));
		    list.add(new User("王五",25,new Date()));
		
		    request.setAttribute("list",list);
		%>
		
		<table border="1" width="500" align="center">
		    <tr>
		        <th>编号</th>
		        <th>姓名</th>
		        <th>年龄</th>
		        <th>生日</th>
		    </tr>
		
		    <c:forEach items="${list}" var="user" varStatus="s">
		        <c:if test="${s.count % 2 != 0}">
		            <tr bgcolor="red">
		                <td>${s.count}</td>
		                <td>${user.name}</td>
		                <td>${user.age}</td>
		                <td>${user.birStr}</td>
		            </tr>
		        </c:if>
		
		        <c:if test="${s.count % 2 == 0}">
		            <tr  bgcolor="green">
		                <td>${s.count}</td>
		                <td>${user.name}</td>
		                <td>${user.age}</td>
		                <td>${user.birStr}</td>
		            </tr>
		        </c:if>
		    </c:forEach>
		</table>
	</body>
</html>

1.2.4 格式化标签

标签

描述

<fmt:formatNumber>

使用指定的格式或精度格式化数字

<fmt:parseNumber>

解析一个代表着数字,货币或百分比的字符串

<fmt:formatDate>

使用指定的风格或模式格式化日期和时间

<fmt:parseDate>

解析一个代表着日期或时间的字符串

<fmt:bundle>

绑定资源

<fmt:setLocale>

指定地区

<fmt:setBundle>

绑定资源

<fmt:timeZone>

指定时区

<fmt:setTimeZone>

指定时区

<fmt:message>

显示资源配置文件信息

<fmt:requestEncoding>

设置request的字符编码

1.2.5 SQL 标签

标签

描述

<sql:setDataSource>

指定数据源

<sql:query>

运行 SQL 查询语句

<sql:update>

运行 SQL 更新语句

<sql:param>

将 SQL 语句中的参数设为指定值

<sql:dateParam>

将 SQL 语句中的日期参数设为指定的 java.util.Date 对象值

<sql:transaction>

在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

1.2.6 XML 标签

标签

描述

<x:out>

与 <%= … > ,类似,不过只用于 XPath 表达式

<x:parse>

解析 XML 数据

<x:set>

设置 XPath 表达式

<x:if>

判断 XPath 表达式,若为真,则执行本体中的内容,否则跳过本体

<x:forEach>

迭代 XML 文档中的节点

<x:choose>

<x:when> 和 <x:otherwise> 的父标签

<x:when>

<x:choose> 的子标签,用来进行条件判断

<x:otherwise>

<x:choose> 的子标签,当 <x:when> 判断为 false 时被执行

<x:transform>

将 XSL 转换应用在 XML 文档中

<x:param>

与 <x:transform> 共同使用,用于设置 XSL 样式表

1.2.7 JSTL 函数

标签

描述

fn:contains()

测试输入的字符串是否包含指定的子串

fn:containsIgnoreCase()

测试输入的字符串是否包含指定的子串,大小写不敏感

fn:endsWith()

测试输入的字符串是否以指定的后缀结尾

fn:escapeXml()

跳过可以作为XML标记的字符

fn:indexOf()

返回指定字符串在输入字符串中出现的位置

fn:join()

将数组中的元素合成一个字符串然后输出

fn:length()

返回字符串长度

fn:replace()

将输入字符串中指定的位置替换为指定的字符串然后返回

fn:split()

将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回

fn:startsWith()

测试输入字符串是否以指定的前缀开始

fn:substring()

返回字符串的子集

fn:substringAfter()

返回字符串在指定子串之后的子集

fn:substringBefore()

返回字符串在指定子串之前的子集

fn:toLowerCase()

将字符串中的字符转为小写

fn:toUpperCase()

将字符串中的字符转为大写

fn:trim()

移除首尾的空白符