EL 表达式 & JSTL 标签库

EL 表达式 & JSTL 标签库,第1张

目录

1.EL 表达式

1.1 什么是 EL 表达式,EL 表达式的作用?

1.2 EL 表达式搜索域数据的顺序 

1.3 EL 表达式输出 Bean 的普通属性,数组属性。List 集 合属性,map 集合属性 

1.4 EL 表达式——运算 

1.5 EL 表达式的 11 个隐含对象

2. JSTL 标签库(次重点****)

2.1 JSTL标签库的概念

2.2 JSTL 标签库的使用步骤 

2.3 core 核心库使用


1.EL 表达式 1.1 什么是 EL 表达式,EL 表达式的作用?

        EL 表达式的全称是: Expression Language。是表达式语言。         EL 表达式的什么作用: EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。         因为 EL 表达式在输出数据的时候,要比 jsp 的表达式脚本要简洁很多。
1.2 EL 表达式搜索域数据的顺序 

  •  EL 表达式主要是在 jsp 页面中输出数据。
  • 主要是输出域对象中的数据。
  • 当四个域中都有相同的 key 的数据的时候,EL 表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    <%
        //往四个域中都保存了相同的key的数据。
        request.setAttribute("key", "request");
        session.setAttribute("key", "session");
        application.setAttribute("key", "application");
        pageContext.setAttribute("key", "pageContext");
    %>
    ${ key }


1.3 EL 表达式输出 Bean 的普通属性,数组属性。List 合属性,map 集合属性 

需求——输出 Person 类中普通属性,数组属性。list 集合属性和 map 集合属性。

Peson类:

package com.atguigu.pojo;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class Person {
//    i.需求——输出Person类中普通属性,数组属性。list集合属性和map集合属性。
    private String name;
    private String[] phones;
    private List cities;
    private Map map;

    public int getAge() {
        return 18;
    }
}

 页面输出的代码:

<%@ page import="com.atguigu.pojo.Person" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    <%
        Person person = new Person();
        person.setName("国哥好帅!");
        person.setPhones(new String[]{"18610541354","18688886666","18699998888"});

        List cities = new ArrayList();
        cities.add("北京");
        cities.add("上海");
        cities.add("深圳");
        person.setCities(cities);

        Mapmap = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");
        person.setMap(map);

        pageContext.setAttribute("p", person);
    %>

    输出Person:${ p }
输出Person的name属性:${p.name}
输出Person的pnones数组属性值:${p.phones[2]}
输出Person的cities集合中的元素值:${p.cities}
输出Person的List集合中个别元素值:${p.cities[2]}
输出Person的Map集合: ${p.map}
输出Person的Map集合中某个key的值: ${p.map.key3}
输出Person的age属性:${p.age}

注意:EL表达式找值找的是其对应的get方法,而不是其变量本身。

1.4 EL 表达式——运算 

语法:${ 运算表达式 } EL 表达式支持如下运算符

  • 关系运算

  • 逻辑运算

  • 算数运算

  • empty 运算

empty 运算可以判断一个数据是否为空,如果为空,则输出 true,不为空输出 false

以下几种情况为空:         1、值为 null 值的时候,为空         2、值为空串的时候,为空         3、值是 Object 类型数组,长度为零的时候         4、 list 集合,元素个数为零         5、 map 集合,元素个数为零
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    <%
//        1、值为null值的时候,为空
        request.setAttribute("emptyNull", null);
//        2、值为空串的时候,为空
        request.setAttribute("emptyStr", "");
//        3、值是Object类型数组,长度为零的时候
        request.setAttribute("emptyArr", new Object[]{});
//        4、list集合,元素个数为零
        List list = new ArrayList<>();
//        list.add("abc");
        request.setAttribute("emptyList", list);
//        5、map集合,元素个数为零
        Map map = new HashMap();
//        map.put("key1", "value1");
        request.setAttribute("emptyMap", map);
    %>
    ${ empty emptyNull } 
${ empty emptyStr }
${ empty emptyArr }
${ empty emptyList }
${ empty emptyMap }

${ 12 != 12 ? "对极了":"不对呀" }
  • 三元运算

表达式 1 ?表达式 2 :表达式 3 如果表达式 1 的值为真,返回表达式 2 的值,如果表达式 1 的值为假,返回表达式 3 的值。

 示例代码如下:

${ 12 != 12 ? "对极了":"不对呀" }
  • .点运算 和 [] 中括号运算符

  • “.”点运算,可以输出 Bean 对象中某个属性的值。
  • []中括号运算,可以输出有序集合中某个元素的值。
  • 并且[]中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    <%
        Map map = new HashMap();
        map.put("a.a.a", "aaaValue");
        map.put("b+b+b", "bbbValue");
        map.put("c-c-c", "cccValue");

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

        ${ map['a.a.a'] } 
