EL表达式与JSTL

news2025/1/11 18:07:52

1.EL表达式

1.EL表达式概述

EL(Expression Language):表达式语言

在 JSP 2.0 规范中加入的内容,也是 Servlet 规范的一部分

作用:在 JSP 页面中获取数据。让我们的 JSP 脱离 java 代码块和 JSP 表达式

语法:${ 表达式内容 }

EL表达式快速入门

1.创建一个web项目

2.在web目录下创建el01.jsp

3.在文件中向域对象添加数据

4.使用三种方式获取域对象中的数据(java代码块,jsp表达式,EL表达式)

5.部署并启动项目

6.通过浏览器测试

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL表达式快速入门</title>
</head>
<body>
    <%--1.向域对象中添加数据--%>
    <% request.setAttribute("username","zhangsan"); %>

    <%--2.获取数据--%>
    Java代码块:<% out.println(request.getAttribute("username")); %> <br>

    JSP表达式:<%= request.getAttribute("username")%> <br>

    EL表达式:${username}
</body>
</html>

2.EL表达式获取数据 

1.获取基本数据类型的数据

2.获取自定义对象类型的数据

3.获取数组类型的数据

4.获取List集合类型的数据

5.获取Map集合类型的数据

<%@ page import="bean.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL表达式获取不同类型数据</title>
</head>
<body>
    <%--获取基本数据类型--%>
    <% pageContext.setAttribute("num",10); %>
    基本数据类型: ${num} <br>
    <%--获取自定义对象类型--%>
    <%--提前创建一个Student类--%>
    <%
      Student stu = new Student("张三",23);
      pageContext.setAttribute("stu",stu);
    %>
    自定义对象: ${stu} <br>
    <%--stu.name实现原理 getName()--%>
    学生姓名: ${stu.name}
    学生年龄: ${stu.age} <br>
    <%--获取数组类型--%>
    <%
      String[] arr = {"hello","world"};
      pageContext.setAttribute("arr",arr);
    %>
    数组: ${arr} <br>
    0索引元素: ${arr[0]} <br>
    1索引元素: ${arr[1]} <br>
    <%--获取List集合--%>
    <%
      ArrayList<String> list = new ArrayList<>();
      list.add("aaa");
      list.add("bbb");
      pageContext.setAttribute("list",list);
    %>
    List集合: ${list} <br>
    0索引元素: ${list[0]} <br>
    <%--获取Map集合--%>
    <%
      HashMap<String,Student> map = new HashMap<>();
      map.put("ljb01",new Student("张三",23));
      map.put("ljb02",new Student("李四",24));
      pageContext.setAttribute("map",map);
    %>
    Map集合: ${map} <br>
    第一个学生对象: ${map.ljb01} <br>
    第一个学生对象的姓名: ${map.ljb01.name}
</body>
</html>

注意事项 

EL 表达式没有空指针异常

EL 表达式没有索引越界异常

EL 表达式没有字符串的拼接

3.EL表达式的运算符

关系运算符

运算符作用示例结果
== 或 eq等于${5 == 5} 或 ${5 eq 5}true
!= 或 ne不等于${5 != 5} 或 ${5 ne 5}false
< 或 lt小于${3 < 5} 或 ${3 lt 5}true
> 或 gt大于${3 > 5} 或 ${3 gt 5}false
<= 或 le小于等于${3 <= 5} 或 ${3 le 5}true
>= 或 ge大于等于${3 >= 5} 或 ${3 ge 5}false

逻辑运算符

运算符作用示例结果
&& 或 and并且${A && B} 或 ${A and B}true/false
|| 或 or或者${A || B} 或 ${A and B}true/false
! 或 not取反${ !A } 或 ${ not A }true/false

其他运算符

运算符作用
empty1.判断对象是否为null
2.判断字符串是否为空字符串
3.判断容器元素是否为0
条件 ? 表达式1 : 表达式2三元运算符

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL表达式运算符</title>
</head>
<body>
    <%--empty--%>
    <%
        String str1 = null;
        String str2 = "";
        int[] arr ={};
    %>
    ${empty str1} <br>
    ${empty str2} <br>
    ${empty arr} <br>

    <%--三元运算符,获取性别的数据,在对应的按钮上进行勾选--%>
    <% pageContext.setAttribute("gender","men");%>
    <input type="radio" name="gender" value="men" ${gender == "men" ? "checked" : ""}>男
    <input type="radio" name="gender" value="women" ${gender == "women" ? "checked" : ""}>女
