JSP——EL表达式

news2024/11/24 1:56:07

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:JAVA开发者成长之路
✨特色专栏:国学周更-心性养成之路
🥭本文内容:JSP——EL表达式
更多内容点击👇
      JSP学习笔记一

在这里插入图片描述

本文目录

    • 1.1 概念
    • 1.2 作用
    • 1.3 EL的应用(获取基本类型、字符串)
      • 1.3.1 EL应用案例
      • 1.3.2 EL和JSP脚本的区别
    • 1.4 EL的应用(获取引用类型)
    • 1.5 EL的应用(获取数组、集合的元素)
    • 1.6 EL的运算符
      • 1.6.1 EL表达式执行运算
      • 1.6.2 empty关键字
    • 1.7 隐式对象
      • 1.7.1 获得应用上下文
      • 1.7.2 获取Cookie对象

在这里插入图片描述

1.1 概念

EL使JSP写起来更简单、简洁。主要用于获取作用域中的数据

1.2 作用

用于替换作用域对象.getAttribute(“name”);

1.3 EL的应用(获取基本类型、字符串)

  • ${scope.name}获取具体某个作用域中的数据
  • ${name}获取作用域中的数据,主机查找{pageContext、request、session、application}

1.3.1 EL应用案例

<%
	//存储在request作用域
	request.setAttribute("name","zhansgan");
	request.setAttribute("age",18);
%>

<%-- 获取request作用域中name对应的值,找到就返回,没找到就返回"" --%>
${requestScope.name}

<%--从最小作用域逐级查找name对应的值,找到就返回,没找到就返回"" -->
${name}

1.3.2 EL和JSP脚本的区别

  • <%=request.getAttribute() %>没有找到返回null
  • ${requestScope.name}没找到返回""
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            Cookie[] cookies = request.getCookies();
            String username = "";
            String password = "";
            if (cookies != null) {
                for (Cookie cookie : cookies) {
                    if (cookie.getName().equals("username")) {
                        username = cookie.getValue();
                    }
                    if (cookie.getName().equals("password")) {
                        password = cookie.getValue();
                    }
                }
            }
        %>
        <%=username%><br/>
        <%=password%>

        <hr/>

        <h1>${cookie.username.value}</h1>
        <h1>${cookie.password.value}</h1>

        <input type="text" name="username" value="<%=username%>"><br/>
        <input type="text" name="password" value="<%=password%>"><br/>
        <input type="text" name="username" value="${cookie.username.value}"><br/>
        <input type="text" name="username" value="${cookie.password.value}"><br/>
    </body>
</html>

1.4 EL的应用(获取引用类型)

使用EL获取作用域中的对象调用属性时,只能访问对象的get方法,必须遵守命名规范定义

<%
	Emp emp = new Emp();
	emp.setName("zhangsan");
	emp.setAge(20);
	request.setAttribute("emp",emp);
%>
<%--调用getName()方法 --%>
${requestScope.emp.name}

1.5 EL的应用(获取数组、集合的元素)

EL可以获取Array、List、Map中的元素,Set由于没有下标,无法直接访问元素,后续可遍历

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="com.cxyzxc.www.entity.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            int[] array = new int[]{11,22,33,44,55};
            request.setAttribute("array",array);

            List<User> users = new ArrayList<User>();
            users.add(new User("zhangsan","123456"));
            users.add(new User("lisi","654321"));
            users.add(new User("wangwu","112233"));
            request.setAttribute("users",users);

            Map<String,String> maps = new HashMap<>();
            maps.put("CN","中国");
            maps.put("US","美国");
            maps.put("IT","意大利");
            request.setAttribute("maps",maps);
        %>

        <!--EL访问数组 -->
        ${array[1]}<br/>
        ${array[2]}<br/>
        ${array[3]}<br/>

        <hr/>

        ${users[0]}<br/>
        ${users[1]}<br/>
        ${users.get(2)}

        <hr/>

        ${maps["CN"]}<br/>
        ${maps["US"]}<br/>
        ${maps.IT}

    </body>
</html>

1.6 EL的运算符

操作符描述
.访问一个Bean属性或者一个映射条目
[]访问一个数组或者链表的元素
+
-减或负
*
/ or div
% or mod取模
== or eq测试是否相等
!= or ne测试是否不等
< or lt测试是否小于
> or gt测试是否大于
<= or le测试是否小于等于
>= or ge测试是否大于等于
&& or and测试逻辑与
|| or or测试逻辑或
! or not测试取反
empty测试是否空值

1.6.1 EL表达式执行运算

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            request.setAttribute("nums", 1234);
        %>

        <h1>算术运算符</h1>
        <h1>${nums+5} </h1>
        <h1>${nums - 5 } </h1>
        <h1>${nums * 5 } </h1>
        <h1>${nums div 5 } </h1>
        <h1>${nums mod 5 } </h1>

        <hr/>

        <h1>关系运算符</h1>
        <h1>${nums eq 1234}</h1>
        <h1>${nums ne 1234}</h1>
        <h1>${nums gt 1234}</h1>
        <h1>${nums lt 1234}</h1>
        <h1>${nums ge 1234}</h1>
        <h1>${nums le 1234}</h1>

        <hr/>

        <h1>逻辑运算符</h1>
        <h1>${nums > 1000 and nums !=1200}</h1>
        <h1>${nums > 1000 or nums == 2000}</h1>
        <h1>${not(num > 1234)}</h1>

    </body>