${ map["b+b+b"] }
${ map['c-c-c'] }
1.5 EL 表达式的 11 个隐含对象

EL 个达式中 11 个隐含对象,是 EL 表达式中自己定义的,可以直接使用。

EL表达式的11个隐含有对象
        变量                  类型                                      作用
pageContext         PageContextImpl 它可以获取 jsp 中的九大内置对象
pageScope         Map 它可以获取 pageContext 域中的数据
requestScope         Map 它可以获取 Request 域中的数据
sessionScope         Map 它可以获取 Session 域中的数据
applicationScope         Map 它可以获取 ServletContext 域中的数据
param         Map 它可以获取请求参数的值
paramValues         Map 它也可以获取请求参数的值,获取多个值的时候使用。
header         Map 它可以获取请求头的信息
headerValues         Map 它可以获取请求头的信息,它可以获取多个值的情况
cookie         Map 它可以获取当前请求的 Cookie 信息
initParam         Map 它可以获取在 web.xml 中配置的 上下文参数
  •  EL 获取四个特定域中的属性
pageScope                 ======                 pageContext 域 requestScope             ======                 Request 域 sessionScope             ======                 Session 域 applicationScope        ======                 ServletContext 域

    <%
        pageContext.setAttribute("key1", "pageContext1");
        pageContext.setAttribute("key2", "pageContext2");
        request.setAttribute("key2", "request");
        session.setAttribute("key2", "session");
        application.setAttribute("key2", "application");
    %>
    ${ applicationScope.key2 }
  • pageContext 对象的使用 
1. 协议: 2. 服务器 ip 3. 服务器端口: 4. 获取工程路径: 5. 获取请求方法: 6. 获取客户端 ip 地址: 7. 获取会话的 id 编号:

    <%--
    request.getScheme() 它可以获取请求的协议
    request.getServerName() 获取请求的服务器ip或域名
    request.getServerPort() 获取请求的服务器端口号
    getContextPath() 获取当前工程路径
    request.getMethod() 获取请求的方式(GET或POST)
    request.getRemoteHost()  获取客户端的ip 地址
    session.getId() 获取会话的唯一标识
    --%>
    <%
        pageContext.setAttribute("req", request);
    %>
    <%=request.getScheme() %> 
1.协议: ${ req.scheme }
2.服务器ip:${ pageContext.request.serverName }
3.服务器端口:${ pageContext.request.serverPort }
4.获取工程路径:${ pageContext.request.contextPath }
5.获取请求方法:${ pageContext.request.method }
6.获取客户端ip地址:${ pageContext.request.remoteHost }
7.获取会话的id编号:${ pageContext.session.id }
  • EL 表达式其他隐含对象的使用 

   (1)与请求参数相关的2个EL表达式

param                Map      它可以获取请求参数的值 paramValues      Map   它也可以获取请求参数的值,获取多个值的时候用。
 
请求地址: http://localhost:8080/09_EL_JSTL/other_el_obj.jsp?username=wzg168&password=666666&hobby=java&hobby=cpp
   示例代码如下:
输出请求参数 username 的值:${ param.username } 
输出请求参数 password 的值:${ param.password }
输出请求参数 username 的值:${ paramValues.username[0] }
输出请求参数 hobby 的值:${ paramValues.hobby[0] }
输出请求参数 hobby 的值:${ paramValues.hobby[1] }

   (2)与获取请求头相关的2个EL表达式

header                    Map         它可以获取请求头的信息 headerValues         Map       它可以获取请求头的信息,它可以获取多个值的情况

 示例代码如下:

输出请求头【User-Agent】的值:${ header['User-Agent'] } 
输出请求头【Connection】的值:${ header.Connection }
输出请求头【User-Agent】的值:${ headerValues['User-Agent'][0] }

(3)获取cookie信息

cookie         Map         它可以获取当前请求的 Cookie 信息

 示例代码如下:

获取 Cookie 的名称:${ cookie.JSESSIONID.name } 
获取 Cookie 的值:${ cookie.JSESSIONID.value }

(4)获取web.xml中context-param参数

initParam     Map      它可以获取在 web.xml 中配置的上下文参数

 web.xml 中的配置:


     username 
     root 
 
 
     url 
     jdbc:mysql:///test 

示例代码如下:

输出<Context-param>username 的值:${ initParam.username } 
输出<Context-param>url 的值:${ initParam.url }

2. JSTL 标签库(次重点****) 2.1 JSTL标签库的概念

  • JSTL 标签库 全称是指 JSP Standard Tag Library JSP 标准标签库。是一个不断完善的开放源代码的 JSP 标 签库。
  • EL 表达式主要是为了替换 jsp 中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个 jsp 页面 变得更佳简洁。

