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

  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/frankruby/p/14955733.html
Copyright © 2011-2022 走看看