zoukankan      html  css  js  c++  java
  • EL和JSTL核心技术

    一、El表达式(熟悉)

    1、基本概念

    • EL(Expression Language)表达式提供了在JSP中简化表达式的方法,可以方便地访问各种数据并输出。

    2、主要功能

    • 依次访问pageContext、request、session和application作用
    • 域对象存储的数据。
    • 获取请求参数值。
    • 访问Bean对象的属性。
    • 访问集合中的数据。
    • 输出简单的运算结果。
    <%--
      Created by IntelliJ IDEA.
      User: Soldier
      Date: 2021/8/17
      Time: 14:37
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现从内置对象中获取数据并打印</title>
    </head>
    <body>
    <%
        /*pageContext.setAttribute("name1", "pageContext对象中的属性值:赵云");
        request.setAttribute("name2", "request对象中的属性值:吕布");
        session.setAttribute("name3", "session对象中的属性值:典韦");
        application.setAttribute("name4", "application对象中的属性值为:马超");*/
    
        session.setAttribute("name", "session对象中的属性值:典韦");
        request.setAttribute("name", "request对象中的属性值:吕布");
        application.setAttribute("name", "application对象中的属性值为:马超");
        pageContext.setAttribute("name", "pageContext对象中的属性值:赵云");
    %>
    <%--使用jsp中原始方式获取数据并打印--%>
    <%--<%= "name1的数值为:" + pageContext.getAttribute("name1") %><br/>
    <%= "name2的数值为:" + request.getAttribute("name2") %><br/>
    <%= "name3的数值为:" + session.getAttribute("name3") %><br/>
    <%= "name4的数值为:" + application.getAttribute("name4") %><br/>--%>
    
    <%-- 使用EL表达式十三年获取数据和打印 --%>
    <%--<h1>name1的数值为:${name1}</h1><br/>
    name2的数值为:${name2}<br/>
    name3的数值为:${name3}<br/>
    name4的数值为:${name4}<br/>--%>
    <%--当name值相同时:依次访问pageContext、request、session和application作用--%>
    name的数值为:${name} <%-- 输出:pageContext对象中的属性值:赵云 --%>
    </body>
    </html>
    
    

    3、访问内置对象的数据

    1.访问方式

    • <%=request.getAttribute(“ varName”)%>
    • 用EL实现: ${ varName }

    2.执行流程

    image-202108161520508754、访问请求参数的数据

    • 在EL之前使用下列方式访问请求参数的数据
      request.getParameter(name);
      request.getParameterValues(name);
    • 在EL中使用下列方式访问请求参数的数据
      param:接收的参数只有一个值。
      paramValues:接受的参数有多个值。
    <!-- 获取指定参数的数值 -->
    ${param.name}
    <!-- 获取指定参数中指定下标的数值 -->
    ${paramValues.hobby[0]}
    

    5、访问Bean对象的属性

    1.访问方式

    • 方式一: $ { 对象名 . 属性名 },例如:${user.name}
    • 方式二: $ { 对象名 [“属性名”] },例如:$​{user["name"]}

    2.主要区别

    • 当要存取的属性名中包含一些特殊字符,如: . 或 ,等并非字母或数字的符号,就一定要使用 [ ]而不是.的方式
    • 使用[]的方式可以动态取值,具体方式如下:
    <%
        request.setAttribute(“prop”,“age”);
    %>
    <!-- 相当于表达式中写一个变量 -->
    ${ user[prop] }
    
    <%@ page import="com.soldier.demo.Person" %><%--
      Created by IntelliJ IDEA.
      User: Soldier
      Date: 2021/8/17
      Time: 15:29
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现bean对象中属性的获取和打印</title>
    </head>
    <body>
    <%-- 使用JSP语法规则中的原始方式实现对象的创建、设置以及输出 --%>
    <%
        Person person = new Person();
        person.setName("吕布");
        person.setAge(30);
        pageContext.setAttribute("person", person);
    
        /*pageContext.setAttribute("var", "name");*/
        pageContext.setAttribute("var", "age");
    %>
    <%--<%= "获取到的姓名为:" + person.getName() %><br/>
    <%= "获取到的年龄为:" + person.getAge() %><br/>--%>
    
    <%-- 使用El表达式实现属性的获取并打印 --%>
    <%--获取到的姓名为:${person.name}<br/>
    获取到的年龄为:${person.age}<br/>--%>
    <%-- 另一种方式--%>
    姓名:${person["name"]}<br/>
    年龄:${person["age"]}<br>
    
    <%-- 测试一下动态取值的效果 --%>
    <%--动态取值的结果为:${person[var]} &lt;%&ndash; 输出:吕布 &ndash;%&gt;--%>
    动态取值的结果为:${person[var]} <%-- 输出:30 --%>
    </body>
    </html>
    
    

    6、访问集合中的数据

    <!-- student为ArrayList类型的对象 -->
    ${student[0].name}
    
    <%@ page import="java.util.List" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page import="java.util.Map" %>
    <%@ page import="java.util.HashMap" %><%--
      Created by IntelliJ IDEA.
      User: Soldier
      Date: 2021/8/17
      Time: 17:01
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现集合中的数据获取和打印</title>
    </head>
    <body>
    <%
        // 准备一个集合添加数据内容
        List<String> list = new ArrayList();
        list.add("two");
        list.add("one");
        list.add("three");
    
        // 将整个集合放入指定的内置对象中
        pageContext.setAttribute("list", list);
    
        // 准备一个Map集合并添加数据
        Map<String, Integer> map = new HashMap<>();
        map.put("one", 1);
        map.put("two", 2);
        map.put("th.ree", 3);
    
        // 将整个Map集合放入指定的内置对象中
        pageContext.setAttribute("map", map);
    %>
    
    <%-- 使用EL表达式实现集合中数据内容的获取 --%>
    集合中下标为0的元素为:${list[0]}<br/>
    集合中下标为1的元素为:${list[1]}<br/>
    集合中下标为2的元素为:${list[2]}<br/>
    
    <hr/>
    
    map集合中所有元素为:${map}<br/>
    获取带有特殊字符key的map:${map["th.ree"]}<br/>
    
    </body>
    </html>
    
    

    7、常用的内置对象

    image-20210816152408577

    8、常用的运算符

    1.常用的算术运算符

    image-20210816152451187

    2.常用的关系运算符

    image-20210816152511988

    3.常用的逻辑运算符

    image-20210816152541870

    4.条件运算符

    ${条件表达式? 语句1 : 语句2} 
    

    5.验证运算符

    ${empty 表达式}
    返回布尔值判断表达式是否为"空"值,null值、无元素的集合或数组、长度为零的String被认为是空值。
    

    二、JSTL标签(熟悉)

    1、基本概念

    • JSTL( JSP Standard Tag Library ) 被称为JSP标准标签库。
    • 开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。

    2、使用方式

    <!-- prefix属性用于指定库前缀 -->
    <!-- uri属性用于指定库的标识 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

    3、常用的核心标签

    1.输出标签

    <c:out></c:out> 用来将指定内容输出的标签
    
    <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
    <%--
      Created by IntelliJ IDEA.
      User: Soldier
      Date: 2021/8/18
      Time: 15:39
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现out输出标签的使用</title>
    </head>
    <body>
    <c:out value="Hello World"></c:out>
    </body>
    </html>
    
    

    2.设置标签

    <c:set></c:set> 用来设置属性范围值的标签
    
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%--
      Created by IntelliJ IDEA.
      User: Soldier
      Date: 2021/8/18
      Time: 16:07
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现set标签的使用</title>
    </head>
    <body>
    <%-- 设置一个名字为name的属性,对应的数值为赵云,有效范围page--%>
    <%-- pageContext.setAttibute("name", "赵云") --%>
    <c:set var="name" value="赵云" scope="page"></c:set>
    <%-- 使用out标签打印出来 --%>
    <c:out value="${name}"></c:out>
    
    <hr/>
    <%-- 设置一个对象的属性值并打印出来 --%>
    <jsp:useBean id="person" class="com.soldier.demo.Person" scope="page"></jsp:useBean>
    <c:set property="name" value="吕布" target="${person}"></c:set>
    <c:set property="age" value="30" target="${person}"></c:set>
    
    <c:out value="${person.name}"></c:out><br/>
    <c:out value="${person.age}"></c:out><br/>
    </body>
    </html>
    
    

    3.删除标签

    <c:remove></c:remove> 用来删除指定数据的标签
    
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%--
      Created by IntelliJ IDEA.
      User: Soldier
      Date: 2021/8/18
      Time: 16:36
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现remove标签的使用</title>
    </head>
    <body>
    <%-- 设置一个属性值并打印 --%>
    <jsp:useBean id="person" class="com.soldier.demo.Person" scope="page"></jsp:useBean>
    <c:set property="name" value="典韦" target="${person}"></c:set>
    <c:set property="age" value="35" target="${person}"></c:set>
    
    属性name值为:<c:out value="${person.name}"></c:out><br/>
    属性age值为:<c:out value="${person.age}"></c:out><br/>
    
    <hr/>
    <%-- 删除属性值后并打印 --%>
    <c:remove var="person"></c:remove>
    
    删除后属性name值为:<c:out value="${person.name}"></c:out><br/>
    删除后属性name值为:<c:out value="${person.age}"></c:out><br/>
    </body>
    </html>
    
    

    4.单条件判断标签

    <c:if test =“EL条件表达式”>
        满足条件执行
    </c:if >
    
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%--
      Created by IntelliJ IDEA.
      User: Soldier
      Date: 2021/8/18
      Time: 16:50
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现if标签的使用</title>
    </head>
    <body>
    <%-- 设置一个变量已经对应的数值 --%>
    <c:set var="age" value="17"></c:set>
    <c:out value="${age}"></c:out>
    <hr/>
    <c:if test="${age >= 18}">
        <c:out value="已经成年"></c:out>
    </c:if>
    </body>
    </html>
    
    

    5.多条件判断标签

    <c:choose >
        <c:when test =“EL表达式”>
            满足条件执行
        </c:when>
        …
        <c:otherwise>
            不满足上述when条件时执行
        </c:otherwise>
    </c:choose >
    
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%--
      Created by IntelliJ IDEA.
      User: Soldier
      Date: 2021/8/18
      Time: 16:56
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现choose标签的使用</title>
    </head>
    <body>
    <c:set var="score" value="95"></c:set>
    <c:out value="${score}"></c:out><br/>
    <hr/>
    <%-- 实现choose考试成绩的判断 --%>
    <c:choose>
        <c:when test="${score < 60 }">
            <c:out value="不及格"></c:out><br/>
        </c:when>
        <c:when test="${score >= 60 && score < 75}">
            <c:out value="及格"></c:out><br/>
        </c:when>
        <c:when test="${score>=75 && score<90}">
            <c:out value="良好"></c:out><br/>
        </c:when>
        <c:otherwise>
            <c:out value="优秀"></c:out><br/>
        </c:otherwise>
    </c:choose>
    </body>
    </html>
    
    

    6.循环标签

    <c:forEach var=“循环变量” items=“集合”>
        …
    </c:forEach>
    
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%--
      Created by IntelliJ IDEA.
      User: Soldier
      Date: 2021/8/18
      Time: 17:05
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现循环标签的使用</title>
    </head>
    <body>
    <%
        // 准备一个数组并初始化
        String[] sArr = {"11", "22", "33", "44", "55"};
        pageContext.setAttribute("sArr", sArr);
    %>
    
    <%-- 使用for循环标签遍历数组中所有元素 --%>
    <c:forEach var="ts" items="${sArr}">
        <c:out value="${ts}"></c:out><br/>
    </c:forEach>
    
    <hr/>
    <%-- 跳跃性遍历 --%>
    <c:forEach var="ts" items="${sArr}" step="2">
        <c:out value="${ts}"></c:out><br/>
    </c:forEach>
    
    <hr/>
    <%-- 指定起始位置循环 --%>
    <c:forEach var="ts" items="${sArr}" begin="1" end="3">
        <c:out value="${ts}"></c:out><br/>
    </c:forEach>
    </body>
    </html>
    
    

    4、常用的函数标签

    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    <%--
      Created by IntelliJ IDEA.
      User: Soldier
      Date: 2021/8/18
      Time: 17:18
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现常用函数的使用</title>
    </head>
    <body>
    <%
        pageContext.setAttribute("var", "Hello World!");
    %>
    原始字符串为:${var}<br/> <%-- Hello World --%>
    判断该字符串是否包含自定字符串的结果为:${fn:contains(var, "Hello")}<br/> <%-- true --%>
    将字符串中所有字符转换为大写的结果为:${fn:toUpperCase(var)}<br> <%-- HELLO WORLD! --%>
    将字符串中所有字符转换为小写的结果为:${fn:toLowerCase(var)}<br> <%-- hello world! --%>
    </body>
    </html>
    
    

    5、常用格式化标签

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%@ page import="java.util.Date" %><%--
      Created by IntelliJ IDEA.
      User: Soldier
      Date: 2021/8/18
      Time: 18:01
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现格式标签的使用</title>
    </head>
    <body>
    <%
        // 获取当前系统时间
        Date date = new Date();
        pageContext.setAttribute("date", date);
    %>
    当前系统时间为:${date}<br/>
    <hr>
    格式化后的当前系统时间:<fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate><br/>
    </body>
    </html>
    
    

    6、自定义标签

    • 如果上面几个标签不能满足需求,程序员也可以自定义标签,步骤如下:
    • 编写标签类继承SimpleTagSupport类或TagSupport类并重写doTag方法或doStartTag方法。
    public class HelloTag extends SimpleTagSupport {
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        @Override
        public void doTag() throws JspException, IOException {
            JspWriter out = this.getJspContext().getOut();
            out.println("自定义标签的参数为:" + name);
        }
    }
    
    • 定义标签库文件(tld标签库文件)并配置标签说明文件到到WEB-INF下:
    <tag>
        <name>helloTag</name>
        <tag-class>com.lagou.demo02.HelloTag</tag-class>
        <body-content>empty</body-content>
        <attribute>
            <name>name</name>
            <required>true</required>
        </attribute>
    </tag>
    
    • 在JSP中添加taglib指令引入标签库使用:
    <%@ taglib prefix="hello" uri="http://lagou.com" %>
    

    本文来自博客园,作者:寒露凝珠,转载请注明原文链接:https://www.cnblogs.com/china-soldier/p/15158274.html

  • 相关阅读:
    数据仓库中的几种数据模型
    数据仓库为什么要分层
    数据仓库的两种建模方法
    数据仓库之架构发展
    数据仓库是什么
    ETL 自动化测试框架
    大数据测试之ETL测试工具和面试常见的问题及答案
    Hadoop面试链接
    Hadoop 面试总结
    Spark 基本架构及原理
  • 原文地址:https://www.cnblogs.com/china-soldier/p/15158274.html
Copyright © 2011-2022 走看看