【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 表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼接,然后已二进制的形式发送给服务器

原文地址:https://www.cnblogs.com/frankruby/p/14955733.html