EL表达式和JSTL核心标签库
1 EL表达式
1.1 EL的概述
- EL,全名为Expression Language。
- 主要作用:
- ①EL表达式主要用于替换jsp页面中的脚本表达式,以便于从各种类型的web域中检索java对象(某个web域中的对象),获取数据(访问javabean的属性、访问List集合、访问Map集合、访问数组)。
- ②执行运算。
- ③利用EL表达式可以在jsp页面中执行一些基本的关系运算、逻辑运算和算数运算,以便于在jsp页面完成一些简单的逻辑运算。
- ④获取web开发常用的对象。
- ⑤EL表达式定义了一些隐式的对象,利用这些隐式对象,web开发人员可以很轻松的获取web常用对象的引用,从而获取这些对象中的数据。
- ⑥调用案卷方法。
- ⑦EL表达式允许用户开发自定义的EL函数,以便于在jsp页面通过EL表达式调用java类的方法。
1.2 EL的基本语法
- ${标识符}
- EL表达式在执行的时候,会调用pageContext.findAttribute("")方法,用标识符作为关键字。分别从page、request、session、application四个域对象中查找对应的对象,如果找到了,就返回对应的对象;否则返回""。(不是null)
- Scriptlet vs EL
<%
List<User> users = (List<User>) request.getSession().getAttribute("users");
out.write(users.get(0).getUsername());
%>
${users[0].name}
1.3 获取数据
- 示例:EL获取对象
package com.domain;
import java.io.Serializable;
/**
* 2017/11/6
* 说明:
*/
public class Student implements Serializable {
private String name;
private int age;
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
<%@ page import="com.domain.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
Student student = new Student();
student.setName("刘谦");
student.setAge(29);
student.setGender("男");
pageContext.setAttribute("student",student);
%>
${student}
<%--
${student} 相等于
Student student = (Student)pageContext.findAttribute("student");
out.write(student)
--%>
</body>
</html>
- 示例:EL获取javaBean对象的属性
<%@ page import="com.domain.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
Student student = new Student();
student.setName("刘谦");
student.setAge(29);
student.setGender("男");
pageContext.setAttribute("student",student);
%>
${student.name}
<%--
${student} 相等于
Student student = (Student)pageContext.findAttribute("student");
out.write(student.getName())
--%>
</body>
</html>
- 示例:获取javaBean关联对象的属性
package com.domain;
/**
* 2017/11/6
* 说明:
*/
public class Address {
private String province;
private String city;
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
package com.domain;
import java.io.Serializable;
/**
* 2017/11/6
* 说明:
*/
public class Student implements Serializable {
private String name;
private int age;
private String gender;
private Address address = new Address();
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
<%@ page import="com.domain.Student" %>
<%@ page import="com.domain.Address" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
Address address = new Address();
address.setProvince("江苏省");
address.setCity("泰州市");
Student student = new Student();
student.setName("刘谦");
student.setAge(29);
student.setGender("男");
student.setAddress(address);
pageContext.setAttribute("student",student);
%>
${student.address.province}
</body>
</html>
- 示例:获取数组中的元素
<%@ page import="com.domain.Student" %>
<%@ page import="com.domain.Address" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
String[] strs = {"aa","bb"};
pageContext.setAttribute("strs",strs);
%>
${strs[0]}
</body>
</html>
- 示例:获取Map集合中的元素
<%@ page import="com.domain.Student" %>
<%@ page import="com.domain.Address" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
Map<String,String> map = new HashMap<>();
map.put("aa","bb");
map.put("cc","dd");
pageContext.setAttribute("map",map);
%>
${map.aa}
</body>
</html>
- 示例:获取List集合中的元素
<%@ page import="com.domain.Student" %>
<%@ page import="com.domain.Address" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
List<String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
pageContext.setAttribute("list",list);
%>
${list[0]}
</body>
</html>
1.4 EL的运算
- 算数
- 逻辑
- 关系
- empty运算符:判断一个字符串是否为""或其他对象是否为null,同时还能判断是集合中是否含有元素。
<%@ page import="com.domain.Student" %>
<%@ page import="com.domain.Address" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
List<String> list = new ArrayList<>();
pageContext.setAttribute("s","");
pageContext.setAttribute("s1",null);
pageContext.setAttribute("s2",list);
%>
${empty s1}<%--true--%>
${empty s1}<%--true--%>
${empty s2}<%--true--%>
</body>
</html>
- 三元运算符:
<%@ page import="com.domain.Student" %>
<%@ page import="com.domain.Address" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
pageContext.setAttribute("gender","男");
%>
<input type="radio" name="gender" value="男" ${gender == "男"?"checked='true'":""}>男<br/>
<input type="radio" name="gender" value="女" ${gender == "女"?"checked='true'":""}>女<br/>
</body>
</html>
1.5 EL的隐式对象(11个)
| EL隐式对象的名称 | 表示的类型 | JSP的隐式对象 | 备注 |
| pageContext | javax.servlet.jsp.PageContext | pageContext | 一样 |
| pageScope | java.utl.Map | 没有 | 页面域范围的数据 |
| sessionScope | java.utl.Map | 没有 | reqeust域范围的数据 |
| requestScope | java.utl.Map | 没有 | session域范围的数据 |
| aplicattionScope | java.utl.Map | 没有 | application域范围的数据 |
| header | java.utl.Map | 没有 | key:请求消息头 value:消息头对应的值 |
| headerValues | java.utl.Map | 没有 | key:请求消息头 value:消息头对应的值数组 |
| param | java.utl.Map | 没有 | key:请求参数名,value:请求参数值 |
| paramValues | java.utl.Map | 没有 | key:请求参数名,value:请求参数值数组 |
| cookie | java.utl.Map | 没有 | key:Cookie对象的name ,value是Cookie对象本身 |
| initParam | java.utl.Map | 没有 | key:全局参数的name,value是全局参数的值 |
- 示例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
pageContext.setAttribute("p","p");
request.setAttribute("p","rp");
session.setAttribute("p","sp");
application.setAttribute("p","ap");
%>
${p} <%=pageContext.findAttribute("p")%> <br/>
${pageScope.p} <%=pageContext.getAttribute("p")%> <br/>
${requestScope.p} <%=request.getAttribute("p")%> <br/>
${sessionScope.p} <%=session.getAttribute("p")%> <br/>
${applicationScope.p} <%=application.getAttribute("p")%> <br/>
</body>
</html>
- 示例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
${header["Accept-Encoding"]}<br/>
<%=request.getHeader("Accept-Encoding")%>
</body>
</html>
1.6 定义和使用EL函数
- EL不支持字符串操作的
1.6.1 定义EL函数的开发步骤
- ①定义一个普通类,提供实现功能的静态方法(EL函数只能调用静态方法)。
package com;
/**
* 2017/11/6
* 说明:
*/
public class ELFunction {
public static String toUpperCase(String str) {
return str.toUpperCase();
}}
- ②EL函数的配置:在WEB-INF目录下建立一个扩展名为*.tld的xml文件,此时新建的*.tld的名称为elfunction.tld
<?xml version="1.0" encoding="UTF-8"?>
<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>elfunction</short-name>
<uri>http://www.xuweiwei.com/jsp/functions</uri>
<function>
<name>toUpperCase</name>
<function-class>com.ELFunction</function-class>
<function-signature>java.lang.String toUpperCase(java.lang.String)</function-signature>
</function>
</taglib>
- ③在jsp中引入tld文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="elfunction" uri="http://www.xuweiwei.com/jsp/functions" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
pageContext.setAttribute("s","abcde");
%>
${elfunction:toUpperCase(s)}
</body>
</html>
2 JSTL核心标签库
- 导入standard.jar和jstl-api.jar包
- 在jsp的头部添加如下的代码
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- jstl最常用的标签:
- <c:if>
- <c:forEach>
- 示例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="elfunction" uri="http://www.xuweiwei.com/jsp/functions" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
pageContext.setAttribute("s","abcde");
%>
<c:if test="${not empty s}">
${s}
</c:if>
</body>
</html>
- 示例:
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="elfunction" uri="http://www.xuweiwei.com/jsp/functions" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
List<String> lists = new ArrayList<>();
lists.add("aa");
lists.add("bb");
lists.add("cc");
pageContext.setAttribute("lists",lists);
%>
<c:if test="${not empty lists}">
<c:forEach items="${lists}" var="list">
${list}
</c:forEach>
</c:if>
</body>
</html>
EL表达式和JSTL核心标签库的更多相关文章
- 9.EL表达式 和 JSTL核心标签库
EL表达式 1./*获取数据*/ (某个web域中的对象,访问javabean的属性.访问List集合.访问Map集合.访问数组) <html> <head> <titl ...
- EL表达式和JSTL标准标签库
一.EL表达式 什么是EL表达式 EL(Express Lanuage)表达式可以嵌入在jsp页面内部 减少jsp脚本的编写 EL出现的目的是要替代jsp页面中脚本的编写. EL表达式的作用 EL最主 ...
- EL表达式 与 JSTL标准标签库
目录 EL表达式 什么是EL表达式 作用 EL内置11对象 EL执行表达式 JSTL 什么是JSTL JSTL标准标签库有5个子库 把JSTL标签库jar包引入工程当中 if标签 foreach标签 ...
- Javaweb学习笔记——(十三)——————JSTL、JSTL核心标签库、自定义标签、有标签体的标签、带有属性的标签、MVC、Javaweb三层框架
JSTLApache提供的标签库 jar包:jstl-1.2.jar,如果传MyEclipse,他会在我们导入jar包,无需自己导入,如果没有使用MyEclipse那么需要自行导入.--------- ...
- jsp之jstl核心标签库
JSTL核心标签库技术 1. JSTL介绍 在JSP页面中即可书写html,也可以书写Java代码,导致页面混乱,维护,修改,升级难度加大,于是国际上不同的公司在实际应用中,根据页面的需求将Java代 ...
- JSTL 核心标签库 使用
JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...
- JSTL 核心标签库 使用(C标签)
JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...
- JSTL核心标签库使用
JSTL是什么? java standard taglib(java标准标签库). 标签是什么? sun公司制订的一种技术规范,用来将jsp页面中的java代码使用类似于html当中的标记来替换 的一 ...
- 【JSP】JSTL核心标签库的使用方法和示例
JSTL 核心标签库 JSTL 核心标签库标签共有13个,功能上分为4类: 1. 表达式控制标签:out.set.remove.catch 2. 流程控制标签:if.choose.when.other ...
随机推荐
- 转JS--通过按钮直接把input或者textarea里的值复制到粘贴板里
document.activeElement属性为HTML 5中新增的document对象的一个属性,该属性用于返回光标所在元素.当光标未落在页面中任何元素内时,属性值返回body元素. setSel ...
- Android简易记事本
此次做的Android简易记事本的存储方式使用了SQLite数据库,然后界面的实现比较简单,但是,具有增删改查的基本功能,这里可以看一下效果图,如下: 具体操作就是长按可以删除操作,点击可以进行修改, ...
- spring 实现邮箱发送
使用spring mail 实现的邮箱发送功能,包括附件的发送(附件发送要保证附件存在的路径是真实),使用maven集成jar包,通过spring mvc 实现前后台的调用,发送方使用的是163邮箱, ...
- Memcache缓存
memcache 是服务器缓存系统,以键值对方式保存数据到内存中,把对象序列化后,理论上可支持所有的数据类型.使用情景:怎么用都可以,注意的是它只把数据保存到内存中,重启memcache 服务后丢失, ...
- django中数据库操作——in操作符
django一对多关系中,为了实现按照一端查询多端,之前都是用extra操作符,经过查看官方文档还有in这个操作符,用这个实现更简单.直接上代码: 根据查询条件模糊查询所有符合条件的机架列表,然后根据 ...
- hihoCoder #1498 : Diligent Robots【数学】
#1498 : Diligent Robots 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 There are N jobs to be finished. It t ...
- B. OR in Matrix
B. OR in Matrix time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- JS中const、var 和let的区别
今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 ...
- qt中moc的作用
Qt 将源代码交给标准 C++ 编译器,如 gcc 之前,需要事先将这些扩展的语法去除掉.完成这一操作的就是 moc. moc 全称是 Meta-Object Compiler,也就是"元对 ...
- [国嵌攻略][164][USB驱动程序设计]
USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.U ...