欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第7章 EL表达式和JSTL

程序员文章站 2022-07-11 11:58:16
...

目录

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章 EL表达式和JSTL

7.1.2 访问 JavaBean 的属性

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

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

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

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

7.1.3 BeanUtils 工具

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

需要的包:

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

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

7.2 EL 表达式

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

7.2.1 初始 EL

${表达式}

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

7.2.2 EL 中的标识符

命名规范:

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

合法标识符

第7章 EL表达式和JSTL

不合法标识符

第7章 EL表达式和JSTL

7.2.3 EL 中的保留字

第7章 EL表达式和JSTL

不能被作为标识符。

7.2.4 EL 中的变量

${product}

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

7.2.5 EL 中的常量

1.布尔常量

true和false

2.整型常量

第7章 EL表达式和JSTL第7章 EL表达式和JSTL之间的整数。

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表达式中的算数运算符用于对整数和浮点数的值进行算术运算。

第7章 EL表达式和JSTL

4.比较运算符

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

第7章 EL表达式和JSTL

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

5.逻辑运算符

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

第7章 EL表达式和JSTL

6.empty运算符

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

${empty var}

7.条件运算符

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

${A?B:C}

8.“()”运算符

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

第7章 EL表达式和JSTL

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

7.2.7 EL 隐式对象

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

第7章 EL表达式和JSTL

1.pageContext对象

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

${pageContext.response.characterEncoding}

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

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

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个作用域中获取数据。

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

3.param和paramValues对象

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

${param.num}

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

${paramValues.nums{0}}

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

4.Cookie 对象

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

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

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

7.3 JSTL

7.3.1 什么是JSTL

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

第7章 EL表达式和JSTL

  • 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章 EL表达式和JSTL

第7章 EL表达式和JSTL

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>标签输出默认值

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

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

第7章 EL表达式和JSTL

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

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

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

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

第7章 EL表达式和JSTL

将<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,那么标签体将被执行,否则标签体不会被执行。

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

判断表达式${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>

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

传递一个参数username=itcast

第7章 EL表达式和JSTL

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属性用于指定迭代的步长,即迭代因子的增量。

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

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

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

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

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

第7章 EL表达式和JSTL

第7章 EL表达式和JSTL

 

 

 

 

 

 

 

 

相关标签: web程序设计

上一篇: socket编程(udp)

下一篇: 第7章 函数