</body>
</html>

 

4.EL表达式使用细节 

EL 表达式能够获取四大域对象的数据,根据名称从小到大在域对象中查找

还可以获取 JSP 其他八个隐式对象,并调用对象中的方法


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL表达式使用细节</title>
</head>
<body>
    <%--获取四大域对象中的数据--%>
    <%
        //pageContext.setAttribute("username","zhangsan");
        request.setAttribute("username","zhangsan");
        //session.setAttribute("username","zhangsan");
        //application.setAttribute("username","zhangsan");
    %>
    ${username} <br>

    <%--获取JSP中其他八个隐式对象  获取虚拟目录名称--%>
    <%= request.getContextPath()%>
    ${pageContext.request.contextPath}
</body>
</html>

5.EL表达式隐式对象 

EL中的隐式对象类型对应JSP隐式对象备注
PageContextJavax.serlvet.jsp.PageContextPageContext完全一样
ApplicationScopeJava.util.Map没有操作应用域对象数据
SessionScopeJava.util.Map操作会话域对象数据
RequestScopeJava.util.Map操作请求域对象数据
PageScopeJava.util.Map操作页面域对象数据
HeaderJava.util.Map根据key获取请求消息头,值是一个
HeaderValuesJava.util.Map根据key获取请求消息头,值是多个(数组)
ParamJava.util.Map根据key获取请求参数,值是一个
ParamValuesJava.util.Map根据key获取请求参数,值是多个(数组)
InitParamJava.util.Map根据key获取全局参数,value是参数值
CookieJava.util.Map根据key获取cookie的值

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL表达式11个隐式对象</title>
</head>
<body>
    <%--pageContext对象 可以获取其他三个域对象和JSP中八个隐式对象--%>
    ${pageContext.request.contextPath} <br>

    <%--applicationScop sessionScope requestScope pageScope 操作四大域对象中的数据--%>
    <% request.setAttribute("username","zhangsan"); %>
    ${username} <br>
    ${requestScope.username} <br>

    <%--header headerValues 获取请求头数据--%>
    ${header["connection"]} <br>
    ${headerValues["connection"][0]} <br>

    <%--param paramValues 获取请求参数数据--%>
    ${param.username} <br>
    ${paramValues.hobby[0]} <br>
    ${paramValues.hobby[1]} <br>

    <%--initParam 获取全局配置参数--%>
    ${initParam["pname"]} <br>

    <%--cookie 获取cookie信息--%>
    ${cookie} <br> <%--获取Map集合--%>
    ${cookie.JSESSIONID} <br> <%--获取map集合中第二个元素--%>
    ${cookie.JSESSIONID.name} <br> <%--获取cookie对象的名称--%>
    ${cookie.JSESSIONID.value} <br> <%--获取cookie对象的值--%>
</body>
</html>

 获取全局配置参数时需在web.xml中写入

<!--配置全局参数-->
    <context-param>
        <param-name>pname</param-name>
        <param-value>bbb</param-value>
    </context-param>

2.JSTL

1.JSTL概述

JSTL(Java Server Pages Standarded Tag Library):JSP 标准标签库

主要提供给开发人员一个标准通用的标签库

开发人员可以利用这些标签取代 JSP 页面上的 Java 代码,从而提高程序的可读性,降低程序的维护难度

组成作用说明
core核心标签库通用的逻辑处理
fmt国际化不同地域显示不同语言
functionsEL函数EL表达式可以使用的方法
sql操作数据库用于操作数据库
xml操作XML用于操作XML

2.JSTL的核心标签使用

JSTL核心标签库

 实际开发中,用到的jstl标签库主要以核心标签库为准,偶尔会用到国际化标签库的标签

标签名称功能分类分类作用
<标签名:if>流程控制核心标签库用于判断

<标签名:choose>

<标签名:when>

<标签名:otherwise>

流程控制核心标签库用于多个条件判断
<标签名:forEach>迭代操作核心标签库用于循环遍历

基本使用

1.创建一个web项目

2.在web目录下创建一个WEB-INF目录

