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核心标签库的更多相关文章

  1. 9.EL表达式 和 JSTL核心标签库

    EL表达式 1./*获取数据*/ (某个web域中的对象,访问javabean的属性.访问List集合.访问Map集合.访问数组) <html> <head> <titl ...

  2. EL表达式和JSTL标准标签库

    一.EL表达式 什么是EL表达式 EL(Express Lanuage)表达式可以嵌入在jsp页面内部 减少jsp脚本的编写 EL出现的目的是要替代jsp页面中脚本的编写. EL表达式的作用 EL最主 ...

  3. EL表达式 与 JSTL标准标签库

    目录 EL表达式 什么是EL表达式 作用 EL内置11对象 EL执行表达式 JSTL 什么是JSTL JSTL标准标签库有5个子库 把JSTL标签库jar包引入工程当中 if标签 foreach标签 ...

  4. Javaweb学习笔记——(十三)——————JSTL、JSTL核心标签库、自定义标签、有标签体的标签、带有属性的标签、MVC、Javaweb三层框架

    JSTLApache提供的标签库 jar包:jstl-1.2.jar,如果传MyEclipse,他会在我们导入jar包,无需自己导入,如果没有使用MyEclipse那么需要自行导入.--------- ...

  5. jsp之jstl核心标签库

    JSTL核心标签库技术 1. JSTL介绍 在JSP页面中即可书写html,也可以书写Java代码,导致页面混乱,维护,修改,升级难度加大,于是国际上不同的公司在实际应用中,根据页面的需求将Java代 ...

  6. JSTL 核心标签库 使用

    JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...

  7. JSTL 核心标签库 使用(C标签)

    JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...

  8. JSTL核心标签库使用

    JSTL是什么? java standard taglib(java标准标签库). 标签是什么? sun公司制订的一种技术规范,用来将jsp页面中的java代码使用类似于html当中的标记来替换 的一 ...

  9. 【JSP】JSTL核心标签库的使用方法和示例

    JSTL 核心标签库 JSTL 核心标签库标签共有13个,功能上分为4类: 1. 表达式控制标签:out.set.remove.catch 2. 流程控制标签:if.choose.when.other ...

随机推荐

  1. .NET使用Office Open XML导出超大数量数据到 Excel

    我相信很多人在做项目的都碰到过Excel数据导出的需求,我从最开始使用最原始的HTML拼接(将需要导出的数据拼接成TABLE标签)到后来happy的使用开源的NPOI, EPPlus等开源组件导出EX ...

  2. 利用TortoiseGit对Coding项目进行版本管理

    Git配置: 1),首先去Git官网下载最新的Git,https://git-for-windows.github.io/ 2),下载对应的版本,然后一路next点击安装. Git与Coding联通 ...

  3. 【转载】从头编写 asp.net core 2.0 web api 基础框架 (3)

    Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratc ...

  4. 简单的ajax遮罩层(加载进度圈)cvi_busy_lib.js

    cvi_busy_lib.js cvi_busy_lib.js 是一个基于ajax的遮罩js,遮罩区域为body区域.使用比较简单. 效果: 在下面的Js代码,标注为红色标记为需要设置的参数. 1.g ...

  5. Linux系统下安装jdbc与tomcat

    一.下载Linux版本的jdbc与tomcat 1.1 下载Linux版本的jdbc: 1.1.1 1.1.2 1.1.3 在进行1.1.3操作之前得先勾选我同意协议 1.1.4 下载完成 1.2下载 ...

  6. RHM-M10汽车吊力矩限制器/载荷指示器

    一 产品特点 1.     采用7.0寸工业65K色TFT LCD真彩屏,亮度250nit,分辨率800×480: 2.     传感器采用进口机芯,过载能力强: 3.     采用油压取力和大臂弯曲 ...

  7. Java Socket获取本机的InetAddress实例

    package com.immooc;/* * InetAddress类 */import java.net.InetAddress;import java.net.UnknownHostExcept ...

  8. BZOJ 1597: [Usaco2008 Mar]土地购买【斜率优化+凸包维护】

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4989  Solved: 1847[Submit] ...

  9. Codeforces Round #410 (Div. 2)(A,字符串,水坑,B,暴力枚举,C,思维题,D,区间贪心)

    A. Mike and palindrome time limit per test:2 seconds memory limit per test:256 megabytes input:stand ...

  10. SpringMVC框架学习笔记(3)——controller配置汇总

    1.通过URL对应bean <!-- 配置handlerMapper 映射器 --> <bean class="org.springframework.web.servle ...