Java Web - EL表达式和JSTL标签库
在使用servlet和jsp的过程中,两者之间的数据流转是十分常见的,jsp实际上也是一种servlet,也就是两个servlet之间的数据流转,我们根据不同的使用场景选择使用,请求转发(在request中写入键值对),session,ServletContext对象来实现。那么在JSP中如何使用这些数据?
一 传统方式的数据获取
传统方式直接在JSP页面中使用java脚本段语句,例如使用请求转发过来的数据:
对于普通的字符串
<p><%=request.getParameter("key")%></p>
<p><%=request.getAttribute("key")%></p>
对于对象而言
<p><%=((User)request.getAttribute("key")).getName()%></p>
对于字符串List集合而言
<p><%=((List)request.getAttribute("key")).get(0)%></p>
对于对象List集合而言
<p><%=((User)((List)request.getAttribute("key")).get(0)).getName()%></p>
//or
<p><%=((List<User>)request.getAttribute("key")).get(0).getName()%></p>
对于key和value都是字符串的Map集合而言
<p><%=((Map)request.getAttribute("key")).get("mapKey")%></p>
对于key为字符串value为对象的Map集合而言
<p><%=((User)((Map)request.getAttribute("key")).get("mapKey")).getName()%></p>
使用传统方式,可以看到缺点有以下这些:
- 需要导入包
- 需要强转
- 获取数据的代码过于麻烦
所以我们可以使用EL表达式来取代上面传统方式,目的在于简化JSP的数据获取,它也可以配合JSTL来使用,JSTL将在下面讲解。
使用EL表达式获取作用域中的数据有一个需要注意的地方:只能使用作用域中的数据,也就是只能取session,pageContext,request,application对象中的数据,他们是JSP九大内置对象中的四种,如果找到则显示,否则不显示,也没有其他动作。
二 使用EL表达式在JSP中获取数据
EL表达式语法:
${表达式}
对于request对象的特殊性:
我们知道,request对象,可能原本就包含一些数据,也就是用户提交的一些数据,对于这些数据我们需要用下面的语法来获取数据:
- param.键名
对于同键不同值的情况,例如多选框: - paramvalues.键名 返回数组
通过setAttribute方法存储到作用域对象中的数据
如果存储的是普通字符串则直接返回。
- ${键名}
但是如果是对象,则返回对象
普通对象
- $(键名.属性名.属性名…)
集合对象
- list集合 ->>>>${键名[角标]}
- map集合 ->>>>${键名.map集合存储的键名}
所以传统方式的查询可以改成:
对于普通的字符串
<p>${param.uname}</p>
<p>${str}</p>
对于对象而言
<p>${userName.name}</p>
对于字符串List集合而言
<p>${listName[0]}</p>
对于对象List集合而言
<p>${listName[0].name}</p>
对于key和value都是字符串的Map集合而言
<p>${mapName.mapKey}</p>
对于key为字符串value为对象的Map集合而言
<p>${mapName.mapKey.name}</p>
EL表达式在作用域对象中查找的优先级为(上高下低):
- pageContext
- request
- session
- application
如果在高优先级中找到的话,下面的作用域就不再查找了。如果需要指定查找的作用域,则需要这样写:
${pageScope.hello}
${requestScope.hello}
${sessionScope.hello}
${applicationScope.hello}
三 EL表达式的其他作用
EL表达式不单可以用来获取数据,也可以有其他用途
1 运算
逻辑运算
${a?man:woman}
这里到作用域中查看a所对应的值,如果为true则为man,否则为woman
算术运算
${1+"2"} //输出为3
+表示加法运算,不表示字符连接
EL的空值判断
request.setAttribute("s", "");
request.setAttribute("s1", new User());
request.setAttribute("s2", new ArrayList());
request.setAttribute("s3", new HashMap());
${empty s} //返回true
${empty s1} //返回false,因为User对象中的数据有默认值
${empty s2} //返回true
${empty s3} //返回true
2 获取请求头数据
${header}//返回所有请求头数据
${header["user-agent"]} //返回指定键名的请求头数据
//同键不同值
${headerVlues["accept-language"][0]}
3 获取Cookie数据
//我们假设cookie中有这么一项: cookie:uid=1
${cookie} //返回所有cookie对象的map集合
${cookie.uid} //返回指定的cookie对象
${cookie.uid.name} //返回cookie对象存储数据的值 uid
${cookie.uid.value} //返回cookie对象存储数据的值 1
四 JSTL标签库
我们常常会避免在JSP中的HTML代码域写过多的java逻辑代码,因为在JSP中写业务逻辑的时候比较复杂,不单单是看着复杂,而且写完后也不好修改。因此JSTL就诞生了,JSTL将提升在JSP页面逻辑代码的编码效率。它的作用就像是让我们在JSP中编写代码更加像在编写java代码一样。在学习后JSTL后,你应该不用在JSP的HTML代码域中掺和java代码了。
JSTL是EL表达式的扩展,是一种标签语言,不过它不是JSP的内置标签,所以需要我们自己导入JAR包,来识别这种标签。
关于JSTL标签的使用,下面的网站,给出了总结,其中核心标签使用的比较多,应该作为学习重点
https://www.runoob.com/jsp/jsp-jstl.html
Java Web - EL表达式和JSTL标签库相关推荐
- java标签库jstl-el表达式介绍使用配置手册_JAVA EE 实验报告EL表达式和jstl标签库的使用...
昆明理工大学信息工程与自动化学院学生实验报告 ( 2013 -2014 学年第一学期) 课程名称:Java EE技术开课实验室:系机房444 2013 年 12月2 日年级.专业.班计科111 学号姓 ...
- spring mvc学习(37):JavaEE-JSP基础-EL表达式和JSTL标签库(Taglibs)
EL表达式和JSTL标签库: 在JSP页面代替java代码,便于编写 一.EL表达式 作用: ${} 简化脚本表达式 <%= %> j2ee1.4以前版本需指定<%@ page is ...
- 28. EL 表达式 以及 JSTL 标签库
28. EL 表达式 以及 JSTL 标签库 1.EL 表达式 a)什么是 EL 表达式,EL 表达式的作用? EL 表达式的全称是:Expression Language.是表达式语言. EL 表达 ...
- 【JSP教科书】JSP知识在线指南(记录知识JSP体系、EL表达式、JSTL标签库、JSP开发模型和分页查询)
文章目录 @[toc] 一.JSP简介 1.1 什么是JSP? 1.2 JSP的特点 1.3 JSP为什么也是Servlet 1.4 tomact服务器中的资源分析 1.4.1 tomact服务器中的 ...
- Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
来自:http://blog.csdn.net/love_you_99/article/details/8184797 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极 ...
- EL表达式和JSTL标签库使用
EL表达式 介绍: EL(Expression Language) 目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP ...
- EL表达式、JSTL标签库、文件上传和下载
一.EL表达式 1.什么是EL表达式,EL表达式的作用? EL表达式的全称是:Expression Language,是表达式语言. EL表达式的作用:EL表达式主要是替代jsp页面中的表达式脚本在j ...
- EL表达式和JSTL标签库学习笔记
先说一些数据库的知识,在进行表的操作时,若有一对多的关系,则在建外键时应选择多的一方.如user和group的对应关系,应在一个user属于多少个group,而不是一个group有多少用户,虽然这样也 ...
- EL表达式与Jstl标签库学习
一.EL表达式 1)概念:Expression Language(EL表达式),jsp文件内置的一种能简化代码的表达式,可供jsp文件对流转数据的读取. 2)作用:让 jsp 书写起来更加的方便.简化 ...
最新文章
- python 解决IndentationError: unexpected unindent的报错!和通用代码框架,import requests def getHTMLText(url)...的解释
- JAVA数组编程教程_Java语言编程基础:数组
- 汽车自动泊车APA简介
- python selenium p_python selenium 常见问题列表
- 再见安卓 鸿蒙,安卓系统:鸿蒙系统,正式再见
- 前端学习(1927)vue之电商管理系统电商系统之美化一层循环的UI结构for循环渲染第三层结构
- (2) 第二章 WCF服务与数据契约 服务契约详解(三)- [ServiceContract]特性
- IEEE 802.1x 硬件参加的过程
- CentOS图形界面和命令行切换
- 手机怎样才能接收到五公里外的WiFi信号?
- 【AtCoder】ARC 081 E - Don't Be a Subsequence
- Swift3 获取系统音量和监听系统音量
- PHP设计模式——概述
- 大规模Web服务开发技术
- 5999卖999!是噱头还是颠覆
- Leetcode题目practice
- iso12233测试方法_ISO12233 Test Chart (ISO12233标准分辨率测试卡)使用说明
- 【完整matlab程序】【预测程序】狼群优化算法及BP神经网络
- C语言cat函数的功能,R语言cat()函数
- window安装mysql默认密码忘记_MySQL忘记root密码的处理办法及安装windows服务
热门文章
- AngularJs 常用指令标签
- Android开发7——android.database.CursorIndexOutOfBoundsException:Index -1 requested
- poj2912(带权并查集+枚举)
- char,Character,int,字符及编码日记 1
- python分割文件目录/文件名和后缀
- 如何节省 1TB 图片带宽?解密极致图像压缩
- LCD控制器与帧率、刷新率的关系分析
- Atitit sql计划任务与查询优化器--统计信息模块
- 【C语言】06-基本数据类型
- 私人定制---打造属于自己的linux小系统