在使用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标签库相关推荐

  1. java标签库jstl-el表达式介绍使用配置手册_JAVA EE 实验报告EL表达式和jstl标签库的使用...

    昆明理工大学信息工程与自动化学院学生实验报告 ( 2013 -2014 学年第一学期) 课程名称:Java EE技术开课实验室:系机房444 2013 年 12月2 日年级.专业.班计科111 学号姓 ...

  2. spring mvc学习(37):JavaEE-JSP基础-EL表达式和JSTL标签库(Taglibs)

    EL表达式和JSTL标签库: 在JSP页面代替java代码,便于编写 一.EL表达式 作用: ${} 简化脚本表达式 <%= %> j2ee1.4以前版本需指定<%@ page is ...

  3. 28. EL 表达式 以及 JSTL 标签库

    28. EL 表达式 以及 JSTL 标签库 1.EL 表达式 a)什么是 EL 表达式,EL 表达式的作用? EL 表达式的全称是:Expression Language.是表达式语言. EL 表达 ...

  4. 【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服务器中的 ...

  5. Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用

    来自:http://blog.csdn.net/love_you_99/article/details/8184797 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极 ...

  6. EL表达式和JSTL标签库使用

    EL表达式 介绍: EL(Expression Language)  目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP ...

  7. EL表达式、JSTL标签库、文件上传和下载

    一.EL表达式 1.什么是EL表达式,EL表达式的作用? EL表达式的全称是:Expression Language,是表达式语言. EL表达式的作用:EL表达式主要是替代jsp页面中的表达式脚本在j ...

  8. EL表达式和JSTL标签库学习笔记

    先说一些数据库的知识,在进行表的操作时,若有一对多的关系,则在建外键时应选择多的一方.如user和group的对应关系,应在一个user属于多少个group,而不是一个group有多少用户,虽然这样也 ...

  9. EL表达式与Jstl标签库学习

    一.EL表达式 1)概念:Expression Language(EL表达式),jsp文件内置的一种能简化代码的表达式,可供jsp文件对流转数据的读取. 2)作用:让 jsp 书写起来更加的方便.简化 ...

最新文章

  1. python 解决IndentationError: unexpected unindent的报错!和通用代码框架,import requests def getHTMLText(url)...的解释
  2. JAVA数组编程教程_Java语言编程基础:数组
  3. 汽车自动泊车APA简介
  4. python selenium p_python selenium 常见问题列表
  5. 再见安卓 鸿蒙,安卓系统:鸿蒙系统,正式再见
  6. 前端学习(1927)vue之电商管理系统电商系统之美化一层循环的UI结构for循环渲染第三层结构
  7. (2) 第二章 WCF服务与数据契约 服务契约详解(三)- [ServiceContract]特性
  8. IEEE 802.1x 硬件参加的过程
  9. CentOS图形界面和命令行切换
  10. 手机怎样才能接收到五公里外的WiFi信号?
  11. 【AtCoder】ARC 081 E - Don't Be a Subsequence
  12. Swift3 获取系统音量和监听系统音量
  13. PHP设计模式——概述
  14. 大规模Web服务开发技术
  15. 5999卖999!是噱头还是颠覆
  16. Leetcode题目practice
  17. iso12233测试方法_ISO12233 Test Chart (ISO12233标准分辨率测试卡)使用说明
  18. 【完整matlab程序】【预测程序】狼群优化算法及BP神经网络
  19. C语言cat函数的功能,R语言cat()函数
  20. window安装mysql默认密码忘记_MySQL忘记root密码的处理办法及安装windows服务

热门文章

  1. AngularJs 常用指令标签
  2. Android开发7——android.database.CursorIndexOutOfBoundsException:Index -1 requested
  3. poj2912(带权并查集+枚举)
  4. char,Character,int,字符及编码日记 1
  5. python分割文件目录/文件名和后缀
  6. 如何节省 1TB 图片带宽?解密极致图像压缩
  7. LCD控制器与帧率、刷新率的关系分析
  8. Atitit sql计划任务与查询优化器--统计信息模块
  9. 【C语言】06-基本数据类型
  10. 私人定制---打造属于自己的linux小系统