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 ...
随机推荐
- spring的父子容器
在创建ssm项目工程时,经常需要读取properties资源配置文件,传统的方法当然可以. 但是spring提供了更简便的方法,@value注解. 在page.properties文件中,配置分页信息 ...
- IntelliJ IDEA 教程(1)
过完年,新的学习阶段又开始了.星爷的电影票还没还,国民岳父(韩寒)的礼钱也没送,王老板说再立一个小目标,马老板说我不在乎钱...学习还得继续. IntelliJ Idea 简称IDEA,是java语言 ...
- 基于Xilinx FPGA的视频图像采集系统
本篇要分享的是基于Xilinx FPGA的视频图像采集系统,使用摄像头采集图像数据,并没有用到SDRAM/DDR.这个工程使用的是OV7670 30w像素摄像头,用双口RAM做存储,显示窗口为320x ...
- 2017多校第一套&&hdu6038 思维 数学
链接 http://acm.hdu.edu.cn/showproblem.php?pid=6038 题意: 给你一个a序列,代表0到n-1的排列:一个b序列代表0到m-1的排列.问你可以找出多少种函 ...
- LuceneNet 实现快速大文件大数据查询
做过站内搜索的朋友应该对Lucene.Net不陌生,因为用普通的sql like查询肯定是不行的,太慢了. 首先说明的是--Lucene.Net只是一个全文检索开发包,不是一个成型的搜索引擎, 它的 ...
- the server responded with a status of 414 (Request-URI Too Large)
nginx 配置不当,前端ajax调用报错: the server responded with a status of 414 (Request-URI Too Large) 浏览器F12报错如下: ...
- ajax跳转到新的jsp页面
ajax可以实现局部刷新页面,即在不刷新整个页面的情况下更新页面的局部信息. 项目中遇到一个问题:在用户列表也,当点击某个按钮时需要去查询用户的信息,查询成功跳转到用户详情界面:查询失败,则在原页面弹 ...
- Dora.Interception, 为.NET Core度身打造的AOP框架[4]:演示几个典型应用
为了帮助大家更深刻地认识Dora.Interception,并更好地将它应用到你的项目中,我们通过如下几个简单的实例来演示几个常见的AOP应用在Dora.Interception下的实现.对于下面演示 ...
- Ubuntu下 jdk环境变量设置
流程 1. 官网下载对应的jdk文件 2. 在根目录 / 下创建一个java目录 mkdir /java 3. 使用mv命令 将下载下来的文件(压缩格式),移动到上一步创建的/java目录下 Ps ...
- Spark算子--mapValues
转载请标明出处http://www.cnblogs.com/haozhengfei/p/ccc9d6b5c46ac7209c1e104bd219bfb4.html mapValues--Transfo ...