3.在WEB-INF目录下创建一个libs目录,将JSTL的jar包导入

4.创建JSP文件,通过taglib导入JSTL标签库

5.对流程控制和迭代遍历的标签进行使用

6.部署本启动项目

7.通过浏览器查看

<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!--prefix给jstl core核心库起个前缀名,使用的标签就以c开头-->
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
  <title>流程控制</title>
</head>
<body>
<%--向域对象中添加成绩数据--%>
${pageContext.setAttribute("score","B")}

<%--对成绩进行判断--%>
<c:if test="${score eq 'E'}">
  优秀
</c:if>

<%--对成绩进行多条件判断--%>
<c:choose>
  <c:when test="${score eq 'A'}">优秀</c:when>
  <c:when test="${score eq 'B'}">良好</c:when>
  <c:when test="${score eq 'C'}">及格</c:when>
  <c:when test="${score eq 'D'}">较差</c:when>
  <c:otherwise>成绩非法</c:otherwise>
</c:choose>
<br>
<%--向域对象中添加集合--%>
<%
  ArrayList<String> list = new ArrayList<>();
  list.add("aa");
  list.add("bb");
  list.add("cc");
  list.add("dd");
  pageContext.setAttribute("list",list);
%>

<%--遍历集合--%>
<c:forEach items="${list}" var="str">
  ${str} <br>
</c:forEach>
</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

群晖NAS drive的远程访问和电脑硬盘的内网穿透挂载设置方法

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

【弃坑xdm】docker容器作为开发环境,更加灵活可靠

关于我准备转行深度学习~~ 弃坑xdm 弃坑xdm 弃坑xdm 转发给你的同学&#xff0c;吓他们一跳~~ ps:其实我准备使用docker容器作为开发环境&#xff0c;vscode可以直接连接docker容器&#xff0c;更加灵活可靠。

企业常用的项目管理工具推荐,了解有哪些选择

项目管理软件是一种帮助项目经理和团队有效地计划、组织和管理项目的工具。它为协作、通信和任务管理提供了一个集中的平台。市场上有各种各样的项目管理软件&#xff0c;每个都有其独特的特性和功能。企业常用的项目管理工具有哪些&#xff1f; 1.Zoho Projects Zoho Projec…

基于tornado BELLE 搭建本地的web 服务

我的github 将BELLE 封装成web 后端服务&#xff0c;采用tornado 框架 import timeimport torch import torch.nn as nnfrom gptq import * from modelutils import * from quant import *from transformers import AutoTokenizer import sys import json #import lightgbm a…

2023年中国城市矿产行业产值及发展趋势分析[图]

城市矿产是指工业化和城镇化过程中产生和蕴藏于废旧机电设备、电线电缆、通讯工具、汽车、家电、电子产品、金属和塑料包装物以及废料中&#xff0c;可循环利用的钢铁、有色金属、贵金属、塑料、橡胶等资源。 开展“城市矿产”示范基地建设是缓解资源瓶颈约束&#xff0c;减轻环…

BAT027:删除当前目录指定文件夹以外的文件夹

引言&#xff1a;编写批处理程序&#xff0c;实现删除当前目录指定文件夹以外的文件夹。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击【编辑】…

A062-防火墙安全配置-配置Iptables防火墙策略

实验步骤: 【教学资源类别】 序号 类别 打勾√ 1 学习资源 √ 2 单兵模式赛题资源 3 分组对抗赛题资源 【教学资源名称】 防火墙安全配置-配置安全设置iptables防火墙策略 【教学资源分类】 一级大类 二级大类 打勾√ 1.安全标准 法律法规 行业标准 安全…

【css】背景换颜色

更换前 longin.html <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>login</title><link href"/css/style.css" type"text/css" rel"stylesheet"><s…

AN动画基础——变换的文字动画

【AN动画基础——变换的文字动画】 文字变换动画 本篇内容&#xff1a;散件动画&#xff0c;形状提示 重点内容&#xff1a;形状提示 工 具&#xff1a;Adobe Animate 2022 文字变换动画 &#xff08;底下背景和前面文字一样动&#xff0c;转完GIF不知道为啥不动了&#xff0c…

node教程

