EL标签-给JSP减负

news2024/10/7 18:27:43

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表达式的“$”符号前加入一个反斜杠即可,如“\$”。

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

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

相关文章

仙境传说RO:服务器外网架设登陆教程

仙境传说RO&#xff1a;服务器外网架设登陆教程 大家好我是艾西&#xff0c;今天跟大家说一下自己编译的仙境传说RO服务端怎么开启外网让小伙伴和你一起玩。 目前开放的现成端有以下版本&#xff1a; 仙境传说ro守护永恒的爱 仙境传说ro爱如初见 仙境传说ro黑色派对 仙境…

docker-compose把微服务部署到centos7

前言 这里主要记录以下微服务使用docker、docker-compose部署遇到的一些问题&#xff0c;大佬可以绕道去看看自动化集成这篇文章 部署之前你需要准备一些内容 微服务 这里feign-api是用来做服务之间相互调用的&#xff0c;单独抽离成了一个模块&#xff0c;gateway是服务网关&…

中国电子学会2023年05月份青少年软件编程C++等级考试试卷三级真题(含答案)

1.找和为K的两个元素 在一个长度为n(n < 1000)的整数序列中&#xff0c;判断是否存在某两个元素之和为k。 【输入】 第一行输入序列的长度n和k&#xff0c;用空格分开。 第二行输入序列中的n个整数&#xff0c;用空格分开。 【输出】 如果存在某两个元素的和为k&#xff0c…

CentOs中文件权限命令

文件权限&#xff1a; ls -l命令查看文件详情&#xff0c;前十位就是文件的类型和权限 第一位&#xff1a;类型&#xff1a; - 普通文件 d 目录 l 链接文件&#xff08;快捷方式&#xff09;link 2~4位&#xff1a;所有者的权限 5~7位&#xff1a;所有者所在组其它用户的权限 …

AI绘图-StableDiffusion安装

AI绘图-StableDiffusion安装 安装Python 1、去官网 https://www.python.org/downloads/ 下载Python3.10.10版本&#xff0c;网上建议下载3.10.6版本。 2、安装Python,打开安装界面&#xff0c;注意把Add Python to PATH选项勾上&#xff0c;然后选择自定义安装 3、点击WinR…

【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)

目录 一、链表基本概念和基本代码实现二、链表、动态数组整合&#xff08;面向接口编程&#xff09;三、clear()四、add(int index, E element)(1) 找到 index 位置的节点(2) get(int index) 和 set(int index, E element)(3) add(int index, E element) 五、remove(int index)…

基于Java+Swing+Socket实现中国象棋-网络版

基于JavaSwingSocket实现中国象棋-网络版 一、系统介绍二、功能展示1.系统登陆2.选择黑色方进行对局3.整体页面4、保存棋谱5、认输 三、其他系统四、获取源码 前言 中国象棋是起源于中国的一种棋&#xff0c;属于二人对抗性游戏的一种&#xff0c;在中国有着悠久的历史。由于用…

员工管理业务开发 -- 手把手教你做ssm+springboot入门后端项目黑马程序员瑞吉外卖(三)

文章目录 前言六、员工管理业务开发1.开发功能预览2.新增员工功能1&#xff09;需求分析2&#xff09;数据模型&#xff08;表&#xff09;3&#xff09;代码开发4&#xff09;功能测试5&#xff09;编写全局异常处理器 3.员工信息分页查询1&#xff09;需求分析2&#xff09;代…

VS Code的下载安装,及其简单使用

目录 前言 一.下载 二.安装 三.VS Code的插件安装 &#x1f496;插件正常安装 &#x1f496;插件安装异常 四.VS Code的配置 五.VS Code的基本使用 总结 &#x1f381;个人主页&#xff1a;tq02的博客_CSDN博客-C语言,Java领域博主 &#x1f3a5; 本文由 tq02 原创&#…

Redis 分布式锁实现

Redis 分布式锁 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁 特点&#xff1a; 多线程可见互斥高可用高性能&#xff08;高并发&#xff09;安全性、可重入性、重试机制、锁超时自动续期等 … 加锁之后&#xff0c;对整个分布式集群都有效 基于…

