JavaWeb 速通 EL 和 JSTL

目录

一、EL表达式

        1.快速入门 : 

            1.1 基本介绍

            1.2 入门案例

        2.常用输出形式 : 

            2.1 创建JavaBean类

            2.2 创建JSP文件

        3.empty运算符 : 

            3.1 介绍

            3.2 实例

        4.EL对象 : 

            4.1 EL11个内置对象

            4.2 域对象演示

            4.3获取HTTP信息

二、JSTL标签库

        1.基本介绍 : 

        2.core核心库常用标签 : 

            2.1

            2.2

            2.3 

            2.4 /c:forEach>


一、EL表达式

        1.快速入门 : 

            1.1 基本介绍

         EL 表达式全称:Expression Language,是表达式语言
        EL 表达式的主要作用是代替JSP页面的表达式脚本 <% =request.getAttribute("...") %>

         EL 表达式基本语法: ${key},形式上比传统的JSP表达式脚本更简洁。

            1.2 入门案例

                以intro.jsp为例,代码如下 : 

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL expression</title>
</head>
<body>
    <%
        request.setAttribute("color", "pink");
    %>
    <%--
        PS : 若attribute为null,取出数据时,JSP方式返回"null",而EL表达式返回"".
     --%>
    <h1>传统JSP取出数据———</h1>
    color : <%= request.getAttribute("color") %> <br/>
    author : <%= request.getAttribute("author") %> <br><hr> <%--可使用三元运算符优化--%>

    <h1>采用EL表达式取出数据———</h1>
    color : ${color} <br/>
    author : ${author}
</body>
</html>

                运行结果 : 

        2.常用输出形式 : 

            2.1 创建JavaBean类

                Movie类代码如下 : 

package el;

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

/**
 * @author : Cyan_RA9
 * @version : 21.0
 * @what : 标准JavaBean类
 */
public class Movie {
    private String name;
    private int length;
    private List<String> platforms;
    private Map<String, String> comments;

    public Movie() {
    }

    public Movie(String name, int length, List<String> platforms, Map<String, String> comments) {
        this.name = name;
        this.length = length;
        this.platforms = platforms;
        this.comments = comments;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }

    public List<String> getPlatforms() {
        return platforms;
    }

    public void setPlatforms(List<String> platforms) {
        this.platforms = platforms;
    }

    public Map<String, String> getComments() {
        return comments;
    }

    public void setComments(Map<String, String> comments) {
        this.comments = comments;
    }

    @Override
    public String toString() {
        return "Movie{" +
                "name='" + name + '\'' +
                ", length=" + length +
                ", platforms=" + platforms +
                ", comments=" + comments +
                '}';
    }
}

            2.2 创建JSP文件

                output.jsp文件代码如下 : 

<%@ page import="el.Movie" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %><%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL output</title>
</head>
<body>
    <h1>输出Movie对象的信息</h1>
    <%
        Movie movie = new Movie();
        movie.setName("Matrix");
        movie.setLength(150);

        ArrayList<String> platforms = new ArrayList<>();
        platforms.add("Bilibili");
        platforms.add("YouTube");
        platforms.add("Youku");
        movie.setPlatforms(platforms);

        HashMap<String, String> comments = new HashMap<>();
        comments.put("Cyan", "It's a so nice film!");
        comments.put("Rain", "I like it!");
        comments.put("Ice", "Pretty good!");
        movie.setComments(comments);

        //将movie对象放入request域对象中
        request.setAttribute("movie", movie);
    %>
    <%-- 取出数据 --%>
    Movie.name = ${movie.name} <br/>
    Movie.length = ${movie.length} <br/>

    Movie.platforms = ${movie.platforms} <br/>
    Movie.platforms[2] = ${movie.platforms[2]} <br/>
    Movie.platforms[2] = ${movie.platforms.get(2)} <br/>

    Movie.comments = ${movie.comments} <br/>
    Movie.comments_Cyan = ${movie.comments.get("Cyan")} <br/>
    Movie.comments_Rain = ${movie.comments["Rain"]} <br/>
</body>
</html>

                运行结果 : 

        3.empty运算符 : 

            3.1 介绍

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

        2° 以下几种情况为空——
          
