• 【JavaWeb EL表达式&JSTL标签库 09】


    一、EL表达式

    1、什么是EL表达式,表达式的作用是什么

    EL表达式的全称是:Expression language  表达式语言

    作用:EL表达式代替jsp页面中的表达式脚本在jsp页面中进行数据的输出。

    #举例演示 EL表达式和jsp的区别:

    <%--
      Created by IntelliJ IDEA.
      User: wufq
      Date: 2021/6/30
      Time: 16:41
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <% request.setAttribute("key","value");%>
    
        jsp输出表达式的值:<%=request.getAttribute("key")%><br>
        EL输出表达式的值:${key}
    </body>
    </html>

    执行结果:

    jsp输出表达式的值:value
    EL输出表达式的值:value

    从执行结果看,效果是一样的,但是代码量EL表达式要少许多

    并且如果获取的值不存在时,EL输出的是空串,jsp表达式脚本输出null值

    EL表达式格式:${表达式}

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

    EL表达式主要是在jsp页面中输出数据。主要是输出域对象中的数据

    当四个域(pageContext,request,session,application)中都有相同的key的数据的时候,EL表达式会按照四个域的从小到大的顺序取进行搜索,找到 就输出

    3、EL表达式输出Bean(一个类就是一个bean对象)的普通属性,数组属性,List集合属性,map集合属性

    #案例演示:需求:输出Person类中普通属性,数组属性,list集合属性和map集合属性

    Person类

    public class Person {
        private String name;
        private String[] phones;
        private List<String> citis;
        private Map<String,Object> map;
    
        public int getAge(){
            return 18;
        }

    testPerson.jsp代码

    <%@ page import="com.wufq.el.Person" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page import="java.util.List" %>
    <%@ page import="java.util.Map" %>
    <%@ page import="java.util.HashMap" %><%--
      Created by IntelliJ IDEA.
      User: wufq
      Date: 2021/6/30
      Time: 17:10
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            Person person = new Person();
            person.setName("El真好");
            person.setPhones(new String[]{"110","119","120"});
    
            List<String> list_city = new ArrayList<>();
            list_city.add("北京");
            list_city.add("上海");
            list_city.add("深圳");
            person.setCitis(list_city);
    
            Map<String,Object> maps = new HashMap<>();
            maps.put("key1","value1");
            maps.put("key2","value2");
            maps.put("key3","value3");
            person.setMap(maps);
    
            request.setAttribute("p",person);
        %>
    
        输出Person对象:${p}<br>
        输出person的name属性:${p.name}<br>
        输出Person的phone数组属性:${p.pphones[2]}<br>
        输出Person的city集合的元素值:${p.citis}<br>
        输出Person的city集合内的个别元素值:${p.citis[2]}<br>
        输出Person的map集合内的元素值:${p.map}<br>
        输出Person的map集合内的个别元素值:${p.map.key2}<br>
        输出Person的age属性:${p.age}<br>
    
    </body>
    </html>

    3、EL表达式 -- 运算

    语法:${运算表达式}

    1)关系运算

     2)逻辑运算

     3)算数运算

     4)empty运算

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

    5)三元运算

    表达式1?表达式2:表达式3

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

    6).运算和[]运算符

    点运算,可以输出bean对象中某个属性的值

    []运算,可以输出有序集合中某个元素的值,并且[]中括号运算,还可以输出map集合中key里含有特殊字符的key的值

    例如:

    map.put("aaa","value");
    request.setAttribute("map",map);
    ${map.aaa}  ===>value
    如果map.put("a.a.a","value"); key中有特殊字符。这时候就不能直接用点运算了,必须用[]来设置了
    ${map['a.a.a']}  ===>value

    7、EL表达式的11个隐含对象

    EL表达式中11个隐含对象,是EL表达式中自定定义的,可以直接使用(类似jsp内的9大内置对象,可以直接使用)

     7.1 EL获取四个特定域中的属性

    <%
        pageContext.setAttribute("key1","pageContext1");
        pageContext.setAttribute("key2","pageContext2");
        request.setAttribute("key1","request");
        session.setAttribute("key1","session");
        application.setAttribute("key1","application");
    %>
    
        ${pageScope.key2}<br>
        ${requestScope.key1}<br>
        ${sessionScope.key1}<br>
        ${applicationScope.key1}<br>

    7.2 pageContext对象的使用

    • 获取协议
    • 获取服务器IP
    • 获取端口
    • 获取工程路径
    • 获取请求方式
    • 获取客户端IP地址
    • 获取会话的id编号

    7.3 EL表达式其他隐含对象的使用

    param   Map<String,String>  获取请求参数的值

    paramValues   Map<String,String[]>  获取请求参数的值,获取多个值的时候使用

     header   Map<String,String>   获取请求头的信息

    headerValues   Map<String,String[]>  获取请求头的信息,可以获取多个值的情况

     cookie   Map<String,String>   获取当前请求的Cookie信息

     initParam  Map<String,String>   获取web.xml中配置的<context-param>上下文参数

    二、JSTL标签库(重点***

    JSTL标签库是一个不断完善的开放源代码的jsp标签库

    EL表达式主要是为了替换jsp中的表达式脚本,而JSTL标签库是为了替换代码脚本。这样使得整个jsp页面变的更加简洁

    JSTL由5个不同功能的标签库组成

    1、标签库的使用步骤

    第一步:先导入jstl标签库的jar包  -->并引入

    第二步:使用taglib指令引入标签库

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

    2、<c:if/>  if标签来做判断

     <%--test属性表示判断的条件(使用EL表达式输出)--%>
        <c:if test="${12==12}">
            <h1>12等于12</h1>
        </c:if>

    3、<c:choose><c:when><c:otherwise>标签   多路判断,跟switch...case...default非常接近

    choose 标签开始选择判断

    when标签表示每一种判断情况

      test属性表示当前这种判断情况的值

    otherwise标签表示剩下的情况

    <% request.setAttribute("high",180);%>
            
        <c:choose>
            <c:when test="${requestScope.high >190}">
                <h2>小巨人</h2>
            </c:when>
            <c:when test="${requestScope.high =180}">
                <h2>很高</h2>
            </c:when>
            <c:when test="${requestScope.high <180}">
                <h2>太低</h2>
            </c:when>
            <c:otherwise>
                <c:choose>
                <c:when test="${requestScope.high >160}">
                <h3>大于160</h3>
                 </c:when>
                <c:when test="${requestScope.high =160}">
                <h3>等于160</h3>
                </c:when>
                <c:when test="${requestScope.high <160}">
                <h3>小于160</h3>
                </c:when>
            </c:choose>
            </c:otherwise>
    
        </c:choose>

    4、<c:forEach/> 遍历输出

    遍历数组

     遍历map集合

     遍历对象类的list集合

    三、文件的上传和下载

    1、文件上传

    步骤:

    1. 要有一个form标签,method=post请求
    2. form标签的encType属性值必须是multipart/form-data值
    3. 在form标签中使用input type=file添加上传的文件
    4. 编写服务器代码(Servlet程序)接收,处理上传的数据

    encType=multipart/form-data 表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼接,然后已二进制的形式发送给服务器

  • 相关阅读:
    css中优先级与层叠
    微服务通过feign.RequestInterceptor传递参数
    maven详解
    Java8新特性interface中的static方法和default方法
    设计模式六大原则---转
    MySQL主从复制作用和原理
    Mysql Binlog三种格式详细介绍
    分布式主键生成逻辑总结--转
    java幂等性的解决方案
    spring事务的传播机制新解
  • 原文地址:https://www.cnblogs.com/frankruby/p/14955733.html
Copyright © 2020-2023  润新知