EL标签-给JSP减负

https://blog.csdn.net/weixin_42259823/article/details/85945149

安装使用

1. 通过命令行创建maven项目

2. 安装jstl包

<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

3. 使用

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${2+3}
</body>
</html>

输出5即可
在这里插入图片描述
在JSP页面中,经常利用JSP表达式<%=变量或者表达式%>来输出声明的变量以及页面传递的参数,当变量很多的时候,书写这样的表达式会显得累赘,EL标签很好地解决了这个问题,它简化了表达式。

EL标签语法

${参数名}

例如:${param.name}获得参数name的值,等同于<%=request.getParameter(name’)%>。从形式和用法上看,这种EL表达式简化了JSP原有的表达式,也是目前开发中经常使用的方式。

EL标签功能

总体而言,EL标签提供了更为简洁、方便的形式来访问变量,不但可以简化JSP页面代码,而且使得开发者的逻辑更加清晰。
EL标签具有以下功能:

  • 可以访问JSP中不同域的对象。
  • 可以访问Java Bean中的属性。
  • 可以访问集合元素
  • 支持简单的运算符操作

访问JSP中不同域的对象

在Web中有4个作用域分别是page、request、.session和application。EL标签可以对这4个作用域的参数进行访问。
安装maven包

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>9.0.74</version>
</dependency>
<!--老版本,pageContext使用-->
<!--        <dependency>-->
<!--            <groupId>javax.servlet.jsp</groupId>-->
<!--            <artifactId>jsp-api</artifactId>-->
<!--            <version>2.2</version>-->
<!--            <scope>provided</scope>-->
<!--        </dependency>-->
<dependency>
     <groupId>javax.servlet.jsp</groupId>
     <artifactId>javax.servlet.jsp-api</artifactId>
     <version>2.3.3</version>
     <scope>provided</scope>
 </dependency>

index.jsp

<%@ page contentType="text/html;charset=UTF-8" import="java.util.*" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<%
    pageContext.setAttribute("name", "smith");
    request.setAttribute("age", 20);
    session.setAttribute("address", "china");
    application.setAttribute("sex", "male");
%>
<h1>演示访问</h1>
<h3>范围.参数名称</h3>
<p>姓名:${pageScope.name}</p>
<p>年龄:${requestScope.age}</p>
<p>地址:${sessionScope.address}</p>
<p>性别:${applicationScope.sex}</p>
<h3>直接写参数名称</h3>
<p>姓名:${name}</p>
<p>年龄:${age}</p>
<p>地址:${address}</p>
<p>性别:${sex}</p>
<body>
</body>
</html>

在这里插入图片描述
在上述代码中,有两种方法取得参数值,第一种代码是用EL隐含变量获取参数值,第二种直接写明参数名,由此可知EL标签会依序从Page、Request、Session、Application范围查找,若找到name参数名,就直接回传参数值,不再继续查找,若没有参数,则返回null。

访问java bean中的属性

在Java Bean中,经常是用Java Bean做内部变量(数据成员)。在JSP表达式中访问这些JavaBean中的变量比较麻烦,但是应用EL标签却极其简单、方便。
User.java

package com.wujialiang;

import java.io.Serializable;

public class User implements Serializable {
    private String address;
    private Integer age;
    private String name;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

index.jsp

<%@ page contentType="text/html;charset=UTF-8" import="java.util.*,com.wujialiang.User" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<%
    User user = new User();
    user.setAddress("中国");
    user.setAge(20);
    user.setName("张三");
    request.setAttribute("user",user);
%>
<p>用户信息:${user}</p>
<p>年龄:${user.age}</p>
<p>地址:${user.address}</p>
<p>姓名:${user.name}</p>
<body>
</body>
</html>

在这里插入图片描述

EL标签的操作符

本节主要介绍EL标签的操作符,它可以帮助解决各种所需的功能。操作符大致可以分为算术运算符、逻辑运算符、关系运算符以及其他运算符。

