目录

7.1 初识 JavaBean

7.1.1 什么是 JavaBean

7.1.2 访问 JavaBean 的属性

7.1.3 BeanUtils 工具

7.2 EL 表达式

7.2.1 初始 EL

7.2.2 EL 中的标识符

7.2.3 EL 中的保留字

7.2.4 EL 中的变量

7.2.5 EL 中的常量

1.布尔常量

2.整型常量

3.浮点数常量

4.字符串常量

5.Null常量

7.2.6 EL 中的运算符

1.点运算符(.)

2.方括号运算符

3.算术运算符

4.比较运算符

5.逻辑运算符

6.empty运算符

7.条件运算符

8.“()”运算符

7.2.7 EL 隐式对象

1.pageContext对象

2.Web域相关对象

3.param和paramValues对象

4.Cookie 对象

7.3 JSTL

7.3.1 什么是JSTL

7.3.2 JSTL 的下载和使用

7.3.3 JSTL 中的Core标签库

1.标签

2.标签

3.标签

4.标签

5.标签和标签


7.1 初识 JavaBean

7.1.1 什么是 JavaBean

JavaBean就是一个封装了需要重复使用的数据和功能的类。

JavaBean的规范:

  1. 它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的默认构造方法。

  2. 它提供公共的setter方法和getter方法(至少提供其中一个),让外部程序设置和获取JavaBean属性。

7.1.2 访问 JavaBean 的属性

public String getName() {...}
public void setName() {...}
  • getName()方法:称为getter方法或者属性访问器,该方法以小写的get前缀开始,后跟属性名,属性名的第1个字母要大写。
  • setName()方法:称为setter方法或者属性修改器,该方法必须以小写的set前缀开始,后跟属性名,属性名的第1个字母要大写。

只读属性,只写属性,读写属性。

如果属性的类型为boolean,它的命名方式应该使用is/set,而不是get/set。

7.1.3 BeanUtils 工具

可以实现动态访地问Java对象的属性。

需要的包:

  1. commons-beanutils.jar
  2. commons-logging.jar

7.2 EL 表达式

它是一种简单的数据访问语言,可以简化JSP页面的书写。

7.2.1 初始 EL

${表达式}

7.2.2 EL 中的标识符

