EL和JSTL核心技术
一、EL
- EL表达式简化了jsp表达式方法,可以方便的访问各种数据并输出,依次访问pageContext、request、session和application作用域对象存储的数据,获取请求参数值,bean对象、集合和简单运算结果。
- 同名时,按顺序pageContext、request、session和application作用域访问数据,没有则下推
1. 访问内置对象数据
由jsp中的<%=request.getAttribute(“ varName”)%>转变为EL实现: ${ varName }
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>el表达式</title>
</head>
<body>
<% /*设置参数*/
pageContext.setAttribute("name1","pageContext参数名:张飞");
request.setAttribute("name2","request参数名:黄忠");
session.setAttribute("name3","session参数名:刘备");
application.setAttribute("name4","application参数名:赵云"); pageContext.setAttribute("name","pageContext参数名:关羽");
request.setAttribute("name","request参数名:关羽");
session.setAttribute("name","session参数名:关羽");
application.setAttribute("name","application参数名:关羽");
%>
<%--获取参数--%>
<h1> <%="pageContext"%>+${name1}</h1><br>
<h1> <%="request"%>+${name2}</h1><br>
<h1> <%="session"%>+${name3}</h1><br>
<h1> <%="application"%>+${name4}</h1><br>
<%-- pageContext==>request==>session==>application--%>
<h1> <%="谁先出来呢"%>+${name}</h1><br> </body>
</html>
2. 访问请求参数的对象数据
由request中的request.getParameter(name);request.getParameterValues(name); 转变为EL中的param:接收的参数只有一个值;paramValues:接受的参数有多个值。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>el表达式</title>
</head>
<body>
<form action="elresponse.jsp" method="post">
姓名:<input type="text" name="name"><br>
爱好:<input type="checkbox" name="hobby" value="唱歌"> 唱歌<br>
<input type="checkbox" name="hobby" value="跳舞">跳舞<br>
<input type="checkbox" name="hobby" value="乐器">乐器<br>
<input type="submit" value="提交">
</form> </body>
</html>
<%@ page import="java.lang.reflect.Array" %>
<%@ page import="java.util.Arrays" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/1/29
Time: 9:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>el表达式</title>
</head>
<body>
<%--设置编码格式--%>
<% request.setCharacterEncoding("utf-8");%>
<%--jsp中requese获取参数--%>
<%="姓名是"+request.getParameter("name")%><br>
<%="爱好是"+ Arrays.toString(request.getParameterValues("hobby"))%>
<%-- el 获取参数 --%>
<br>
<h1>姓名是${param.name}</h1>
<h1>爱好是${paramValues.hobby}</h1>
<h1>第一个爱好是${paramValues.hobby[0]}</h1>
</body>
</html>
3. 访问bean对象
访问方式:$ { 对象名 . 属性名 } 或$ { 对象名 [“属性名”] } ,当要存取的属性名中包含一些特殊字符,或动态取值时用[]方式
<%@ page import="java.lang.reflect.Array" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="com.entity.Person" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/1/29
Time: 9:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>elbean</title>
</head>
<body>
<%--创建bean对象--%>
<%
Person person=new Person("zhangfei",30);
pageContext.setAttribute("var","name");
pageContext.setAttribute("va2","age");
pageContext.setAttribute("person",person);
%> <%--jsp读取--%>
姓名:<%= person.getName()%>
年龄:<%=person.getAge()%>
<hr>
<%--el获取一--%>
姓名:${person.name}
年龄:${person.age}
<hr>
<%--el获取二--%>
姓名:${person["name"]}
年龄:${person["age"]}
<hr>
姓名:${person[var]}
年龄:${person[va2]}
<hr>
</body>
</html>
4. 访问集合元素
访问方式与bean类似,${集合名[下标].属性}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>elbean</title>
</head>
<body>
<%--创建bean对象--%>
<% List<String> list=new LinkedList<>();
list.add("zhangfei");
list.add("liubei");
list.add("guanyu");
Map<String,Integer> map=new HashMap<>();
map.put("zhanfei",20);
map.put("liubei",30);
map.put("guanyu",40);
pageContext.setAttribute("list",list);
pageContext.setAttribute("map",map);
%> <%--el获取list一--%>
第一个list元素:${list[0]}
第二个list元素:${list[1]}
第三个list元素:${list[2]}
<hr>
<%--el获取map--%>
第一个map元素:${map["zhanfei"]}
第二个map元素:${map["guanyu"]}
第三个map元素:${map["liubei"]}
<hr>
</body>
</html>
5. el常用内置对象
| 类别 | 标识符 | 描述 |
| JSP | pageContext | PageContext 处理当前页面 |
| 作用域 | pageScope | 同页面作用域属性名称和值有关的Map类 |
| requestScope | 同请求作用域属性的名称和值有关的Map类 | |
| sessionScope | 同会话作用域属性的名称和值有关的Map类 | |
| applicationScope | 同应用程序作用域属性的名称和值有关的Map类 | |
| 请求参数 | param | 根据名称存储请求参数的值的Map类 |
| paramValues | 把请求参数的所有值作为一个String数组来存储的Map类 | |
| 请求头 | header | 根据名称存储请求头主要值的Map类 |
| headerValues | 把请求头的所有值作为一个String数组来存储的Map类 | |
| Cookie | cookie | 根据名称存储请求附带的cookie的Map类 |
| 初始化参数 | initParam | 根据名称存储Web应用程序上下文初始化参数的Map类 |
6. 简单运算
- 算术运算符
| 算术运算符 | 说 明 | 范 例 | 运算结果 |
| + | 加 | ${1+2} | 3 |
| - | 减 | ${2-1} | 1 |
| * | 乘 | ${2*3} | 6 |
| / 或 div | 除 | ${16/5}或${16div5} | 3.2 |
| % 或 mod | 取余 | ${16%5}或${16mod5} | 1 |
- 关系运算符
| 关系运算符 | 说 明 | 范 例 | 运算结果 |
| ==或eq | 等于 | ${1==2}或${1 eq 2} | false |
| != 或ne | 不等于 | ${2!=1}或${1 ne 2} | true |
| < 或lt | 小于 | ${2<3}或${2 lt 3 } | true |
| > 或 gt | 大于 | ${16>5}或${16 gt 5} | true |
| <= 或 le | 小于等于 | ${16<=5}或${16 le 5} | false |
| >= 或 ge | 大于等于 | ${16>=5}或${16 ge 5} | true |
- 逻辑运算符
| 逻辑运算符 | 说 明 | 范 例 | 运算结果 |
| && 或 and | 与运算 | ${true&&true}或${true and true} | true |
| || 或or | 或运算 | ${true||false}或${true or false} | true |
| ! 或not | 非运算 | ${!true}或${not true } | false |
- 条件运算符:${条件表达式? 语句1 : 语句2}
- 验证运算符:${empty 表达式},返回布尔值,判断表达式是否为"空"值,null值、无元素的集合或数组、长度为零的String被认为是空值。
二、JSTL标签
- jstl是jsp的标准标签库,用于简化jsp中的java代码
- 使用: 添加jar包;导包