文章目录 1.node入门 1.node入门 node是什么&#xff1f; node.js是一个开源的&#xff0c;跨平台的JS运行环境&#xff08;其实可以理解为是一款应用程序&#xff0c;是一款软件&#xff0c;可以运行JS&#xff09; node作用&#xff1a; 1.开发服务器应用

Wireshark新手小白基础使用方法

一、针对IP抓取 1、过滤格式&#xff1a; &#xff08;1&#xff09;、ip.src eq x.x.x.x &#xff08;2&#xff09;、ip.dst eq x.x.x.x &#xff08;3&#xff09;ip.src eq x.x.x.x or ip.dst eq x.x.x.x 二、针对端口过滤 1、过滤格式&#xff1a; &#xff08;1&a…

Linux下创建用户并禁止root登录

在Linux中&#xff0c;root几乎拥有所有的权限&#xff0c;一旦root用户密码外泄&#xff0c;对于服务器而言将是致命的威胁&#xff0c;禁止root用户通过ssh的方式远程登录&#xff0c;这样即使root用户密码外泄也能够保障服务器的安全。 1、创建用户&#xff1a; adduser ad…

网络安全分析——蠕虫病毒动态分析视图

蠕虫病毒&#xff08;Worm Virus&#xff09;是一种自我复制的恶意软件&#xff0c;通过网络或系统漏洞传播&#xff0c;感染其他计算机并利用其资源。与其他病毒不同&#xff0c;蠕虫病毒无需依赖于宿主文件&#xff0c;并可以自动在网络中传播&#xff0c;因此具有高度传染性…

嵌入式养成计划-42----QT 创建项目--窗口界面--常用类及组件

一百零五、如何创建 QT 项目 创建工程 New Project / 文件–>新建。。 /ctrl N 选择一个模板–>Application -->Qt Widgets Application 选择创建的路径&#xff0c;以及设置文件名 下一步 输入类名&#xff0c;选择基类为 QWidget 下一步 选择这个玩意&a…

1688店铺商品接口:快速获取海量优质商品,一键批发采购!

获得1688店铺的所有商品接口&#xff0c;可以参考以下步骤&#xff1a; 进入1688网站&#xff0c;注册并登陆账号。进入目标店铺的详情页面&#xff0c;点击“API接口”选项。选择“item_search_shop”接口&#xff0c;点击“调用接口”按钮。在弹出的窗口中&#xff0c;将需要…

IOS课程笔记[4-5] 计算器实现与更换主题 的使用

计算 控件介绍 文本输入 设置键盘格式为NumberPad字符串与数字转换方法 NSInteger num2 [str2 integerValue]; 弹窗控件 UIAlertController 新版本弹窗 UIAlertController *alert [UIAlertController alertControllerWithTitle:"error" message:"输入有…

成都瀚网科技:抖店怎么快速出体验分?

在当今的移动互联网时代&#xff0c;电商平台之间的竞争日益激烈&#xff0c;用户对产品的体验变得越来越重要。在众多电商平台中&#xff0c;抖音电商成为备受关注的新兴力量。在抖店&#xff0c;如何快速提升店铺体验成为每个卖家关心的问题。 1.如何在抖店快速生成经验值&am…

docker容器内安装项目运行环境(python依赖包+allure)

目录 一、安装自动化项目依赖包1.导出项目依赖库2.上传到远程仓库3.进入jenkins容器内&#xff0c;检查是否安装git4.配置git用户信息5.生成秘钥6.把代码拉取下来7.安装python项目依赖8.运行项目 二、安装allure1.jenkins容器内安装allure&#xff0c;进入/usr/local/2.下载all…

3GPP相关

5G是指特定的、新的5G无线接入技术&#xff0c;在更宽泛的语境中&#xff0c;意指未来移动通信能够支持的、可预见的大量新的应用服务。 3GPP由3个技术规范组&#xff08;TSG&#xff09;组成&#xff0c;其中TSG RAN&#xff08;Radio Access Network&#xff0c;无线接入网&…

网工实验笔记:策略路由PBR的应用场景

一、概述 PBR&#xff08;Policy-Based Routing&#xff0c;策略路由&#xff09;&#xff1a;PBR使得网络设备不仅能够基于报文的目的IP地址进行数据转发&#xff0c;更能基于其他元素进行数据转发&#xff0c;例如源IP地址、源MAC地址、目的MAC地址、源端口号、目的端口号、…