jsp 标签库中使用 taglib 指令引入标签库 CORE 标签库 <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %> XML 标签库 <%@ taglib prefix = "x" uri = "http://java.sun.com/jsp/jstl/xml" %> FMT 标签库 <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %> SQL 标签库 <%@ taglib prefix = "sql" uri = "http://java.sun.com/jsp/jstl/sql" %> FUNCTIONS 标签库 <%@ taglib prefix = "fn" uri = "http://java.sun.com/jsp/jstl/functions" %>
2.2 JSTL 标签库的使用步骤 

步骤一:先导入 jstl 标签库的 jar 包。         taglibs-standard-impl-1.2.1.jar         taglibs-standard-spec-1.2.1.jar 步骤二:使用 taglib 指令引入标签库。         <%@ taglib prefix =" c " uri =" http://java.sun.com/jsp/jstl/core " %>
2.3 core 核心库使用
  • (使用很少)

 作用:set 标签可以往域中保存数据

<%--
    i.
        作用:set标签可以往域中保存数据

        域对象.setAttribute(key,value);
        scope 属性设置保存到哪个域
            page表示PageContext域(默认值)
            request表示Request域
            session表示Session域
            application表示ServletContext域
        var属性设置key是多少
        value属性设置值
    --%>
    保存之前:${ sessionScope.abc } 
保存之后:${ sessionScope.abc }
  •  

 if 标签用来做 if 判断。

 <%--
       ii.
         if标签用来做if判断。
         test属性表示判断的条件(使用EL表达式输出)
    --%>
    
        12等于12
    
    
        12不等于12
    
  •   标签

 作用:多路判断。跟 switch ... case .... default 非常接近

<%--
    iii.  标签
    作用:多路判断。跟switch ... case .... default非常接近

    choose标签开始选择判断
    when标签表示每一种判断情况
        test属性表示当前这种判断情况的值
    otherwise标签表示剩下的情况

      标签使用时需要注意的点:
        1、标签里不能使用html注释,要使用jsp注释
        2、when标签的父标签一定要是choose标签
    --%>
    <%
        request.setAttribute("height", 180);
    %>
    
        <%-- 这是html注释 --%>
        
            小巨人
        
         
            很高
        
        
            还可以
        
        
            
                
                    大于160
                
                
                    大于150
                
                
                    大于140
                
                
                    其他小于140
                
            
        
    
  •  

 作用:遍历输出使用。

 示例一:遍历 1 10,输出

 <%--
     1.遍历1到10,输出
        begin属性设置开始的索引
        end 属性设置结束的索引
        var 属性表示循环的变量(也是当前正在遍历到的数据)
        for (int i = 1; i < 10; i++)
--%>

    
            
第${i}行

示例二:遍历 Object 数组

<%-- 
    2.遍历Object数组
        for (Object item: arr)
        items 表示遍历的数据源(遍历的集合)
        var 表示当前遍历到的数据
--%>

    <%
        request.setAttribute("arr", new String[]{"18610541354","18688886666","18699998888"});
    %>
    
        ${ item } 

 示例三:遍历 Map 集合

    <%
        Map map = new HashMap();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
//        for ( Map.Entry entry : map.entrySet()) {
//        }
        request.setAttribute("map", map);
    %>
    
        ${entry.key} = ${entry.value}
    

示例四:

遍历 List 集合---list 中存放 Student 类,有属性:编号,用户名,密码,年龄, 电话信息

 Student 类:

package com.atguigu.pojo;

public class Student {
    //4.编号,用户名,密码,年龄,电话信息
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String phone;
}

示例代码如下:

 <%--4.遍历List集合---list中存放 Student类,有属性:编号,用户名,密码,年龄,电话信息--%>
    <%
        List studentList = new ArrayList();
        for (int i = 1; i <= 10; i++) {
            studentList.add(new Student(i,"username"+i ,"pass"+i,18+i,"phone"+i));
        }
        request.setAttribute("stus", studentList);
    %>
    
<%-- items 表示遍历的集合 var 表示遍历到的数据 begin表示遍历的开始索引值 end 表示结束的索引值 step 属性表示遍历的步长值 varStatus 属性表示当前遍历到的数据的状态 for(int i = 1; i < 10; i+=2) --%>
编号 用户名 密码 年龄 电话 *** 作
${stu.id} ${stu.username} ${stu.password} ${stu.age} ${stu.phone} ${status.step}

摘自:尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版_哔哩哔哩_bilibili0基础如何学起?宋红康30天搞定Java核心:BV1Kb411W75N一键三连呀【点赞、投币、收藏】呀~本视频涵盖核心技术点有:Servlet程序、Filter过滤器、Listener监听器、jsp页面、EL表达式、JSTL标签库、jQuery框架、Cookie技术、Session会话、JSON使用、Ajax请求,并在讲解知识点过程中会带领大家完成一个书城项目。相对于旧版,本版本使用idea进行开https://www.bilibili.com/video/BV1Y7411K7zz?p=191

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/795083.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-06
下一篇2022-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存