jsp java el_jsp之EL表达式
EL表达式
1. 什么是EL表达式
jsp中的EL(express language)表达式技术:它仅仅是表达式。
EL表达式的功能:
获取4个内置对象(域)中的数据,或自定义对象中的数据,或数组、集合容器中的数据。可以完成非常简单的运行,但它不能完成循环、复杂的判断等功能。
EL表达式的书写格式:${ 表达式 }
EL表达式的底层是我们前面学的jsp中的各种对象与方法的操作,只是做了一些优化;有一个很大的优化就是如果找不到数据的话不会返回null或者报异常,而是什么都不显示;
2. EL表达式获取域对象中的数据
格式1: ${xxxxScope.key}
使用el表达式从不同的域中取出数据,需要使用el中的4个内置对象搞定:pageScope、requestScope、sessionScope、applicationScope
在4个el内置对象xxxxScope取出保存的数据时,相当于使用pageContext.getAttribute(key,scope);取值
格式2: ${key}
如果不知道数据在哪个范围中,这时可以不用指定范围直接书写key值即可 ${key}
下面代码的底层对应的是 pageContext.findAttribute();
需求1: 通过el表达式 从指定域中获取数据(比较和java代码的不同)
需求2: 通过el表达式 从不确定域中获取数据
// 向4个域中设置数据
//pageContext.setAttribute("address", "上海1"); //两个参数,默认向page域中放
//pageContext.setAttribute("address", "上海2", PageContext.REQUEST_SCOPE);
//pageContext.setAttribute("address", "上海3", PageContext.SESSION_SCOPE);
//pageContext.setAttribute("address", "上海4", PageContext.APPLICATION_SCOPE);
%>
${pageScope.address1 }
${requestScope.address }
${sessionScope.address }
${applicationScope.address }
--%>
${address}
提示:通过上面的演示,发现EL表达式从四个域中取值,就是在代替使用PageContext中的getAttribute方法取值,底层依然在使用PageContext中的getAttribute方法。
注意:
1.EL表达式只可以从四大域中获取数据,但不可以存放数据
2.EL表达式中的内容会显示到浏览器上
2.使用pageContext的getAttribute方法或者findAttribute方法从4个范围中取出数据的时候,
如果指定的key不存在会返回null,而使用el表达式取出的时候指定的key不存在,页面上什么都不会显示。
演示:
java代码获取值:
el表达式: ${pageScope.address}
页面结果:
3. EL表达式获取复杂数据
这里说的复杂数据是指:数组,集合,自定义对象。
3.1. 演示EL获取数组中的值
演示代码:
页面结果:
注意:
1.${arr1}相当于直接调用arr数组对象的toString方法,因为数组中没有重写toString方法所以会显示地址
2.${arr1[3]} 如果在java中则会报索引越界的异常,但在EL表达式中做了优化,获取不到的数据什么都不会显示
3.2. 演示EL获取List集合中的值
注意:${list1}相当于直接调用list集合对象的toString方法,因为集合中重写了toString方法所以会显示集合的元素
3.3. 演示EL获取Map集合中的值
注意:
1.向map中存放数据map.put(“ccc.ddd.fff”,333),取出整个集合${map1}可以显示这个数据元素,
但单独从map中取出数据${map1.ccc.ddd.fff}这种格式则无法显示数据元素,所以使用第二种格式${map1[‘ccc.ddd.fff’]}则可以显示数据
2.两种取数据的格式
方式一:map1.eee 方式二:map1[‘eee’]
方式二使用“[]”代替了方式一“.”,又因为是字符串类型所以加上单引号,这样可以避免出错,两种方式看情况选择使用;
3.字符串类型的数据不要以数字开头,比如map.put(“444”,44444)不要使用
3.4. 演示EL获取自定义对象属性值
首先需要在项目中创建一个自定义的对象,这里创建User对象。并且针对User对象中的属性提供相应的get和set方法。
注意:${user1}相当于直接调用自定义类的toString方法,因为自定义类重写了toString方法所以会显示数据
注意:
1.在使用EL表达式取出数组,集合,自定义对象中的数据的时候,能够使用.的地方都可以使用中括号。特别是在map集合或者自定义对象中key值或自定义对的属性名中包含多个字符的时候必须使用中括号搞定。
2.在EL表达式中,获取对象的属性的值的时候,其实不是在看这个对象所在的类是否有这个属性,只要这个对象所在的类中有getXxxxx方法,就可以使用EL表达式获取Xxxx值。
4. EL表达式执行运算
1.使用el进行简单的运算的时候,如果指定的范围中的key不存在,这时就不会去使用这个值计算,但是存在的依然会进行运算
需求1: 将a和b保存到page域中,使用el计算a+b
需求2: 将a和b保存到page域中,使用el计算a+b+c
效果:
2.可以使用empty 验证某个容器或者变量是否为null
格式: ${ empty 集合或变量等}
如果集合元素的个数为0 或者集合不存在,或者 变量为null则返回true;否则返回false.
常用方式:
el中三元运算符: ${empty对象?表达式1 :表达式2 }
${not empty 对象?表达式1 :表达式2 }
需求1: 使用el表达式 判断集合是否为空
需求2: 使用el表达式 判断用户是否存在
注意:集合为空或者集合不存在,都是null的意思
5. EL的内置对象
EL表达式它也有自己的内置对象可以直接在EL表达式中使用:
注意:如果jsp中既有html代码也有java代码,会很麻烦,所以我们用EL表达式和JSTL标签代替java代码,
但是EL表达式和JSTL标签的底层调用的还是java代码,所以在jsp中注释时不可以使用html注释和java注释,而是使用jsp的注释;
5.1. 从不同的域中取值的四个内置对象
${XXXScope.key}
pageScope
requestScope
sessionScope
applicationScope
准备工作:
pageContext.setAttribute("address", "北京1"); // page
pageContext.setAttribute("address", "北京2", PageContext.REQUEST_SCOPE); // request
pageContext.setAttribute("address", "北京3", PageContext.SESSION_SCOPE); // session
pageContext.setAttribute("address", "北京4", PageContext.APPLICATION_SCOPE); // application(ServletContext)
%>
//pageContext.setAttribute("address", "北京1");//默认page域
//pageContext.setAttribute("address", "北京2",PageContext.REQUEST_SCOPE);
//pageContext.setAttribute("address", "北京3",PageContext.SESSION_SCOPE);
//pageContext.setAttribute("address", "北京4",PageContext.APPLICATION_SCOPE);
%>
${pageScope.address }
${requestScope.address }
${sessionScope.address }
${applicationScope.address }
java获取的简化方式:
el获取的简化方式: ${address}
演示注意:
1.page和request域从浏览器访问时重写输入地址既可以显示效果,session域需要重启浏览器,application域需要重启服务器才会显示效果;
2.使用Java代码的方式如果获取不到数据输出null,EL表达式的方式则什么都不会显示;
5.2. 专门获取浏览器请求服务器时携带参数的2个内置对象:
param 获取用户提交的某个数据,针对一key一value可以理解成: request.getParameter(name)
paramValues 获取用户提交的某个数据,针对一key多value可以理解成: request.getParameterValues(name)
param对象的使用
${param.username }
--%>
paramValues对象的使用(多选)
String[] hobbys = request.getParameterValues("hobby");
out.println(hobbys[0]);
out.println(hobbys[1]);
%>
${paramValues.hobby[0]}
${paramValues.hobby[1]}
${paramValues.hobby[2]}
5.3. 专门获取浏览器请求服务器时请求头中数据的2个内置对象:
header 获取请求头中的信息,针对一key一value
headerValues 获取请求头中的信息,针对一key多value
注意:有特殊字符的使用EL表达式时不可以使用“.”的方式,而要使用“[‘ str ’]”的方式;
5.4. cookie它获取到的一个cookie数组
cookie
获取cookie对象: ${cookie.cookie的名称},如${cookie.username}
获取cookie对象的名称: ${cookie.cookie的名称.name}如: ${cookie.username.name}
获取cookie对象的值: ${cookie.cookie的名称.value}如: ${cookie.username.value}
需求: 在JSP页面向浏览器发送cookie,在访问时获取cookie中的数据
02.jsp
// 创建cookie
Cookie cookie = new Cookie("username","fengjie");
// 设置有效路径
cookie.setPath("/");
// 设置最大生存时间
cookie.setMaxAge(60 * 30);
// 给浏览器发送cookie
response.addCookie(cookie);
%>
03.jsp
获取cookie的内容
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie cookie : cookies){
String name = cookie.getName();
String value = cookie.getValue();
if("username".equals(name)) {
out.println(name +"::::"+ value);
}
}
}
%>
${cookie.username }
${cookie.username.name }
${cookie.username.value }
注意:
${cookie.username } 获取的是Cookie("username","fengjie")对象;显示出来为对象的地址值;
${cookie.username.name } 获取的是Cookie("username","fengjie")对象的neme值username;
${cookie.username.value } 获取的是Cookie("username","fengjie")对象的value值fengjie;
5.5. 其他对象
pageContext 它就和JSP内置对象pageContext功能一致(重点)
initParam 获取的项目的全局配置参数,类似于ServletContext中的getInitParameter(String name)方法功能(它只能获取到web.xml配置的全局参数,每个servlet单独配置的无法使用initParam获取)。
pageContext对象的使用
03页面
03页面
03页面
HttpServletRequest r = (HttpServletRequest)pageContext.getRequest();
out.println(r.getContextPath());
%>
el表达式获取项目名:${pageContext.request.contextPath }
el表达式获取项目名:${request.contextPath }
initParm对象的使用
${initParm.company }
在web.xml文件中配置全局参数
company
传
注意:
1.jsp中内置九大对象,所以在java代码中可以直接使用这九大对象,但是el表达式虽然也在jsp页面中却不可以使用jsp中的九大对象,
而是使用el表达式中的11个内置对象;
Jsp中九大内置对象: page request session application(ServletContext) pageContext response config out exception
EL表达式11大对象:pageScope requestScope sessionScope applicationScope param paramValues header headerValues cookie pageContext initParam
5.6. jsp的内置对象和EL的内置对象区分:
jsp页面中的Java代码中可以直接使用的对象称为JSP的内置对象。
EL表达式中11个内置对象,在EL表达式中也可以直接去使用这些对象${ EL的内置对象.key值或者其他的信息 }
注意:EL表达式的作用就是从四大域中取数据,前提是先有数据向域中存放;
jsp java el_jsp之EL表达式相关推荐
- java 代码执行el,专属于java的漏洞——EL表达式注入
前言"FSRC经验分享"系列文章,旨在分享焦点科技信息安全部工作过程中的经验总结,包括但不限于漏洞分析.运营技巧.sdl推行.等保合规.自研工具等等. 欢迎各位安全从业者持续关注~ ...
- 案例:对比使用Java代码与EL表达式获取信息
一.创建MyServlet public class MyServlet extends HttpServlet {public void doGet(HttpServletRequest reque ...
- java调用el_[Java教程][javaEE] EL表达式调用java方法
[Java教程][javaEE] EL表达式调用java方法 0 2016-07-03 18:00:03 1.新建个类,类里面定义静态方法 package com.tsh.utils;import j ...
- JSP复习(二):EL表达式
2019独角兽企业重金招聘Python工程师标准>>> EL表达式:从JSP2.0开始成为规范,是的原来用scriptlet和表达式完成的事情,EL都能完成 1.配置相关 ${app ...
- java学习笔记—EL表达式(38)
EL表达式 EL即Expression Language,主要的任务是帮助开发者简化获取域属性. 但是一般情况下需要使用EL和JSTL结合使用. 语法: ${ // 隐含对象|直接写域中的属性 } ...
- jsp脚本、jsp标准动作、EL表达式、JSTL标签
https://blog.csdn.net/gx_hxl/article/details/79032331 https://blog.csdn.net/a731604348/article/detai ...
- 如何才能在jsp文件中使用el表达式
jsp引入el表达式 1.需要的jar包 jstl.jar standard.jar 2.创建一个jsp文件如下 <%@ page language="java" conte ...
- jsp中无法识别EL表达式问题
今天在开发系统时需要在JSP中遍历List<javabean>,其中用到了EL表达式:${item.value} 页面死活不出数据,只显示表达式本身:${item.value}. 页面代码 ...
- jsp学习(十一,el表达式)
在学习JSP时看到了${}写法,当时以为就等于<%=%>,其实非常错误 目录 EL表达式介绍 JSP,EL对照表 EL访问Bean的属性 EL表达式介绍 Expression Langua ...
最新文章
- gulp将多张小图自动合成雪碧图
- 亚马逊AWS在线系列讲座——基于AWS云平台的高可用应用设计
- php考过来运行后报乱码,PHP接收GET中文参数乱码怎么办
- eclipse 矩阵删除行列,也可以矩阵形式编辑
- 电源管理与驱动设计笔记
- 服务器迁移中心 SMC 最佳实践及新特性介绍
- ionic创建应用的三个模版
- Excel怎么求和?5大常用的Excel求和公式
- Python 实验二 tkinter 版小学数学口算题生成器设计与实现
- 关于计算机的英语作文初中,computer初中英语作文范文
- 在 LaTeX 中插入图片
- 【Trailhead题目解析】Prepare your salesforce org for users - 1Set Up the Exchange Rate
- WIN7中修改Jar文件打开方式的方法
- PLG SaaS 产品 Figma 商业模式拆解
- 前端加密 后端Java解密
- 推荐一个免费服务器网站|亲测可用
- 推箱子游戏 java源代码_java推箱子游戏源代码(含推箱子的判断)
- [ZZ]变速齿轮作者的文章--绝杀反外挂方案
- 期货中的正向交易与反向交易
- 全新H3C品牌服务器与存储产品亮相 引领中国IT协同创新之路
热门文章
- linux c语言显示器api,API级别的Unicode GUI用于Windows / Linux / Mac的C语言本机应用程序...
- 天线决定接受频率_对讲机天线到底有多重要?通讯效果好不好要靠它!
- php flock 死锁了,php – 防止由flock引起的死锁
- java初反射_初始 java 反射机制 (一)
- linux+分配挂载点权限,Linux系统管理(一)——初学者建议
- php simplexml 遍历,php下使用SimpleXML 处理XML 文件
- 基于Matlab血管切片的三维重建(资源整合)
- Vs code如何快速生成Verilog例化模板
- FPGA之道(12)FPGA芯片的配置方式
- 【 FPGA 】虚拟时钟