多线程之常用线程安全类型分析

写在前面 本文一起看下在日常工作中我们经常用到的线程安全的数据类型&#xff0c;以及一些经验总结。 1&#xff1a;常用线程安全数据类型 1.1&#xff1a;jdk集合数据类型 jdk的集合数据类型分为两类&#xff0c;一种是线性数据结构&#xff0c;另外一种是字典结构&#…

【系统架构】第五章-软件工程基础知识(一)

软考-系统架构设计师知识点提炼-系统架构设计师教程&#xff08;第2版&#xff09; 软件工程 一、软件过程模型 1、瀑布模型 特点&#xff1a;前一个阶段工作的输出结果&#xff0c;是后一个阶段工作的输入 缺点&#xff1a; 软件需求的完整性、正确性等很难确定&#xff0c…

人力资源外包系统(社会实践管理系统)需求分析文档

该系统主要针对当前在校大学生、中专院校学生寒、暑假社会实践而设计的管理系统&#xff1b; 主要用户群为人力资源外包公司&#xff0c;也可以是各个学校管理学生使用&#xff1b; 主要功能有维护企业信息&#xff0c;招工信息&#xff0c;企业宣传资料&#xff1b;维护学校…

基于JavaSpringBoot+uniapp制作一个记账小程序

你不理财,财不理你,制作一个记账小程序对自己的收入/支出明细进行管理,守护好自己的钱袋子。 一、小程序1.1 项目创建1.2 首页1.3 收支报表页1.4 记账提交页1.5 记账列表页

NCI Core Framework

3.1 概述 NCI 核心包括以下必需的功能&#xff1a;  通过 NCI 传输命令、响应、通知和数据消息的数据包格式。  用于设备主机和 NFC 控制器之间不同操作&#xff08;第 4 节中指定&#xff09;的命令、响应和通知的定义。 &#xff08;本规范后面的一些部分定义了不属于…

一起学SF框架系列4.7-模块context-MessageResource

Spring通过MessageSource接口提供了国际化&#xff08;“i18n”&#xff09;功能。搞明白MessageResource相关接口和类&#xff0c;基本就掌握了国际化功能。 MessageSource接口 定义了消息访问接口。 String getMessage&#xff08;String code&#xff0c;Object[]args&…

全网唯一!Matlab原神配色包MGenshin

前段时间&#xff0c;在原神官网逛了一圈&#xff0c;发现里面角色的原画配色十分的好看&#xff0c;便突发奇想&#xff1a;要是把原神配色用在SCI论文插图上&#xff0c;emmmmm…… 于是&#xff0c;我默默打开了自己的Matlab&#xff0c;用TheColor工具箱的图片主题色提取功…

数据驱动的商业决策:BI在企业中的重要性

第一章&#xff1a;引言 在当今数字化时代&#xff0c;数据被广泛应用于各个行业和领域。对企业而言&#xff0c;数据是一项宝贵的资源&#xff0c;可以为其带来无限的商机和竞争优势。然而&#xff0c;海量的数据本身并不具备实际意义&#xff0c;只有通过有效的数据分析和洞…

亚马逊云科技中国峰会:Amazon DeepRacer-梦想加速度

零&#xff1a;前言 你是否憧憬在赛车赛道上开车&#xff0c;享受疾驰而过的感觉&#xff0c;感受无与伦比的驾驶乐趣&#xff1f; Amazon DeepRacer可以满足你的梦想&#xff0c;虚竹哥带你了解Amazon DeepRacer。 它为用户提供了一个虚拟仿真环境和一个真实赛车模型&#xf…

【JDK环境配置】| 两种JDK环境能在同一台电脑共存吗?(文末送书)

目录 &#x1f981; 前言&#x1f981; 基础环境&#x1f981; 安装JDK1.8Ⅰ. 下载Ⅱ. 安装 &#x1f981; 在项目里更改JDK版本---------------------------------------------福利在下面--------------------------------------------------&#x1f981; 福利&#xff08;送…