命名规范:

  • 不能以数字开头。
  • 不能是EL中的保留字,如and、or、gt。
  • 不能是EL隐式对象,如pageContext。
  • 不能包含单引号(`)、双引号(")、减号(-)和正斜杠(/)等特殊字符。

合法标识符

不合法标识符

7.2.3 EL 中的保留字

不能被作为标识符。

7.2.4 EL 中的变量

${product}

EL表达式中的变量不用事先定义就可以直接使用。

7.2.5 EL 中的常量

1.布尔常量

true和false

2.整型常量

之间的整数。

3.浮点数常量

4.9E-324-1.8E308之间的浮点数。

4.字符串常量

单引号(\')

双引号(\")

反斜杠(\\)

只有字符串常量用单引号引起来时,字符串本身包含的单引号才需要进行转义,而双引号不必进行转义;只有字符串常量用双引号引起来时,字符串本身包含的双引号才需要进行转义,而单引号不必转义。

5.Null常量

对象为空。

7.2.6 EL 中的运算符

1.点运算符(.)

用于访问JSP页面中某些对象的属性。

${customer.name}

2.方括号运算符

用于访问JSP中某些对象的属性(属性名包含特殊符号"-","?"只能用这个)。

${user["My-Name"]}
  • 点运算符和符号运算符在某种情况下可以互换,如${student.name}等价于${student["name"]}。
  • 方括号运算符还可以访问List集合或数组中指定索引的某个元素,如表达式${user[0]}用于访问集合或数组中第1个元素。在这种情况下,只能使用方括号运算,而不能使用点运算符。
  • 方括号运算符和点运算符可以相互结合使用,例如,表达式${users[0].userName}可以访问集合或数组中的1个元素的userName属性。

3.算术运算符

EL表达式中的算数运算符用于对整数和浮点数的值进行算术运算。

4.比较运算符

EL表达式中的比较运算符用于比较两个操作数的大小。

  • 为了避免与JSP页面的标签产生冲突,对于后4中比较运算符,EL表达式中通常使用括号内的表示方式。

5.逻辑运算符

用于对结果为布尔类型的表达式进行运算。

6.empty运算符

EL表达式中的empty运算符用于判断某个对象是否为null或“ ”,结果为布尔类型。

${empty var}

7.条件运算符

用于执行某种条件判断,类似于if-else。

${A?B:C}

8.“()”运算符

用于改变其他运算符的优先级。

在应用EL表达式取值时,没有数组的下标越界,没有空指针异常,没有字符串的拼接。

7.2.7 EL 隐式对象

EL中的隐式对象共有11个。

1.pageContext对象

可以获取其他10个隐式对象。示例如下:

${pageContext.response.characterEncoding}

pageContext对象用于获取response对象中的characterEncoding属性。

2.Web域相关对象

在Web开发中,PageContext、HttpServletRequest、HttpSession和ServletContext这4个对象之所以可以存储数据,是因为它们内部都定义了一个Map集合,这些Map集合是有一定作用范围的。我们习惯吧这些Map集合称为域,这些Map集合所在的对象称为域对象。在EL表达式中,为了获取指定域中的数据,提供了pageScope、requestScope、sessionScope和applicationScope4个隐式对象,示例代码如下。

${pageScope.userName}
${requestScope.userName}
${sessionScope.userName}
${applicationScope.userName}

EL表达式只能在这4个作用域中获取数据。

3.param和paramValues对象

param对象用于获取请求参数的某个值,它是Map类型。如果参数不存在,返回的是空字符串,而不是null。

${param.num}

如果一个请求参数有多个值,可以使用paramValues对象来获取请求参数的所有值,该对象用于返回请求参数所有值组成的数组。如果要获取某个请求参数的第1个值,可以使用如下代码

${paramValues.nums{0}}

4.Cookie 对象

获取cookie对象的信息:${cookie.userName}
获取cookie对象的名称:${cookie.userName.name}
获取cookie对象的值:${cookie.userName.value}

第1次访问服务器时,服务器会向浏览器会写一个Cookie,此时的Cookie信息是存储在浏览器中的。当刷新浏览器,第2次访问cookie.jsp页面时,由于浏览器中已经存储了名为userName的Cookie信息,当再次访问相同资源时,浏览器会将此Cookie信息一同发送给服务器,这时使用表达式${cookie.userName.name}和${cookie.userName.value}便可获取Cookie的名称和值。

7.3 JSTL

7.3.1 什么是JSTL

标准标签库。实际上这个标准标签库是由5个不同功能的标签共同组成的。

  • Core是一个核心标签库,它包含了实现Web应用中通用操作的标签。例如,用于输出文本内容的<c:out>标签、用于条件判断的<c:id>标签、用于迭代循环的<c:forEach>标签。
  • |18N是一个国际化/格式化标签,它包含实现Web应用程序的国际化标签和格式化标签。例如,设置JSP页面的本地信息、设置JSP页面的时区、使日期按照本地格式显示等。
  • SQL是一个数据库标签库,它包含了用于访问数据库和对数据库中的数据进行操作的标签。例如,从数据库中获得数据库连接、从数据库表中检索数据等。由于在软件分层开发模型中,JSP页面仅作为表示层,一般不会在JSP页面中直接操作数据库,因此,JSTL中提供的这套标签库不经常使用。
  • XML是一个操作XML文档的标签库,它包含对XML文档中的数据进行操作的标签。例如,解析XML文件、输出XML文档中的内容,以及迭代处理XML文档中的元素。XML广泛应用于Web开发,使用XML标签库处理XML文档更加简单方便。
  • Functions是一个函数标签库,它提供了一套自定义EL函数,包含了JSP网页制作者经常用到的字符串操作。例如,提取字符串中的子字符串、获取子字符串的长度等。

7.3.2 JSTL 的下载和使用

1.下载JSTL包

jstl.jar

standard

2.导入JSTL包

3.测试JSTL

由于在测试的时候使用的是<c:out>标签,因此,需要使用taglib指令带入Core标签库,具体代码如下。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

uri属性用于指定引入标签库描述符文件的URL,prefix属性用于指定引入标签库描述符文件的前缀,在JSP文件中使用这个标签库中的某个标签时,都需要使用这个前缀。

7.3.3 JSTL 中的Core标签库

1.<c:out>标签

该标签可以将一段文本内容或表达式的结果输出到客户端。

语法1:没有标签体的情况(需要使用default属性指定默认值)

<c:out value="value" [default="defaultValue"]
[escapeXml="{true|false}"]/>

语法2:有标签体的情况(在标签体中指定输出的默认值)

<c:out value="value" [escapeXml="{true|false}"]>defaultValue
</c:out>
  • value属性用于指定输出的文本内容。
  • default属性用于指定当value属性为null时所输出的默认值,该属性是可选的(方括号中的属性都是可选的)。
  • escapeXml属性用于指定是否将>、<、&、'、"等特殊字符进行HTML编码转换后再进行输出,默认值为true。

需要注意的是,只有当value属性值为null时,<c:out>标签才会输出默认值,如果没有指定默认值,则默认输出空字符串。

(1)使用<c:out>标签输出默认值

如果不想让<c:out>标签输出默认值,可以在客户端访问c_out1.jsp页面时传递一个参数,在浏览器地址栏中加上"?username=itcast",此时,浏览器窗口显示如下

(2)使用<c:out>标签的escapeXml属性(默认为true)对特殊字符进行转义

该属性可以将特殊的字符进行HTML编码转换后再输出。

如果想对页面输出的特殊字符进行转义,可以将escapeXml属性的值设置为true。

将<c:out>标签中escapeXml属性的值设置为true后,在JSP页面中输入的<meta>标签便会进行HTML编码转换,最终以字符串的形式输出了。

2.<c:if>标签

用来进行条件判断,相当于if。

语法1:没有标签体的情况

<c:if test="testCondition" var="result" [scope="[page|request|session|application]"]/>

语法2:没有标签体的情况,在标签体中指定要输出的内容。

<c:if test="testCondition" var="result" [scope="{page|request|session|application}"]>body content
</c:if>
  • test属性用于设置逻辑表达式
  • var属性用于指定逻辑表达式中变量的名字
  • scope属性用于指定var变量的作用范围,默认值为page。如果属性test的计算结果为true,那么标签体将被执行,否则标签体不会被执行。

判断表达式${visitCount==1}是否为true。如果为true就输出标签体中的内容,否则输出空字符串。由于使用了<c:set>标签将visitCount的值设置为1,因此,表达式${visitCount==1}的结果为true,便会输出<c:if>标签体中的内容。

3.<c:choose>标签

相当于if-else语句

<c:choose>Body content(<when> and <otherwise> subtags)
</c:choose>

<c:when>标签只有一个test属性,该属性的值为布尔类型。test属性支持动态值,其值可以是一个条件表达式,如果条件表达式的值为true,就执行这个<c:when>标签体的内容,其语法格式如下

<c:when test="testCondition">Body content
</c:when>

<c:otherwise>标签没有属性,它必须作为<c:choose>标签最后分支出现。当所有的<c:when>标签的test条件都不成立时,才执行和输出<c:otherwise>标签体的内容,其语法格式如下。

<c:otherwise>conditional block
</c:otherwise>

传递一个参数username=itcast

4.<c:forEach>标签

语法1:迭代包含多个对象的集合

<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>body content
</c:forEach>

语法2:迭代指定范围内的集合

<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>body content
</c:forEach>
  • var属性用于指定将当前迭代到的元素保存到page域中的名称。
  • items属性用于指定将要迭代的集合对象。
  • varStatus属性用于指定当前迭代状态信息的对象保存到page域中的名称。
  • begin属性用于指定从集合中第几个元素开始进行迭代,begin的索引值从0开始。如果没有指定items属性,就从begin指定的值开始迭代,知道迭代结束为止。
  • step属性用于指定迭代的步长,即迭代因子的增量。

<c:forEach>标签的varStatus属性用于设置一个javax.servlet.jsp.jstl.core.LoopTagStatus类型的变量,这个变量包含了从集合中取出元素的状态信息。使用<c:forEach>标签的varStatus属性可以获取一下信息。

  • count:表示元素在集合中的序号,从1开始计数
  • index:表示当前元素在集合中的索引,从0开始计数。
  • first:表示当前是否为集合中的第1个元素。
  • last:表示当前是否为集合中的最后一个元素。

5.<c:param>标签和<c:url>标签

<c:param>标签用于获取URL地址中的附加参数,<c:url>标签用于按特定的规则重新构造URL,<c:redirect>标签负责重定向。

<c:param>标签用于在URL地址中附加参数,它通常嵌套在<c:url>标签内使用。<c:param>标签有两种语法格式,具体如下。

语法1:使用value属性指定参数的值

<c:param name="name" value="value">

语法2:在标签体中指定参数的值

<c:param name="name">parameter value
</c:param>
  • name属性用于指定参数的名称。
  • value属性用于指定参数的值,当使用<c:param>标签为一个URL地址附加参数时,它会自动对参数进行URL编码。

在访问一个JSP页面时,通常会在URL中传递一些参数信息。为了方便完成这种功能,Core标签库中提供了一个<c:url>标签,该标签可以在JSP页面中构造一个新的地址,实现URL的重写。<c:url>标签有两语法格式,具体如下。

语法1:没有标签实体的情况

<c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"]>

语法2:没有标签实体的情况,在标签体中指定构造URL参数

<c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"]>
<c:param>标签
</c:url>
  • value属性用于指定构造的URL。
  • context属性指定导入同一个服务器下其他Web应用的名称。
  • var属性用于指定将构造的URL地址保存到域对象的属性名称。
  • scope属性用于指定将构造好的URL保存到域对象中。

第7章 EL表达式和JSTL相关推荐

  1. java el表达式 if else_jsp EL表达式和JSTL标签if-else if-else用法

    java web javaEE ,jsp EL表达式和JSTL标签if-else if-else四种用法 一.条件运算符 ${user.gender==?'男':'女'} 二.if() code.. ...

  2. java day41【JSP 、MVC开发模式 、EL表达式 、JSTL标签 、三层架构】

    第一章  JSP 1. 指令 * 作用:用于配置JSP页面,导入资源文件 * 格式: <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %> * 分类: 1. page : ...

  3. 大数据WEB阶段(十三)JSP(二)JSP标签、EL表达式、JSTL

    JSP标签.EL表达式.JSTL (一)JSP标签技术 一.JSP标签技术概述 jsp本质上是一种动态web资源开发技术 , 看起来像是html , 但其中可以写java代码 , 非常方便用来开发动态 ...

  4. el表达式与jstl的用法

    课上顺便整理了下java中的El表达式和jstl的用法,下面以举例的方式来阐述各个标签的作用: 一. 使用el表达式将Map集合中的数据显示出来: 先给Map集合里面放一些数据库,通过EL表达式显示在 ...

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

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

  6. jsp脚本、jsp标准动作、EL表达式、JSTL标签

    https://blog.csdn.net/gx_hxl/article/details/79032331 https://blog.csdn.net/a731604348/article/detai ...

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

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

  8. JavaWeb EL表达式, JSTL标签及过滤器综合学习

    1.项目结构如右边图所示: (1)controller.filter包下面定义2个过滤器,EncodingFilter 类CheckUserFilter类(后面会有一个登陆验证的过滤器的测试学习), ...

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

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

  10. EL表达式和JSTL标签:简化JSP的Java代码

    JSP页面接收.展示后端的数据,再JSP页面写很多的Java代码会造成书写麻烦.难以阅读.不利于团队协作的缺点,因此我们使用EL表达式和JSTL标签,代替并简化了JSP页面 EL表达式 语法:${st ...

最新文章

  1. 找不到包含 OwinStartupAttribute 的程序集
  2. 再见中台,你好!企业数字化转型
  3. 在一个夜黑风高的夜晚,坐在教室里学多线程
  4. java编程控制电脑硬件_如何快速学习AP计算机中的Java编程?
  5. 种子谋定翻身-农民丰收节交易会·万建民:破解卡脖子难题
  6. n 个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为 O(N)
  7. 论文浅尝 | 对于知识图谱嵌入表示的几何形状理解
  8. 这就是深度学习如此强大的原因
  9. 不属于微型计算机特点的是什么,2017计算机应用基础模拟题及答案
  10. 用Java描述数据结构之栈和队列,以及栈和队列的常用方法
  11. vue echarts数据变化重新渲染_vue实例创建及数据挂载渲染
  12. Juniper Open contrail 虚拟网络互通
  13. WMB 使用Compute节点连接Oracle数据库实例
  14. 保送北大,连发三篇Science,这位80后川妹子近日再发重磅级研究成果!
  15. matlab将图像油画,photoshop图像滤镜——油画算法(含matlab与C代码)
  16. day14.逻辑运算,位运算
  17. 哪些人会看作业指导书?作业指导书怎样才能发挥作用?
  18. SEM测试线扫与面扫
  19. 70行python代码实现qq视频加特效效果
  20. java 里面耦合和解耦

热门文章

  1. 软考架构师 | 论文
  2. html 字体思源_网页使用思源字体 CSS
  3. jquery全国省市县三级联动
  4. 【微信小程序制作模板套用】小程序模板如何合理选择?
  5. 数据分析知识体系模型
  6. 巧用Procexp找出弹窗广告真凶
  7. Android自定义输入车牌号键盘、车牌简称,数字 ,字母键盘
  8. JSONObject.fromObject()方法报错解决方法
  9. 宏碁 Aspire E1-471g黑苹果efi引导文件
  10. 在校开发的装柜辅助系统