Java web基础知识 第七节 JavaBean、El表达式、JSTL标准标签库

一、JSP JavaBean

  1. JavaBean 是特殊的 Java 类,使用 Java 语言书写,并且遵守 JavaBean API 规范。
  2. JavaBean的特征:
    1、提供一个默认的无参构造函数。
    2、需要被序列化(序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。)并且实现了 Serializable 接口。
    3、可能有一系列可读写属性。
    4、可能有一系列的 getter 或 setter 方法。
  3. JavaBean 属性:
    1. 一个 JavaBean 对象的属性应该是可访问的。这个属性可以是任意合法的 Java 数据类型,包括自定义 Java 类。
    2. 一个 JavaBean 对象的属性可以是可读写,或只读,或只写。
    3. JavaBean 对象的属性通过 JavaBean 实现类中提供的两个方法来访问:
      方法						描述:
      getPropertyName()		举例来说,如果属性的名称为 myName,那么这个方法的名字就要写成 getMyName() 来读取这个属性。这个方法也称为访问器。
      setPropertyName()		举例来说,如果属性的名称为 myName,那么这个方法的名字就要写成 setMyName()来写入这个属性。这个方法也称为写入器。
      /释:一个只读的属性只提供 getPropertyName() 方法,一个只写的属性只提供 setPropertyName() 方法。
      

二、JavaBean 程序示例

  1. 这是 StudentBean.java 文件:
    	package com.runoob;
    	public class StudentsBean implements java.io.Serializable
    	{
    	   private String firstName = null;
    	   private String lastName = null;
    	   private int age = 0;
    	   public StudentsBean() {
    	   }
    	   public String getFirstName(){
    	      return firstName;
    	   }
    	   public String getLastName(){
    	      return lastName;
    	   }
    	   public int getAge(){
    	      return age;
    	   }
    		public void setFirstName(String firstName){
    	      this.firstName = firstName;
    	   }
    	   public void setLastName(String lastName){
    	      this.lastName = lastName;
    	   }
    	   public void setAge(int age) {
    	      this.age = age;
    	   }
    	}
    
  2. 访问 JavaBean 对象的属性
    <jsp:useBean>标签主体中使用<jsp:getProperty/>标签来调用 getter 方法,使用 <jsp:setProperty/>标签来调用 setter 方法,语法格式如下:

    <jsp:useBean id="id" class="bean 编译的类" scope="bean 作用域">
       <jsp:setProperty name="bean 的 id" property="属性名"  
                        value="value"/>
       <jsp:getProperty name="bean 的 id" property="属性名"/>
       ...........
    </jsp:useBean>
    
    / name属性指的是Bean的id属性。property属性指的是想要调用的getter或setter方法。
    

    接下来给出使用以上语法进行属性访问的一个简单例子:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <html>
    <head>
    		<title>getset 属性实例</title>
    </head>
    <body>
    		<jsp:useBean id="students"    class="com.runoob.StudentsBean"> 
    			<jsp:setProperty name="students" property="firstName"   value="小强"/>
    			<jsp:setProperty name="students" property="lastName"    value="王"/>
    			<jsp:setProperty name="students" property="age“    value="10"/>
    		</jsp:useBean>
    		<p>学生名字: <jsp:getProperty name="students" property="firstName"/></p>
    		<p>学生姓氏: <jsp:getProperty name="students" property="lastName"/></p>
    		<p>学生年龄: <jsp:getProperty name="students" property="age"/></p>
    </body>
    </html>
    访问以上 JSP,运行结果如下:
    		学生名字: 小强
    		学生姓氏: 王
    		学生年龄: 10
    