</html>

1.6.2 empty关键字

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%-- 值设置为“”或者null,返回结果都为true,其它情况但会false--%>
        <%
            request.setAttribute("ss", "");
        %>

        <h1>empty运算符</h1>
        <h1>${empty ss}</h1>

    </body>
</html>

1.7 隐式对象

EL表达式语言定义了11个隐式对象

隐含对象描述
pageScopepage作用域
requestScoperequest作用域
sessionScopesession作用域
applicationScopeapplication作用域
paramRequest对象的参数,字符串
paramValuesRequest对象的参数,字符串集合
headerHTTP信息头,字符串
headerValuesHTTP信息头,字符串集合
initParam上下文初始化参数
cookieCookie值
pageContext当前页面的pageContext

1.7.1 获得应用上下文

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            String path = request.getContextPath();
        %>
        <%=path%>
        <br/>
        ${pageContext.request.contextPath}


        <%--        <br/>--%>
        <%--        <a href="<%=request.getContextPath()%>/manager/safe/xxxController">Click me</a><br/>--%>
        <%--        <a href="${pageContext.request.contextPath}/manager/safe/xxxController">Click target</a>--%>
    </body>
</html>

1.7.2 获取Cookie对象

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            Cookie[] cookies = request.getCookies();
            String username = "";
            String password = "";
            if (cookies != null) {
                for (Cookie cookie : cookies) {
                    if (cookie.getName().equals("username")) {
                        username = cookie.getValue();
                    }
                    if (cookie.getName().equals("password")) {
                        password = cookie.getValue();
                    }
                }
            }
        %>
        <%=username%><br/>
        <%=password%>

        <hr/>

        <h1>${cookie.username.value}</h1>
        <h1>${cookie.password.value}</h1>

        <input type="text" name="username" value="<%=username%>"><br/>
        <input type="text" name="password" value="<%=password%>"><br/>
        <input type="text" name="username" value="${cookie.username.value}"><br/>
        <input type="text" name="username" value="${cookie.password.value}"><br/>
    </body>
</html>


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

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

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

相关文章

年度征文 | 回顾2022,展望2023 (清风与我)

个人简介&#xff1a; 名称内容个人主页清风与我学习方向主攻前端方向推荐学习vue&#xff0c;vue3&#xff0c;node.js&#xff0c;React&#xff0c;项目实战推荐学习用网站菜鸟教程&#xff0c;博客&#xff0c;哔哩哔哩 …学习用资源网vue&#xff0c;element&#xff0c;…

Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践

文章目录1. 开放空间规划算法总体介绍1.1 Task: OPEN_SPACE_ROI_DECIDER1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER1.3 Task: OPEN_SPACE_TRAJECTORY_PARTITION1.4 Task: OPEN_SPACE_FALLBACK_DECIDER2. 基于混合A *的路径规划算法2.1 hybrid A*的简要思想2.2 RS曲线2.3 Apollo…

一文读懂方壳电池仓段差缺陷检测

摩根大通预计&#xff0c;2025年中国新能源汽车渗透率将达46.3%&#xff0c;彭博新能源财经最新发布的《新能源汽车市场长期展望》(EVO)报告显示&#xff0c;到2025年底&#xff0c;新能源汽车保有量将达到7700万辆&#xff0c;不难看出新能源行业依旧前景广阔。围绕“新能源”…

JDBC(Java Database connect)详解

一、相关概念 什么是JDBC JDBC&#xff08;Java Data Base Connectivity,java数据库连接&#xff09;是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准&#xff0c;据此可…

软件测试门槛低么?适合初学者么

随着软件工程活动的不断演化&#xff0c;软件测试工作已经成为了不可或缺的一部分&#xff0c;测试工作某种程度上是可以很大幅度提高软件的产品质量以及提升用户的使用满意度。因此&#xff0c;许多想要学习软件测试的朋友也许常常会有这样的困惑&#xff0c;软件测试门槛低吗…

JS数组对象——根据日期进行排序Date.parse(),按照时间进行升序或降序排序localeCompare()

JS数组对象——根据日期对象进行排序&#xff0c;按照时间进行升序或降序排序场景复现封装数组对象的排序方法根据日期和时间对象排序1、按照日期时间混合排序2、分别按照日期和时间进行排序场景复现 排序在项目中非常实用&#xff0c;出现频率极高&#xff0c;尤其是后台管理…

用javascript分类刷leetcode17.栈(图文视频讲解)

目录 Stack的特点&#xff1a;先进后出&#xff08;FILO&#xff09; 使用场景&#xff1a;十进制转2进制 函数调用堆栈 js里没有栈&#xff0c;但是可以用数组模拟 42/2 42%20 21/2 21%21 10/2 10%20 5/2 5%21 2/2 2%20 1/2 1%21 stack: [0,1,0,1,0,1] res: 1 0 1 …