  • 算术运算符:算术运算符有5个,即+ - * /、求模(或div、%、mod)。
  • 逻辑运算符:逻辑运算符有3个,即“&&”或“and”、"||"或“or”、“!”或“not”。
  • 关系运算符:关系运算符有6个,即“=”或“eq”、“!=”或“ne”、“<”或“It”、“>”或“gt”、“<=”或“le”、“>=”或“ge”。
  • 其他运算符:Empty运算符、条件运算符、“()”运算符、“[]”运算符。
<%@ page contentType="text/html;charset=UTF-8" import="java.util.*,com.wujialiang.User" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>EL运算符</title>
</head>

<body>
<%
    User user = new User();
    user.setAddress("中国");
    user.setAge(20);
    user.setName("张三");
    request.setAttribute("user", user);
    request.setAttribute("str", null);
    String[] arr = new String[]{
            "第一个",
            "第二个"
    };
    request.setAttribute("arr", arr);
%>
<h1>算数运算符</h1>
<div>
    <p>加3+3=${3+3}</p>
    <p>减3-2=${3-2}</p>
    <p>乘3*3=${3*3}</p>
    <p>除3/6=${3/6}</p>
    <p>取模10%3=${10%3}</p>
</div>

<h1>逻辑运算</h1>
<div>
    <p>逻辑与${2<15 && 15<20}</p>
    <p>逻辑与${2<15 and 15<20}</p>
    <p>逻辑或${2<15 || 15<20}</p>
    <p>逻辑或${2<15 or 15<20}</p>
    <p>逻辑非${!(2<15)}</p>
    <p>逻辑非${not(2<15)}</p>
</div>
<h1>关系运算符</h1>
<div>
    <p>符号左右两端是否相等:2-=15:${2==15}或${2 eq 15}</p>
    <p>符号左右两端是否不相等:2!=15:${2!=15}或${2 ne 15}</p>
    <p>符号左边是否小于右边:2<15:${2<15}或${2 lt 15}</p>
    <p>符号左边是否大于右边:2>15:${2>15}或${2 gt 15}</p>
    <p>符号左边是否小于或者等于右边:2<=15:${2<=15}或${2 le 15}</p>
    <p>符号左边是否大于或者等于右边: 2>=15:${2>=15}或${2 ge 15}</p>
</div>
<h1>其他运算符</h1>
<div>
    <p>str是否为空:${empty str}</p>
    <p>user对象是否为空:${empty user}</p>
    <p>2小于15输出yes否则输出no:${2<15?'yes':'no'}</p>
    <p> 输出user对象的address属性:${user.address}</p>
    <p>输出arr数组的第一个值:${ arr[0] }</p>
</div>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

“.”与“[]”运算符的区别在于“[]”访问数组或者集合、“”访问Java Bean属性或者Map Entry。变量必须利用“[]”运算符,“.”则不行。

EL标签隐含变量

本节将介绍EL标签的隐含变量,这些隐含变量与JSP中的隐含对象很相似。

隐含变量pageScope、requestScope、sessionScope、applicationScope

隐含变量pageScope、requestScope、sessionScope、applicationScope分别对应于JSP隐含变量page、request、.session、application,利用JSP中对应的作用域发送请求的参数变量,可以用相应的EL标签变量获取参数值。

隐含变量param、paramValues

隐含变量param、param Values包含请求参数集合变量,param是取得某一个参数,param Values是取得参数集合中的变量值,它们相当于JSP中的request…getParameter(String name)和request.getParameter Values(String name).
index.jsp

<%@ page contentType="text/html;charset=UTF-8" import="java.util.*,com.wujialiang.User" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>EL运算符</title>
</head>

<body>
<form action="test.jsp" method="post">
    <input type="text" name="salepleVal" value="1">
    <input type="text" name="salepleVal" value="17">
    <input type="text" name="salepleVal" value="16">
    <input type="text" name="simpleSingleVal" value="single">
    <input type="submit" value="submit">
</form>
</body>
</html>

text.jsp

<%@ page import="java.util.*" contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<p>请求参数值:${param.simpleSingleVal}</p>
<p>请求参数值:${param.salepleVal}</p>
</body>
</html>

其他变量

header、headerValues变量

header、headerValues这两个变量用于获取请求HTTP表头信息,header表示取得HTTP表头
信息,headerValues表示取得表头数组信息,它们分别对应于request.getHeader()和request.getHeaders()

cookie变量

cookie变量用于取得所有请求的cookie参数,参数中的每个对象对应javax.servlet.http.Cookie.
例如,要获取cookie中名称为username的值,可以直接使用${cookie.username}来获取。

initParam变量

initParam用于取得应用程序的初始化参数,相当于application.getInitParameter(方法,但通常很少使用。
例如,一般页面获取初始化的方法String url=application.getInitParameter((“url”)可以用${initParam.url}来代替。

pageContext变量

pageContext变量用于取得其他相关用户的请求或页面的详细信息,其等同于JSP中的PageContext对象。下面列出几个常用的方法:

方法解释
${pageContext.request.queryString}取得请求的参数名
$pageContext.request.requestURL}取得请求的URL
${pageContext.request.contextPath}取得服务应用的名称
${pageContext.request.method}取得HTTP的提交方法
${pageContext.request.protocol}取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser}获取登录用户名称
${pageContext.request.remoteAddr}获取登录用户P地址
${pageContext.session.new}判断session是否为新的会员
${pageContext.session.id}取得session的ID号
$pageContext.servletContext.serverInfo}取得主机端的服务信息