三、BeanUtils工具

  1. BeanUtils工具包的官网首页地址为“http://commons.apache.org/proper/commons-beanutils”,登录到官网首页后,单击左边菜单栏【BEANUTILS】>>【Download】选项,即可跳转到BeanUtils的下载页面
  2. 在图中单击方框标识的链接就可以进行下载,解压下载后的文件便可获得BeanUtils开发所需的JAR包。
  3. 需要注意的是,BeanUtils工具包还需要一个logging包来配合使用,logging包中包装了各种日志API的实现,感兴趣的读者可以进入官网(http://commons.apache.org/proper/commons-logging)下载。
  4. BeanUtils工具中封装了许多类,其中最核心的是org.apache.commons.beanutils包下的BeanUtils类
  5. BeanUtils类的常用方法:
    static void populate(Object bean,Map<String,?extends Object>properties)
    			根据指定的名称/值对为相应的JavaBean属性设置值
    static void setProperty(Object bean,String name,Object value)
    			设置指定的属性值,传入的类型要求能转换成相应属性的类型
    static void getProperty(Object bean,String name)
    			返回指定bean指定属性的值,返回值类型为String类型
    

四、EL表达式

  1. 在JSP开发中,为了获取Servlet域对象中存储的数据,经常需要书写很多Java代码,这样的做法会使JSP页面混乱,难以维护,为此,在JSP2.0规范中提供了EL表达式。
  2. EL是Expression Language的缩写,它是一种简单的数据访问语言
  3. EL表达式格式:${表达式}
    需要注意的是,“${表达式}”中的表达式必须符合EL语法要求。
  4. EL中的标识符
    EL表达式中,经常需要使用一些符号来标记一些名称,如变量名、自定义函数名等,这些符号被称为标识符
  5. EL表达式中的标识符可以由任意的大小写字母、数字和下划线组成,为了避免出现非法的标识符,在定义标识符时还需要遵循以下规范:不能以数字开头;不能是EL中的保留字,如and、or、gt;
    不能是EL隐式对象,如pageContext;不能包含单引号(’)、双引号(")、减号(-)和正斜线等特殊字符
  6. EL中的变量
    EL表达式中的变量就是一个基本的存储单元,EL表达式可以将变量映射到一个对象上,具体示例如下所示: ${product}
    在上述示例中,product就是一个变量。
  7. EL表达式中的变量不用事先定义就可以直接使用,例如,表达式${product}就可以访问变量product的值。
  8. EL中的常量
    EL表达式中的常量又称字面量,它是不能改变的数据
    在EL表达式中包含多种常量。
    	1.布尔常量
    			布尔常量用于区分一个事物的正反两面,它的值只有两个,分别是truefalse2.整型常量
    			整型常量与Java中的十进制的整型常量相同.
    			它的取值范围是Java语言中定义的常量Long.MIN_VALUE到Long.MAX_VALUE之间,
    			即(-263~263-1之间的整数。
    	3.浮点数常量
    			浮点数常量用整数部分加小数部分表示,也可以用指数形式表示,
    			例如,1.2E41.2都是合法的浮点数常量。
    			它的取值范围是Java语言中定义的常量Double.MIN_VALUE到Double.MAX_VALUE之间,
    			即4.9E-324~1.8E308之间的整数。
    	4.字符串常量
    			字符串常量是用单引号或双引号引起来的一连串字符。
    			由于字符串常量需要用单引号或双引号引起来,所以字符串本身包含的单引号或双引号需要用反斜杠(\)进行转义,
    			即用`“\'”`表示字面意义上的单引号,用`“\"”`表示字面意义上的双引号。
    			如果字符串本身包含反斜杠(\),也要进行转义,即用“\\”表示字面意义上的一个反斜杠。
    			需要注意的是,只有字符串常量用单引号引起来时,字符串本身包含的单引号才需要进行转义,而双引号不必进行转义;只有字符串常量用双引号引起来时,字符串本身包含的双引号才需要进行转义,而单引号不必转义,例如"ab'4c\"d5\\e"表示的字符串是ab'4c"d5\e。
    	5.Null常量
    			Null常量用于表示变量引用的对象为空,它只有一个值,用null表示。
    
  9. EL中的运算符
    1. EL表达式支持简单的运算,例如,加(+)、减(-)、乘(*)、除(/)等。为此,在EL中提供了多种运算符,根据运算方式的不同。

    2. 点运算符 .
      1、EL表达式中的点运算符,用于访问JSP页面中某些对象的属性,如JavaBean对象、List集合、Array数组等。
      2、其语法格式:${customer.name}
      3、在上述语法格式中,表达式${customer.name}中点运算符的作用就是访问customer对象中的name属性

    3. 方括号运算符[]
      1、EL表达式中的方括号运算符与点运算符的功能相同,都用于访问JSP页面中某些对象的属性,当获取的属性名中包含一些特殊符号,如“-”或“?”等并非字母或数字的符号,就只能使用方括号运算符来访问该属性。
      2、其语法格式:${user["My-Name"]}
      3、需要注意的是,在访问对象的属性时,通常情况都会使用点运算符作为简单的写法,但实际上,方括号运算符比点运算符应用更加广泛。
      4、接下来就对比一下这两种运算符在实际开发中的应用,具体如下:

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

    4. 算术运算符
      1、EL表达式中的算术运算符用于对整数和浮点数的值进行算术运算。使用这些算术运算符可以非常方便地在JSP页面进行算术运算,并且可以简化页面的代码量
      2、所有的算术运算符:+、-、*、/(或div)、%(或mod)
      3、表中,列举了EL表达式中所有的算术运算符,这些运算符相对来说比较简单。在使用这些运算符时需要注意两个问题,“-”运算符即可以作为减号,也可以作为负号“/”或“div”运算符在进行除法运算时,商为小数

    5. 比较运算符
      1、EL表达式中的比较运算符用于比较两个操作数的大小,操作数可以是各种常量、EL变量或EL表达式,所有的运算符执行的结果都是布尔类型

      2、接下来通过表来列举EL表达式中所有的比较运算符:==(或eq)、!=(或ne)、<(或lt)、>(或gt)、<=(或le)、>=(或ge)
      3、表中,列举了EL表达式中所有的比较运算符,在使用这些运算符时需要注意两个问题,具体如下:

      比较运算符中的“==”是两个等号,千万不可只写一个等号。
      
      为了避免与JSP页面的标签产生冲突,对于后4种比较运算符,EL表达式中通常使用括号内的表示方式。
      
      例如,使用“lt”代替“<”运算符,如果运算符后面是数字,在运算符和数字之间至少要有一个空格。
      例如${1lt 2},但后面如果有其他符号时则可以不加空格,例如${1lt(1+1)}
    6. 逻辑运算符
      1、EL表达式中的逻辑运算符用于对结果为布尔类型的表达式进行运算,运算的结果仍为布尔类型
      2、所有的逻辑运算符:&&(and)、||(or)、!(not)
      3、上表中,列出了EL表达式中的3种逻辑运算符,需要注意的是,在使用&&运算符时,如果有一个表达式结果为false,则结果必为false,在使用||运算符时,如果有一个表达式的结果为true,则结果必为true。

    7. empty运算符
      1、EL表达式中的empty运算符用于判断某个对象是否为null或””,结果为布尔类型。
      2、其基本的语法格式如下所示:${empty var}
      3、需要注意的是,empty运算符可以判定变量(或表达式)是否为null或””。例如,empty运算符的返回值为true:

      	var变量不存在,即没有定义,例如表达式`{empty name},如果不存在name变量,就返回truevar变量的值为null,例如表达式${empty customer.name},如果customer.name的值为null,就返回true

      4、var变量引用集合(Set、Map和List)类型对象,并且在集合对象中不包含任何元素。

    8. 条件运算符
      1、EL表达式中条件运算符用于执行某种条件判断,它类似于Java语言中的if-else语句,其语法格式如下:${A?B:C}

      2、在上述语法格式中,表达式A的计算结果为布尔类型,如果表达式A的计算结果为true,就执行表达式B并返回B的值;如果表达式A的计算结果为false,就执行表达式C并返回C的值,例如表达式${(1==2)?3:4}的结果就为4。

    9. ( ) 运算符
      1、EL表达式中的圆括号用于改变其他运算符的优先级
      2、例如表达式${a*b+c},正常情况下会先计算a*b的积,然后再将计算的结果与c相加,如果在这个表达式中加一个圆括号运算符,将表达式修改为${a*(b+c)},这样则先计算b与c的和,再将计算的结果与a相乘。
      3、需要注意的是,EL表达式中的运算符都有不同的运算优先级,当EL表达式中包含多种运算符时,它们必须按照各自优先级的大小来进行运算。
      4、接下来,通过表来描述这些运算符的优先级。

优先级运算符
1[ ]
2( )
3- not ! empty
4* / div % mod
5+ -
6< > <= >= lt gt le ge
7== != eq ne
8&& and
9or 与 双竖杠
10

5、表列举了不同运算符各自的优先级大小。对于初学者来说,这些运算符的优先级不必刻意的去记忆。为了防止产生歧义,建议读者尽量使用“()”运算符来实现想要的运算顺序。
6、注意:
在应用EL表达式取值时,没有数组的下标越界,没有空指针异常,没有字符串的拼接。


五、EL隐式对象

  1. 在学习JSP技术时,提到过隐式对象的应用。在EL技术中,同样提供了隐式对象。

  2. EL中的隐式对象共有11个.

    具体如表所示。
    	pageContext              对应于JSP页面中的pageContext对象
    	
    	pageScope                代表page域中用于保存属性的Map对象
    	
    	requestScope             代表request域中用于保存属性的Map对象 
    	
    	sessionScope             代表session域中用于保存属性的Map对象
    	
    	applicationScope         代表application域中用于保存属性的Map对象
    	
    	param                    表示一个保存了所有请求参数的Map对象
    	
    	paramValues              表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个String类型数组
    	
    	header                   表示一个保存了所有HTTP请求头字段的Map对象
    	
    	headerValues             表示一个保存了所有HTTP请求头字段的Map对象,返回String类型数组
    	
    	cookie                   用来取得使用者的cookie值,cookie的类型是Map
    	
    	initParam                表示一个保存了所有Web应用初始化参数的Map对象
    
  3. pageContext对象
    1、为了获取JSP页面的隐式对象,可以使用EL表达式中的pageContext隐式对象。
    2、pageContext隐式对象的示例代码如下:${pageContext.response.characterEncoding}
    3、在上述示例中,pageContext对象用于获取response对象中的characterEncoding属性。

  4. Web域相关对象
    1、在Web开发中,PageContext、HttpServletRequest、HttpSession和ServletContext这四个对象之所以可以存储数据,是因为它们内部都定义了一个Map集合
    2、这些Map集合是有一定作用范围的,例如,HttpServletRequest对象存储的数据只在当前请求中可以获取到。
    3、习惯性的,我们把这些Map集合称为域,这些Map集合所在的对象称为域对象
    4、 在EL表达式中,为了获取指定域中的数据,提供了pageScope、requestScope、sessionScope和applicationScope4个隐式对象
    示例代码如下:${pageScope.UserName} ; ${requestScope.UserName}.

  5. param和paramValues对象
    1、在JSP页面中,经常需要获取客户端传递的请求参数,为此,EL表达式提供了param和paramValues两个隐式对象,这两个隐式对象专门用于获取客户端访问JSP页面时传递的请求参数
    2、param对象用于获取请求参数的某个值,它是Map类型,与request.getParameter()方法相同,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。
    3、param对象的语法格式比较简单,具体示例如下:${param.num}
    4、如果一个请求参数有多个值,可以使用paramValues对象获取请求参数的所有值,该对象用于返回请求参数所有值组成的数组,如果要获取某个请求参数的第一个值。
    5、可以使用如下代码:${paramValues.num[0]}

  6. cookie对象
    1、在JSP开发中,经常需要获取客户端的Cookie信息,为此,在EL表达式中,提供了Cookie隐式对象,该对象是一个代表所有Cookie信息的Map集合
    2、Map集合中元素的键为各个Cookie的名称,值则为对应的Cookie对象。
    3、具体示例如下:

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

六、什么是JSTL

  1. 从JSP1.1规范开始,JSP支持使用自定义标签,使用自定义标签大大降低了JSP页面的复杂度,同时增强了代码的重用性。

  2. 为此,许多Web应用厂商都定制了自身应用的标签库,然而同一功能的标签由不同的Web应用厂商制定可能是不同的,这就导致市面上出现了很多功能相同的标签,令网页制作者无从选择。

  3. 为了解决这个问题,Sun公司制定了一套标准标签库(JavaServer Pages Standard Tag Library),简称JSTL

  4. JSTL虽然被称为标准标签库,而实际上这个标签库是由5个不同功能的标签库共同组成的。在5. JSTL1.1规范中,为这5个标签库分别指定了不同的URI以及建议使用的前缀。

    如下表所示:
    	标签库              标签库的URI         						前缀
    	Core                http://java.sun.com/jsp/jstl/core        c
    	
    	l18N                http://java.sun.com/jsp/jstl/fmt         fmt
    	
    	SQL                 http://java.sun.com/jsp/jstl/sql         sql
    	
    	XML                 http://java.sun.com/jsp/jstl/xml          x
    	
    	Functions           http:/java.sun.com/jsp/jstl/functions     fn
    

    表中,列举了JSTL中包含的所有标签库,以及JSTL中各个标签库的URI和建议使用的前缀。

  5. 标签库进行讲解。
    1、Core是一个核心标签库,它包含了实现Web应用中通用操作的标签。
    例如,用于输出文本内容的<c:out>标签、用于条件判断的<c:if>标签、用于迭代循环的<c:forEach>标签。

    2、 I18N是一个国际化/格式化标签库,它包含实现Web应用程序的国际化标签和格式化标签。
    例如,设置JSP页面的本地信息、设置JSP页面的时区、使日期按照本地格式显示等。

    3、SQL是一个数据库标签库,它包含了用于访问数据库和对数据库中的数据进行操作的标签。
    例如,从数据库中获得数据库连接、从数据库表中检索数据等。由于在软件分层开发模型中,JSP页面仅作为表示层,一般不会在JSP页面中直接操作数据库,因此,JSTL中提供的这套标签库不经常使用。

    4、XML是一个操作XML文档的标签库,它包含对XML文档中的数据进行操作的标签。
    例如,解析XML文件、输出XML文档中的内容,以及迭代处理XML文档中的元素。XML广泛应用于Web开发,使用XML标签库处理XML文档更加简单方便。

    5、Functions是一个函数标签库,它提供了一套自定义EL函数,包含了JSP网页制作者经常要用到的字符串操作。
    例如,提取字符串中的子字符串、获取字符串的长度等

七、JSTL的下载和使用

  1. 下载JSTL包
    1. 从Apache的网站下载JSTL的JAR包。
    2. 进入“http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/”网址下载JSTL的安装包jakarta-taglibs-standard-1.1.2.zip
    3. 然后将下载好的JSTL安装包进行解压,此时,在lib目录下可以看到两个JAR文件,分别为jstl.jar和standard.jar
    4. 其中,jstl.jar文件包含JSTL规范中定义的接口和相关类,standard.jar文件包含用于实现JSTL的.class文件以及JSTL中5个标签库描述符文件(TLD)
  2. 安装JSTL
    将jstl.jar和standard.jar这两个文件复制到chapter07项目的lib目录下。这个过程就相当于在chapter07项目中安装JSTL,安装完JSTL后,就可以在JSP文件中使用JSTL标签库。
  3. 测试JSTL
    1. JSTL安装完成后,就需要测试JSTL安装是否成功。由于在测试的时候使用的是<c:out>标签,因此,需要使用taglib指令导入Core标签库.
    2. 具体代码如下:<%@ taglib uri ="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    3. 在上述代码中,taglib指令的uri属性用于指定引入标签库描述符文件的URI,prefix属性用于指定引入标签库描述符文件的前缀,在JSP文件中使用这个标签库中的某个标签时,都需要使用这个前缀。

八、 JSTL中的core标签

  1. <c:out>标签

    1. 在JSP页面中,最常见的操作就是向页面输出一段文本信息,为此,Core标签库提供了一个<c:out>标签,该标签可以将一段文本内容或表达式的结果输出到客户端

    2. 如果<c:out>标签输出的文本内容中包含需要进行转义的特殊字符,例如>、<、&、'、" 等,<c:out>标签会默认对它们进行HTML编码转换后再输出。

      <c:out>标签有两种语法格式,具体如下:
      语法1:没有标签体的情况
      		<c:out value="value" [default="defaultValue"] [escapeXml="{true|false}"]/> 
      语法2:有标签体的情况
      		<c:out value="value"  [escapeXml="{true|false}"]>
      		         defaultValue
      		</c:out>
      
    3. 在上述语法格式中,没有标签体的情况,需要使用default属性指定默认值,有标签体的情况,在标签体中指定输出的默认值。

    4. 可以看到<c:out>标签有多个属性,接下来针对这些属性进行讲解,具体如下:

      1. value属性用于指定输出的文本内容;
      2. default属性用于指定当value属性为null时所输出的默认值,该属性是可选的(方括号中的属性都是可选的);
      3. escapeXml属性用于指定是否将>、<、&、’、" 等特殊字符进行HTML编码转换后再进行输出,默认值为true。
      4. 需要注意的是,只有当value属性值为null时,<c:out>标签才会输出默认值,如果没有指定默认值,则默认输出空字符串。
        1)使用<c:out>标签输出默认值
        			使用<c:out>标签输出默认值有两种方式,
        				一是通过使用<c:out>标签的default属性输出默认值,
        				二是通过使用<c:out>标签的标签体输出默认值。
        (2)使用<c:out>标签的escapeXml属性对特殊字符进行转义
        			<c:out>标签有一个重要的属性escapeXml,
        			该属性可以将特殊的字符进行HTML编码转换后再输出。
        
  2. <c:if>标签

    1. 在程序开发中,经常需要使用if语句进行条件判断,如果要在JSP页面中进行条件判断,就需要使用Core标签库提供的<c:if>标签,该标签专门用于完成JSP页面中的条件判断.
    2. 它有两种语法格式,具体如下:
      语法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>
      
    3. 在上述语法格式中,可以看到<c:if>标签有三个属性,具体讲解如下:

      test属性用于设置逻辑表达式; var属性用于指定逻辑表达式中变量的名字;
      scope属性用于指定var变量的作用范围,默认值为page。如果属性test的计算结果为true,那么标签体将被执行,否则标签体不会被执行。

  3. <c:choose>标签

    1. 在程序开发中不仅需要使用if条件语句,还经常会使用if-else语句,为了在JSP页面中也可以完成同样的功能.
    2. Core标签库提供了<c:choose>标签,该标签用于指定多个条件选择的组合边界,它必须与<c:when>、<c:otherwise>标签一起使用。
    3. <c:choose>标签没有属性,在它的标签体中只能嵌套一个或多个<c:when>标签和零个或一个<c:otherwise>标签,并且同一个<c:choose>标签中所有的<c:when>子标签必须出现在<c:otherwise>子标签之前。
      其语法格式如下:
      		<c:choose>
      		           Body content(<when> and <otherwise> subtage)
      		</c:choose>
      
    4. <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>
      
  4. <c:forEach>标签

    1. 在JSP页面中,经常需要对集合对象进行循环迭代操作,为此,Core标签库提供了一个<c:forEach>标签。

    2. 该标签专门用于迭代集合对象中的元素,如Set、List、Map、数组等,并且能重复执行标签体中的内容,

      它有两种语法格式,具体如下: 
      	语法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>
      
    3. 在上述语法格式中,可以看到<c:forEach>标签有多个属性。具体讲解如下:

      var属性——用于指将当前迭代到的元素保存到page域中的名称;
      items属性——用于指定将要迭代的集合对象;
      varStatus——用于指定当前迭代状态信息的对象保存到page域中的名称;
      begin属性——用于指定从集合中第几个元素开始进行迭代,begin的索引值从0开始,如果没有指定items属性,就从begin指定的值开始迭代,直到迭代结束为止;
      step属性——用于指定迭代的步长,即迭代因子的增量。

    4. <c:forEach>标签的begin、end和step属性分别用于指定循环的起始索引、结束索引和步长

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

    6. 使用<c:forEach>标签的varStatus属性可以获取以下信息:
      count:表示元素在集合中的序号,从1开始计数;
      index:表示当前元素在集合中的索引,从0开始计数;
      first:表示当前是否为集合中的第一个元素;
      last:表示当前是否为集合中的最后一个元素;

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

    1. 在开发一个Web应用程序时,通常会在JSP页面中完成URL的重写以及重定向等特殊功能,为了完成这些功能。

    2. 这些标签包括<c:param>、<c:redirect>和<c:url>。其中<c:param>标签用于获取URL地址中的附加参数

    3. <c:url>标签用于按特定的规则 重新构造URL,<c:redirect>标签负责重定向。

    4. <c:param>标签用于在URL地址中附加参数,它通常嵌套在<c:url>标签内使用。

      <c:param>标签有两种语法格式,具体如下:
      	语法1:使用value属性指定参数的值
      		<c:param name="name" value="value">
      	语法2:在标签体中指定参数的值
      		<c:param name="name"
      		      parameter  value
      		</c:param>	
      
    5. 在上述语法格式中,可以看到<c:param>中有两个属性。具体讲解如下:

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

    6. 例如,如果传递的参数值为“中国”,则将其转换为“%e4%b8%ad%e5%9b%bd”后再附加到URL地址后面,这也是使用**<c:param>**标签的最大好处。

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

    8. <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:rul>
      
    9. 在上述语法格式中,可以看到<c:url>标签中有多个属性。

      具体讲解如下:
      		value属性用于指定构造的URL;
      		context属性用于指定导入同一个服务器下其他Web应用的名称;
      		var属性用于指定将构造的URL地址保存到域对象的属性名称;
      		scope属性用于指定将构造好的URL保存到域对象中。
      

End.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值