- 在JSP页面中使用taglib指定引入jstl标签库
<!-- prefix属性用于指定库前缀 -->
<!-- uri属性用于指定库的标识 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 常用核心标签
- 输出标签<c:out></c:out> 用来将指定内容输出的标签
- 设置标签<c:set></c:set> 用来设置属性范围值的标签
- 删除标签<c:remove></c:remove> 用来删除指定数据的标签
- 单条件判断标签
<c:if test =“EL条件表达式”>
满足条件执行
</c:if > - 多条件判断标签
<c:choose >
<c:when test =“EL表达式”>
满足条件执行
</c:when>
… <
c:otherwise>
不满足上述when条件时执行
</c:otherwise>
</c:choose > - 循环标签
<c:forEach var=“循环变量” items=“集合”>
…
</c:forEach>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core_1_1" %>
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/1/29
Time: 15:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jstl的常用核心标签</title>
</head>
<body>
<%--初始值--%>
<%
pageContext.setAttribute("score",59);
String[] list={"11","22","33","44","55"};
pageContext.setAttribute("list",list);
%>
<%--设置标签--%>
<%--默认作用域为page--%>
<jsp:useBean id="person" class="com.entity.Person" scope="page"></jsp:useBean>
<c:set target="${person}" property="name" value="zhangfei"></c:set>
<c:set target="${person}" property="age" value="20"></c:set>
<c:set var="name" value="guanyu"></c:set>
<%--输出标签--%>
<c:out value="${person.name}"></c:out> <%--zhangfei --%>
<c:out value="${person.age}"></c:out> <%--20--%>
<c:out value="${name}"></c:out> <%--guanyu--%>
<hr/>
<%--删除标签--%>
<c:remove var="name"></c:remove>
<c:out value="${name}" default="hello"></c:out> <%--hello--%>
<%--单条件标签--%>
<c:if test="${score<60}">
<c:out value="不及格"></c:out>
</c:if>
<hr>
<%--多条件标签--%>
<c:choose>
<c:when test="${score<60}">
<c:out value="不及格了呀"></c:out>
</c:when>
<c:when test="${score==60}">
<c:out value="刚好及格"></c:out>
</c:when>
<c:otherwise>
<c:out value="恭喜恭喜"></c:out>
</c:otherwise>
</c:choose>
<hr>
<%--循环标签--%>
<%--对list集合遍历,begin初始值,end结束值,循环包含begin和end,step表示间隔,items表示作用对象--%>
<c:forEach var="ts" items="${list}" begin="1" end="4" step="2" >
<c:out value="${ts}"></c:out> <%--22,44--%>
</c:forEach>
</body>
</html>
- 常用函数标签<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
- 常用格式标签 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page import="java.util.Date" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/1/29
Time: 15:59
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>函数与格式</title>
</head>
<body>
<%--加入变量--%>
<c:set var="string" value="Hello World!"></c:set>
<c:out value="${fn:contains(string,'o')}"></c:out> <%--true--%>
<c:out value="${fn:toUpperCase(string)}"></c:out> <%--HELLOWORLD--%>
<c:out value="${fn:toLowerCase(string)}"></c:out><%--helloworld--%> <%
Date date = new Date();
pageContext.setAttribute("date",date);
%>
<fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>
</body>
</html>
- 自定义标签
- 编写标签类继承SimpleTagSupport类或TagSupport类并重写doTag方法或doStartTag方法。
package com.entity;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;import java.io.IOException;
public class HelloTag extends SimpleTagSupport {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public void doTag() throws JspException, IOException {
JspWriter out = this.getJspContext().getOut();
out.println("自定义标签"+name);
}
} - 定义标签库文件(tld标签库文件)并配置标签说明文件到到WEB-INF下
<?xml version="1.0" encoding="ISO-8859-1"?> <taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1"> <tlib-version>1.0</tlib-version>
<short-name>my</short-name>
<uri>http://rf.com</uri> <!-- Invoke 'Generate' action to add tags or functions -->
<tag>
<name>helloTag</name>
<tag-class>com.entity.HelloTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>true</required>
</attribute>
</tag>
</taglib> - 在JSP中添加taglib指令引入标签库使用
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/1/29
Time: 16:19
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="my" uri="http://rf.com" %>
<html>
<head>
<title>自定义标签</title>
</head>
<body>
<my:helloTag name="zhangfei"/> </body>
</html>
- 编写标签类继承SimpleTagSupport类或TagSupport类并重写doTag方法或doStartTag方法。
EL和JSTL核心技术的更多相关文章
- jsp与El,jstl知识点总结归纳
jsp与El,jstl知识点总结归纳 jsp部分 一.jsp的三大指令 page ,include,taglib 1.jsp中的page指令 <% page %>-设置jsp 例如: &l ...
- JSP内置标签 JSP中JavaBean标签 JSP开发模式 EL和JSTL快速入门
2 JSP内置标签(美化+业务逻辑) 1)为了取代<%%>脚本形式,使用JSP标签/JSP动作,目的:与JSP页面的美化,即JSP面页都是由标签组成,不再有其它的内容 2)JSP内 ...
- 在idea的maven项目使用el或jstl表达式
必须加上这句: <%@ page isELIgnored="false" %> 否则无法解析el或jstl表达式 <%@ taglib prefix=" ...
- 第75节:Java的中的JSP,EL和JSTL
第75节:Java中的JSP,EL和JSTL 哭吧看不完的!!! Cookie和`Session 请求转发和重定向的区别: 地址不一样 请求次数也不一样 数据无法传递 4.跳转范围有限制 效率 请求转 ...
- JSP、EL、JSTL
JSP(Java Server Pages) 什么是JSP Java Server Pages(Java服务器端的页面) 使用JSP:SP = HTML + Java代码 + JSP自身的东西.执行J ...
- jsp中的EL和JSTL的关系
对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...
- Jsp应用EL和JSTL实例对比。
普通方式: register.jsp <%@ page language="java" import="java.util.*" pageEncoding ...
- EL 和 JSTL
EL 什么是EL表达式 EL(Express Lanuage) 表达式可以嵌入在jsp页面内部 减少jsp脚本的编写 EL出现的目的是要替代jsp页面中脚本的编写 作用区间 EL最主要的作用是获取四大 ...
- Unit05: WEB项目的开发模式 、转发 和 Unit09: EL、JSTL
Unit05: WEB项目的开发模式 .转发 和 Unit09: EL.JSTL dao package dao; import java.io.Serializable; import jav ...
随机推荐
- VirtualBox安装配置CentOS7(含网络连接配置)
最近需要用到CentOS7,特地在虚拟机上安装一遍,中间走了很多弯路,特地在此处进行记录 前置条件: 1.本地完成Oracle VM VirtualBox,我安装的是6.1版本 2.下载CentOS安 ...
- ELK技术栈之-Logstash详解
ELK技术栈之-Logstash详解 前言 在第九章节中,我们已经安装好Logstash组件了,并且启动实例测试它的数据输入和输出,但是用的是最简单的控制台标准输入和标准输出,那这节我们就来深入的 ...
- Jmeter- 笔记11 - 持续集成
CICD:持续集成 持续交付 进行持续集成的首选工具:Jenkins 性能测试中持续集成:Jenkins(管理集成) + Jmeter(性能工具) + ant(编译代码) ant安装配置步骤: 1.下 ...
- win10家庭中文版CUDA+CUDNN+显卡GPU使用tensorflow-gpu训练模型安装过程(精华帖汇总+重新修改多次复现)
查看安装包 pip list 本帖提供操作过程,具体操作网上有好多了,不赘述.红色字体为后来复现出现的问题以及批注 题外话: (1)python 的环境尽量保持干净,尽量单一,否则容易把自己搞晕,不知 ...
- 大尺寸卫星图像目标检测:yoloT
大尺寸卫星图像目标检测:yoloT 1. 前言 YOLT论文全称「You Only Look Twice: Rapid Multi-Scale Object Detection In Satellit ...
- 嵌入式Linux设备驱动程序:发现硬件配置
嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...
- Java IO学习笔记三:MMAP与RandomAccessFile
作者:Grey 原文地址:Java IO学习笔记三:MMAP与RandomAccessFile 关于RandomAccessFile 相较于前面提到的BufferedReader/Writer和Fil ...
- APP的闪退和无响应
1.app闪退(crash,崩溃):程序异常退出不再运行 闪退的原因: a.程序内部逻辑错误(因算法或网络连接引起的异常,或是为捕捉到的错误) b.系统自身异常:一般自定ROM或刷机后比较常见 c.运 ...
- 【NX二次开发】Block UI 指定矢量
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- 飞(fly)(数学推导,liu_runda的神题)
大概看了两三个小时的题解,思考量很大,实现简单........ 20分: 明显看出,每个点的贡献是x*(x-1)/2;即组合数C(x,2),从x个线段中选出2个的方案数,显然每次相交贡献为1,n^2枚 ...