index.jsp

<%@ page contentType="text/html;charset=UTF-8" import="java.util.*,com.wujialiang.User" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>EL运算符</title>
</head>

<body>
<p>会话id:${pageContext.session.id}</p>
<p>Accept-Encoding报头:${header["Accept-Encoding"]}</p>
<p>connection报头:${header["connection"]}</p>
</body>
</html>

在这里插入图片描述

禁用EL标签

整个web页面禁用
EL标签是在JSP2.0之后才有的新特性,因此需要指定JSP版本并设置为较低版本(Servlet2.3或者更早),那么JSP页面将不再支持EL标签。可以通过修改web.xml文件实现。修改后的web.xml配置为:

<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

单个页面禁用,现在默认就是true

<%@ page isELIgnored="true" %>

通常情况下,在一个应用中要么全部允许使用EL标签,要么都不允许,因此很少出现部分页面使用而另一部分不用的情形。但EL标签允许在一个页面中部分支持标签、部分不支持,若要实现此功能,只需在不需要解析的EL表达式的“$”符号前加入一个反斜杠即可,如“\$”。

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

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

相关文章

【工程项目管理】工程项目管理实践报告

前言&#xff1a; 1.大学课程的大作业&#xff0c;觉得存起来也没什么用就干脆发出来了。。。 2.很可能有不严谨之处&#xff0c;各位看官如若发现欢迎指出~ 创作者文章管理系统 1 实践环节作业1&#xff1a;选题及任务分解WBS &#xff08;1&#xff09;选题 a.项目名称&a…

【论文阅读】Adap-t: Adaptively Modulating Embedding Magnitude for Recommendation

【论文阅读】Adap-&#x1d70f;: Adaptively Modulating Embedding Magnitude for Recommendation 文章目录 【论文阅读】Adap-&#x1d70f;: Adaptively Modulating Embedding Magnitude for Recommendation1. 来源2. 介绍3. 模型解读3.1 准备工作3.1.1 任务说明3.1.2 基于嵌…

「已解决」已有Umi Antd 环境下安装 formily v2 依赖报错问题

背景 在一个项目中想引入 formily v2 试一下这个针对复杂表单的解决方案&#xff0c;结果发现安装后报错&#xff0c;目前已有的第三方库大致为 “ant-design/icons”: “^5.0.1”, “ant-design/pro-components”: “^2.4.4”, “umijs/max”: “^4.0.68”, “ahooks”: “^3…

textract OCR的安装使用

安装 pip install textract使用 在 Python 中&#xff0c;textract 是一个用于提取文本和信息的库。它提供了一个函数 textract.process()&#xff0c;用于处理不同类型的文档并提取文本内容。下面是 textract.process() 函数的各个参数的介绍&#xff1a; filename&#xf…

第3章 运输层

1​、在 ISO/OSI 参考模型中&#xff0c;对于运输层描述正确的有&#xff08; &#xff09; A. 为传输数据选择数据链路层所提供的最合适的服务B. 为系统之间提供面向连接的数据传输服务C. 可以提供端到端的差错恢复和流量控制&#xff0c;实现可靠的数据传输D. 提供路由选择…

HarmonyOS学习路之开发篇—多媒体开发(相机开发 一)

HarmonyOS相机模块支持相机业务的开发&#xff0c;开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发&#xff0c;最常见的操作如&#xff1a;预览、拍照、连拍和录像等。 基本概念 相机静态能力 用于描述相机的固有能力的一系列参数&#xff0c;比如朝向、支持…

20分钟做一套采购审批系统

1、设计输入模板 excel画表格界面 # 公式代表新建时以默认值代替 2、设置单元格为签名控件 双击单元格后&#xff0c;会默认显示当前用户的信息,用于签名 3、设置要合计的数据 生成的合计公式会默认放到下一行 4、设置单元格的ID与标题&#xff0c;在添加或者删除行或者列时&am…

GEE:为每个对象(斑块/超像素)添加属性