VC#复习资料

一、选择题 2、“闪电”图标 3、using命名空间 命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式&#xff0c;using 关键字表明程序使用的是给定命名空间中的名称&#xff0c;使用 using 命名空间指令&#xff0c;这样在使用的时候就不用在前面加上命名空间名称…

golang学习

由于期末考试没时间学算法学了一波go放松一下 这可能是我学语言最认真的一次了&#xff08; 跟的是尚硅谷学完的 二倍速快进 折腾了一周左右 网络编程部分没看 因为不懂计网 不想学&#xff08; 虽然已经很老的课了 但是顺平老师雀氏讲的太细了也是听完了自己也没时间写笔记 …

QT5.14.2编译mysql-5.7.25 32位驱动办法

开发环境&#xff1a;Windows10QT5.14.2MySQL5.7.25 编译步骤&#xff1a; 1、下载安装mysql压缩包&#xff0c;下载地址为&#xff1a;https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.25-win32.zip 也可以打开MySQL :: Download MySQL Community Server (Archived Ve…

Electron主进程渲染进程间通信的四种方式

在electron中进程使用 ipcMain 和 ipcRenderer 模块&#xff0c;通过开发人员定义的“通道”传递消息来进行通信。新的版本中electron推荐使用上下文隔离渲染器进程进行通信&#xff0c;这种方式的好处是无需在渲染进程中直接使用ipcRenderer发送消息&#xff0c;这种在渲染进程…

JWT令牌入门

上篇文章我们写了如何登录&#xff0c;我们着重学习Token模式下的单点登录 一、访问令牌的类型 透明令牌&#xff0c;是客户端存储一段引用数字&#xff0c;然后到达服务器指向服务器中特定的令牌 类似于&#xff0c;cookie中存储了sessionId他们之间的关系 自包含令牌&#x…

猿代码超算实习生,五步助力拿到高薪offer

虽说行行出状元&#xff0c;但是一旦入错行&#xff0c;那就是一辈子的事。互联网的潮水已经退去&#xff0c;普通人再进入也只是勉强温饱。与其朝不保夕的被裁员&#xff0c;倒不如提前锁定未来30年的幸福。 20大以来&#xff0c;芯片国产化、超算&#xff08;先进计算&#…

docker的run,cmd,entrypoint分析和对比

写在前面 本文一起看下Dockerfile中经常用到的几个类似命令&#xff0c;RUN&#xff0c;CMD&#xff0c;ENTRYPOINT。 1&#xff1a;容器是怎么来的&#xff1f; 想要有容器我们就必须先创建镜像&#xff0c;而想要有镜像&#xff0c;我们则必须写一个用来描述想要创建的镜像…

Struts2基本架构

Struts2基本架构1、Struts2执行流程2、web.xml配置3、Action控制器3.1、核心控制器3.2、业务控制器4、Result配置5、struts.xml核心配置5.1、constant元素5.2、package元素5.3、配置文件加载顺序1、Struts2执行流程 如下例子&#xff1a; 执行流程如下&#xff1a; 浏览器将请…

Python Flask开发笔记

Python Flask开发笔记一、创建flask项目1.开发环境&#xff1a;2.安装Flask3.使用pycharm&#xff0c;创建flask项目二、flask介绍1.介绍初始flask主程序接口文件2.Flask() 类1.Flask参数解释0.sys.modules用于缓存程序导入模块名1.import_name 主程序模块名2.static_url_path …

IconJar - Mac 上的一款多功能图标素材管理工具

IconJar - Mac 上的一款多功能图标素材管理工具 IconJar 是一个多功能的图标管理工具&#xff0c;由世界各地的设计师和开发人员使用。在一个应用程序中搜索、组织、预览和检索图标&#xff0c;而不是创建大量的文件夹来存储你的收藏。这款应用针对黑暗模式进行了优化&#xff…

2022年自动化测试工具汇总——实用的功能测试工具篇

如今&#xff0c;UI自动化测试工具就和雨后春笋般&#xff0c;层出不穷。由于每种工具都有自己的重点和策略&#xff0c;所以总是让人无从下手。今天我们来对比现在使用比较广泛的几个UI自动化测试工具&#xff0c;来看看他们之间的优缺点。 首先&#xff0c;我们先简单介绍一下…

4.6.4、边界网关 BGP 的基本工作原理

1、力求寻找较好的路由 因特网采用分层次的路由选择协议 内部网关协议&#xff08;例如&#xff1a;路由信息协议 RIP 或开放最短路径优先 OSPF&#xff09; 它们都是设法使分组在一个自治系统内尽可能有效地从源网络传输到目的网络无需考虑自治系统外部其他方面的策略 外部…

内网渗透-src挖掘-外网打点到内网渗透-3层内网渗透测试记录-2023年1月

1、通过信息搜集&#xff0c;发现目标有一个外网访问的通达OA系统 2、通达OA的漏洞是非常多的&#xff0c;这里利用大佬写好的通达OA一键getshell工具 成功获取webshell 3、连接webshell&#xff0c;上传cs马儿到服务器 4、执行获取主机权限 成功上线 5、通过Ladon插件发…