● value = null
          ● value = ""
          ● value = new Object[] {} (长度为0的Object数组)
          ● 元素个数为0 的List集合
          ● 元素个数为0 的Map集合

            3.2 实例

                empty.jsp代码如下 : 

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %><%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>empty expression</title>
</head>
<body>
    <%
        request.setAttribute("key1", null);
        request.setAttribute("key2", "");
        request.setAttribute("key3", new Object[]{});
        request.setAttribute("key4", new ArrayList<>());
        request.setAttribute("key5", new HashMap<>());
    %>
    <%-- 判断是否为空 --%>
    key1是否为空: ${empty key1} <br/>
    key2是否为空: ${empty key2} <br/>
    key3是否为空: ${empty key3} <br/>
    key4是否为空: ${empty key4} <br/>
    key5是否为空: ${empty key5}
</body>
</html>

                运行结果 : 

        4.EL对象 : 

            4.1 EL11个内置对象

                如下表格所示 : 

变量类型说明
pageContextPageContextImpl获取JSP中的九大内置对象
pageScopeMap<String, Object>获取pageContext域中的数据
requestScopeMap<String, Object>获取request域中的数据
sessionScopeMap<String, Object>获取Session域中的数据
applicationScopeMap<String, Object>获取ServletContext域中的对象
paramMap<String, String>获取请求参数的值
paramValuesMap<String, String[]>获取多个值
headerMap<String, String>获取请求头的信息
headerValuesMap<String, String[]>获取请求头的多个信息
cookieMap<String, Cookie>获取当前请求的Cookie信息
initParamMap<String, String>获取在web.xml中配置的<context-param>上下文参数

            4.2 域对象演示

                elScope.jsp代码如下 : 

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL scope</title>
</head>
<body>
    <%
        pageContext.setAttribute("color", "cyan");
        request.setAttribute("color", "pink");
        session.setAttribute("color", "cornflower_blue");
        application.setAttribute("color", "lightyellow");
    %>
    pageContext域_color = ${pageScope.color} <br/>
    request域_color = ${requestScope.color} <br/>
    session域_color = ${sessionScope.color} <br/>
    ServletContext域_color = ${applicationScope.color}
</body>
</html>

                运行结果 : 

            4.3获取HTTP信息

                http.jsp代码如下 : 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>pageContext demo</title>
</head>
<body>
<h1>pageContext对象获取HTTP信息</h1>
<hr/>
<%  //简化形式(将request域对象放入pageContext域中)——— JSP
    pageContext.setAttribute("req", request);
%>
协议: ${ pageContext.request.scheme }<br>
协议: ${ req.scheme }<br>
服务器 ip:${ req.serverName }<br>
服务器端口:${ req.serverPort }<br>
工程路径:${ req.contextPath }<br>
请求方法:${ req.method }<br>
客户端 ip 地址:${ req.remoteHost }<br>
会话 id :${ pageContext.session.id }<br>
</body>
</html>

                运行结果 : 


二、JSTL标签库

        1.基本介绍 : 

         JSTL标签库是指 JSP Standard Tag Library,即JSP标准标签库。

        EL 表达式是为了替换JSP中的表达式脚本<%=%>, JSTL 是为了替换JSP中的代码脚本<%%>
        JSTL 由五个标签库组成——