作者:CSDN @ _养乐多_ 本文将介绍为每个对象(斑块/超像素)添加属性的代码。并举例将最近距离作为属性添加到每个对象(斑块/超像素)特征中。 结果如下图所示, 文章目录 一、代码二、代码链接一、代码 这段代码的目的是对动态世界土地覆盖图像进行分析,并提取出其中的目…

第九章 ShuffleNetv1网络详解

系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网络详解 第七章 MobileNetv2网络详解 第八章 MobileNetv3网络详解 第九章 ShuffleNetv1网络详解 第十章…

React之state详解

目录 执行过程 异步 React18与自动批处理 setState 推荐用法 ()>{return }&#xff0c;this.state. 生命周期 数据没改变时​不渲染 shouldComponentUpdate PureComponent自动&#xff08;推荐&#xff09; 你真的理解setState吗&#xff1f; - 掘金 组件的私有…

如何在Microsoft Excel中使用LEN函数

如果你曾经想尝试查找一行文本中的字符数&#xff0c;你可以使用Microsoft Excel来查找&#xff0c;这要归功于LEN函数。以下是如何使用它。 一、什么是 LEN 函数 LEN函数是一个简单的计算函数&#xff0c;用于计算给定文本字符串中的所有字符&#xff0c;包括数字、字母、特…

内网安全:内网穿透详解

目录 内网穿透技术 内网穿透原理 实验环境 内网穿透项目 内网穿透&#xff1a;Ngrok 配置服务端 客户端配置 客户端生成后门&#xff0c;等待目标上线 内网穿透&#xff1a;Frp 客户端服务端建立连接 MSF生成后门&#xff0c;等待上线 内网穿透&#xff1a;Nps 服…

三、Docker命令及基本使用

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、帮助启动类命令1.1 启动docker1.2 停止docker1.3 重启docker1.4 查看docker状态1.5 开机启动1.6 查看docker概要信息1.7 查看docker总体帮助文档1.8 查看docker命令…

autoDL上A100运行wiki出错:NVIDIA A100-PCIE-40GB(最后安装好torch+dgl了);学校服务器加2.X版本pytorch

1、A100运行wiki出错&#xff1a;NVIDIA A100-PCIE-40GB with CUDA capability sm_80 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70. If you want to use the NVIDIA A100-PCIE…

题集-栈和队列的相互转化

这里&#xff0c;队列的性质是先入先出&#xff0c;但是栈的性质是后入先出。两个队列就可以通过相互捯实现数据的后入先出。 typedef int QDataType&#xff1b; //这是一个队列结点的结构 typedef struct QueueNode { struct QueueNode* next; QDataType data; }QNode; //这是…

常见面试题之MySQL篇

1.MySQL中&#xff0c;如何定位慢查询? 我们当时做压测的时候有的接口非常的慢&#xff0c;接口的响应时间超过了2秒以上&#xff0c;因为我们当时的系统部署了运维的监控系统Skywalking&#xff0c;在展示的报表中可以看到是哪一个接口比较慢&#xff0c;并且可以分析这个接…

ChatGPT在前,华为盘古Chat在后

国产盘古Chat对话方面堪比GPT-3.5 什么是ChatGPT&#xff1f;简单来说&#xff0c;就是一个能够和人类自然对话的人工智能系统。它可以理解你的语言&#xff0c;回答你的问题&#xff0c;甚至给你提供建议和服务。它不仅可以处理文字&#xff0c;还可以处理图片、视频、音频等…

Web3 是什么?为何应该关注?

当我开始我的职业生涯时&#xff0c;“Web2.0”还是一个热门的新事物。 当我开始我的职业生涯时&#xff0c;正值互联网快速发展的时期&#xff0c;人们谈论的是“Web2.0”&#xff0c;这一概念引发了许多关于用户参与、社交媒体和在线合作的讨论。然而&#xff0c;随着时间的推…

DataStructure01|ArrayList和顺序表

ArrayList与顺序表 1.线性表 ​ 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列… ​ 线性表在逻辑上是线性结构&#xff0c;也就说…

掌握Python的X篇_4_开发工具ipython与vscode的安装使用

本篇将会介绍两个工具的安装及使用来提高Python的编程效率。 ipython&#xff1a;比python更好用的交互式开发环境vscode&#xff1a;本身是文本编辑器&#xff0c;通过安装相关的插件vscode可以作为python集中开发环境使用 掌握Python的X篇_4_开发工具ipython与vscode的安装使…