功能范围URI前缀
核心标签库http://java.sun.com/jsp/jstl/corec
格式化http://java.sun.com/jsp/jstl/fmtfmt
函数http://java.sun.com/jsp/jstl/functionsfn
数据库(不使用http://java.sun.com/jsp/jstl/sqlsql
XML(不使用http://java.sun.com/jsp/jstl/xmlx

        使用JSTL需要导入jar包(impl 和 spec),PS : Tomcat10版本对jar包的依赖有变化(jakarta)导入jar包后要重新启动Tomcat。下载jar包的网址如下 : 

Apache Taglibs - Apache Standard Taglib: JSP[tm] Standard Tag Library (JSTL) implementations

         taglib引入标签,要放在行首

        2.core核心库常用标签 : 

            2.1 <c:set></c:set>

        (1) <c:set></c:set> 标签可以向域中保存数据,等价于——域对象.setAttribute(key,value);

        (2)   scope 属性设置保存到哪个域
                page 表示 PageContext 域(默认值)
                request 表示 Request
                session 表示 Session
                application 表示 ServletContext
        (3) var 属性用于设置 key(键)
        (4) value 属性用于设置 value(值)

            2.2 <c:if></c:if>

        (1) <c:if></c:if>标签用来做 if 判断。
        (2) 其中的test 属性表示判断的条件 (用 EL 表达式输出)

            2.3 <c:choose> <c:when> <c:otherwise>

        (1) 使用格式如下——

< c :choose >
        < c :when test =" ${ requestScope .score   >=  90  } " >
                <h1>牛逼~</h1>
        </ c :when >
        < c :when test =" ${ requestScope . score  >= 80   } " >
                <h1>还不错~</h1>
        </ c :when >
        < c :otherwise >
                <h1>飞舞!</h1>
        </ c :otherwise >
</ c :choose >
        (2) 如果使用EL表达式取数据时,没有指定域范围,默认是从小到大找。

            2.4 <c : forEach>/c:forEach>

        (1) <c:forEach></c:forEach>标签用来 遍历输出, 主要有以下四种遍历形式——
                ● 普通遍历输出 i 到 j (前闭后闭)
                ● 遍历数组
                ● 遍历 Map
                ● 遍历 List
        (2) 相关属性——
                1> 普通遍历 :
                        begin 属性设置开始的索引
                        end 属性设置结束的索引
                        step 属性表示遍历的步长值
                        var 属性表示循环的变量(也是当前正在遍历到的数据)
                2> 遍历数组 : 

                        items 遍历的集合
                        var 遍历到的数据 (类似于增强for;输出时会自动锁定所在域

                        eg : 
                        <%
                                request.setAttribute("books", new String[]{"哈利波特", "指环王"});
                        %>
                        <c:forEach items ="${requestScope.books}" var ="book">
                                bookName = ${book} <br/>
                        </c:forEach>
                3> 遍历Map集合 :
                        eg : 
                        <%
                                Map<String, String> students = new HashMap<>();
                                map.put("Cyan", "425");
                                map.put("Rain", "400");
                                map.put("Ice", "430");
                                request.setAttribute("students", students);
                        %>
                        <c:forEach items="${requestScope.students}" var="student">
                                Student's Info = ${student.key} --- ${student.value} <br/>
                        </c:forEach>
                4> 遍历List集合 : 
                        Δ遍历List集合与遍历Map集合时的步骤类似,都像Java 中的增强for循环结构。
                        varStatus 属性表示当前遍历到的数据的状态,可以得到 step,begin,end 等属性值
                        PS : 需要对应的JavaBean类提供相应的getXxx方法

        System.out.println("END----------------------------------------------------------------------------------------------------------------------");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/77494.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

corosync+pacemaker+nfs配置简单高可用

环境准备&#xff1a; 每个节点提供20G共享存储 web1192.168.134.176node7web2192.168.134.177node8 一、准备web环境&#xff08;两台web测试机都要准备&#xff09; yum install httpd -y echo " web test page ,ip is hostname -I." > /var/www/html/index…

【QT+ffmpeg】QT+ffmpeg 环境搭建

1.qt下载地址 download.qt.io/archive/ 2. win10sdk 下载 https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/ 安装 debug工具路径 qtcreater会自动识别 调试器选择

OpenAI全球招外包大军,手把手训练ChatGPT取代码农 ; 码农:我自己「杀」自己

目录 前言 OpenAI招了一千多名外包人员&#xff0c;训练AI学会像人类一样一步步思考。如果ChatGPT「学成归来」&#xff0c;码农恐怕真的危了&#xff1f; 码农真的危了&#xff01; 当时OpenAI也说&#xff0c;ChatGPT最合适的定位&#xff0c;应该是编码辅助工具。 用Cha…

【学会动态规划】等差数列划分(22)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

easyx图形库基础:2.基本运动+键盘交互

基本运动键盘交互 一.基本运动1.基本运动&#xff1a;1.如何实现动画&#xff1a;2.实现一个小球从左到右从右到左&#xff1a;&#xff08;往返运动&#xff09;3.实现一个五角星的移动&#xff1a;4.实现一个五角星自转和圆周运动的集合&#xff1a;&#xff08;圆周运动&…

Opencv4基于C++基础入门笔记:图像 颜色 事件响应 图形 视频 直方图

效果图◕‿◕&#xff1a;opencv人脸识别效果图(请叫我真爱粉)✌✌✌先看一下效果图勾起你的兴趣&#xff01; 文章目录&#xff1a; 一&#xff1a;环境配置搭建 二&#xff1a;图像 1.图像读取与显示 main.cpp 运行结果 2.图像色彩空间转换 2.1 换色彩 test.h t…

java八股文面试[java基础]——String StringBuilder StringBuffer

String类型定义&#xff1a; final String 不可以继承 final char [] 不可以修改 String不可变的好处&#xff1a; hash值只需要算一次&#xff0c;当String作为map的key时&#xff0c; 不需要考虑hash改变 天然的线程安全 知识来源&#xff1a; 【基础】String、StringB…

latex 笔记:cs论文需要的排版格式

主要针对英文文献 1 基本环境 连字符 不同长度的"-"表示不同含义。 一个"-"长度的连字符用于词中两个"-"长度的连字符常用于制定范围三个"-"长度的连字符是破折号数学中的负数要用数学环境下的-得到 强调 在正式文章中, 通常不…

探索区块链世界:去中心化应用(DApp)的崭新前景

随着科技的不断发展&#xff0c;区块链技术逐渐引领着数字时代的潮流。在这个充满创新和变革的领域中&#xff0c;去中心化应用&#xff08;DApp&#xff09;成为了备受瞩目的焦点。DApp 不仅改变了传统应用程序的范式&#xff0c;还在金融、社交、游戏等多个领域展现出了广阔的…

File Upload

File Upload 文件上传功能是大部分WEB应用的常用功能&#xff0c;网站允许用户自行上传头像、照片、一些服务类网站需要用户上传证明材料的电子档、电商类网站允许用户上传图片展示商品情况等。然而&#xff0c;看似不起眼的文件上传功能如果没有做好安全防护措施&#xff0c;…

【数理知识】向量与基的内积,Matlab 代码验证

序号内容1【数理知识】向量的坐标基表示法&#xff0c;Matlab 代码验证2【数理知识】向量与基的内积&#xff0c;Matlab 代码验证 文章目录 1. 向量与基的内积2. 二维平面向量举例3. 代码验证Ref 1. 向量与基的内积 假设存在一个二维平面内的向量 a ⃗ \vec{a} a &#xff0c…

具身智能:人工智能的下一个浪潮

原创 | 文 BFT机器人 特斯拉 2023 年股东会上&#xff0c;马斯克强调了人形机器人对特斯拉未来的重要性&#xff0c;并预测其将成为公司的主要长期价值来源。他进一步表示&#xff1a;“如果人形机器人和人的比例大致为2比1&#xff0c;那么人们对机器人的需求可能达到100亿乃…

W5100S-EVB-PICO 做UDP Server进行数据回环测试(七)

前言 前面我们用W5100S-EVB-PICO 开发板在TCP Client和TCP Server模式下&#xff0c;分别进行数据回环测试&#xff0c;本章我们将用开发板在UDP Server模式下进行数据回环测试。 UDP是什么&#xff1f;什么是UDP Server&#xff1f;能干什么&#xff1f; UDP (User Dataqram …

爬虫逆向实战(十三)--某课网登录

一、数据接口分析 主页地址&#xff1a;某课网 1、抓包 通过抓包可以发现登录接口是user/login 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现有一个password加密参数&#xff0c;还有一个browser_key这个可以写死不需要关心 请求头…

【Image captioning】ruotianluo/self-critical.pytorch之1—数据集的加载与使用

【Image captioning】ruotianluo/self-critical.pytorch之1—数据集的加载与使用 作者&#xff1a;安静到无声 个人主页 数据加载程序示意图 使用方法 示例代码 #%%from __future__ import absolute_import from __future__ import division from __future__ import print_…

导读-Linux简介

Linux简介 ​ 总所周知&#xff0c;计算机系统包含硬件和软件两部分。硬件部分被称为裸机&#xff0c;主要包括中央处理器&#xff08;CPU&#xff09;、内存、外存和各种外部设备。软件部分主要包括系统软件和应用软件两部分。系统软件包括操作系统、汇编语言、编译程序、数据…

AD域控制器将辅域控制器角色提升为主域控制器

背景 域控服务器迁移&#xff0c;已将新机器添加为该域的辅域控制器。 主域控制器&#xff1a;test-dc-01 辅域控制器&#xff1a;test-dc-02 需求将主辅域的角色进行互换&#xff0c;test-dc-01更换为辅域&#xff0c;test-dc-02更换为主域。 操作步骤 方法1 命令行修改AD域…

2023国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

ubuntu16编译内核源码并替换

文章目录 1.找到和ubuntu内核版本相同的内核源码包2.下载下面三个文件3.相关步骤4.安装编译环境软件参考&#xff1a; 1.找到和ubuntu内核版本相同的内核源码包 4.15.0-112.113 : linux package : Ubuntu (launchpad.net) 2.下载下面三个文件 3.相关步骤 uname -r #查看内核…

python3实现线性规划求解

Background 对于数学规划问题&#xff0c;有很多的实现。MatlabYALMIPCPLEX这个组合应该是比较主流的&#xff0c;尤其是在电力相关系统中占据着比较重要的地位。MATLAB是一个强大的数值计算工具&#xff0c;用于数学建模、算法开发和数据分析。Yalmip是一个MATLAB工具箱&#…