JSTL标签库

2020-12-13 04:08

阅读:499

YPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

标签:style   blog   class   c   code   java   

JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的。在告别modle1模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定义标签的开发难度较大和不利于技术标准化产生了自定义标签库。JSTL标签库可分为5类:

q        核心标签库

q        I18N格式化标签库

q        SQL标签库

q        XML标签库

q        函数标签库

本章将对这些内容一一讲述。

9.1 核心标签库

JSTL的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。使用这些标签能够完成JSP页面的基本功能,减少编码工作。

1)表达式控制标签:out标签、set标签、remove标签、catch标签。

2)流程控制标签:if标签、choose标签、when标签、otherwise标签。

3)循环标签:forEach标签、forTokens标签。

4URL操作标签:import标签、url标签、redirect标签。

JSP页面引入核心标签库的代码为:

下面将按照功能分类,分别讲解每个标签的功能和使用方式。

9.2.1 表达式控制标签

表达式控制分类中包括4个标签,现在分别介绍它们的功能和语法。

1标签

【功能】:用来显示数据对象(字符串、表达式)的内容或结果。

在使用Java脚本输出时常使用的方式为:

字符串

”)%>

表达式%>

web开发中,为了避免暴露逻辑代码会尽量减少页面中的Java脚本,使用标签就可以实现以上功能。

字符串”>

表达式”>

提示:JSTL的使用是和EL表达式分不开的,EL表达式虽然可以直接将结果返回给页面,但有时得到的结果为空,有特定的结果处理功能,EL的单独使用会降低程序的易读性,建议把EL的结果输入放入标签中。

标签的使用有两种语法格式。

【语法1】:

要显示的数据对象” [escapeXml=”true|false”] [default=”默认值”]>

【语法2】:

要显示的数据对象” [escapeXml=”true|false”]>默认值

这两种方式没有本质的区别,只是格式上的差别。标签的属性介绍如下。

q        value:指定要输出的变量或表达式。

q        escapeXml:设定是否转换特殊字符(如&lt&gt等一些转义字符),在默认值为true的情况下直接在输出&lt的,如果改为false将会进行转义输出“”等。

q        default:为默认输出结果。如果使用表达式得到的结果为null(注意与空区别),将会输出默认结果。

【示例代码】:代码9.1演示了的使用,以及在不同属性值状态下的结果。

代码9.1 标签使用示例:coredemo01.jsp

1    

2    

3    

4    

5             

out<span>标签的使用</span>

6    

7    

8             

  • 1
  • 9             

  • 2
  • 10             

  • 3
  • 11             

  • 4使用了默认值
  • 12             

  • 5
  • 13    

    14    

    【代码解析】:

    1)第8行为value属性赋值为字符串。

    2)第9行和第10行对比,在改变escapeXml属性后页面输出的转义字符。

    3)第11value得到null,如果方法体内有值,将输出方法体中的字符串,否则不输出,第12行没有输出结果。

    程序运行结果如图9.1所示。

    soscw.com,搜素材

    9.1 coredemo01.jsp运行结果

    【代码解析】:

    1)直接输出了一个字符串。

    2)字符串中有转义字符,但在默认情况下没有转换。

    3)使用了转义字符&lt&gt分别转换成和>符号。

    4)设定了默认值,从EL表达式${null}得到空值,所以直接输出设定的默认值。

    5)未设定默认值,输出结果为空。

    2标签

    功能:主要用于将变量存取于JSP范围中或JavaBean属性中。

    标签的编写共有4种语法格式。

    语法1:存值,把一个值放在指定(pagesession等)的map中。

    值1” var=”name1” [scope=”page|request|session|application”]>

    含义:把一个变量名为name1值为“值1”的变量存储在指定的scope范围内。

    语法2

    2

    含义:把一个变量名为name2,值为值2的变量存储在指定的scope范围内。

    语法3

    值3” target=”JavaBean对象” property=”属性名”/>

    含义:把一个值为“值3”赋值给指定的JavaBean的属性名。相当与setter()方法。

    语法4

    对象” property=”属性名”>

    4

    含义:把一个值4赋值给指定的JavaBean的属性名。

    提示:从共能上分语法1和语法2、语法3和语法4的效果是一样的只是把value值放置的位置不同至于使用那个根据个人的喜爱,语法1和语法2是向scope范围内存储一个值,语法3和语法4是给指定的JavaBean赋值。

    【示例代码】:代码给出了给指定scope范围赋值的示例。使用标签把值放入sessionapplication对象中。同时使用EL表达式得到存入的值。

    代码9.2 使用存取值:coredemo02.jsp

    1    

    2    

    3    

    4    

    5    

    set<span>标签的使用</span>

    6    

    7    

    8    

  • 把一个值放入session中。

    9    

  • session中得到值:${sessionScope.name1 }

    10    

  • 把另一个值放入application中。olive

    11             

  •  使用out标签和EL表达式嵌套得到值:

    12              未得到name的值

  • 13    

  • 未指定scope的范围,会从不同的范围内查找得到相应的值:${name1 }${name2 }

    14    

    15    

    【代码解析】:

    1)第8行通过标签将值name1的值放入session范围中。

    2)第9行使用EL表达式得到name1的值。

    3)第10行把name2放入application范围中。

    4)第11行使用EL表达式从application范围中取值,用标签输出使得页面规范化。

    5)第13行不指定范围使用EL自动查找得到值。

    程序运行的结果如图9.2所示。

    soscw.com,搜素材

    图9.2 coredemo02.jsp

    在代码中未使用任何Java脚本使用程序的功能。为了对比期间,代码9.3给出了使用Java脚本实现以上功能的例子。

    代码9.3 Java脚本实现值的存取:getvalue.jsp

    1    

    2    

    3    

    4    

    set<span>标签的使用</span>

    5    

    6    

    7    

  • 把一个值放入session中。
  • 8    

  • session中得到值:
  • 9    

  • 把另一个值放入application中。
  • 10    

  •  application中得到值:
  • 11    

    12    

    【代码解析】:使用JSP内置对象的方法实现存值和取值的功能。

    程序运行结果如图9.3所示:

    soscw.com,搜素材

    9.3 getvalue.jsp运行结果

    提示:本章示例为了方便期间都是从一个页面中存取,在开发中值的存取是为了不同的JSP页面之间共享数据

    从两个程序对比来看,JSTL实习了使用标签完成取值赋值的功能,减少代码的编写量同时避免了逻辑代码暴露的危险。

    【程序示例】:代码9.4和代码9.5演示使用标签>操纵JavaBean

    1)创建一个JavaBean对象。

    代码9.4 JavaBeanvo数据传输对象):Person.java

    1     package org.olive;

    2     public class Person {

    3              private String name;                                      //定义私有变量姓名字符串

    4              private int age;                                                //定义私用变量年龄整型

    5              private char sex;                                             //定义私用变量性别字符性

    6              private String home;                                      //定义私用变量家乡字符串

    7              public String getName() {                             //namegetter方法

    8                        return name;

    9              }

    10              public void setName(String name) {          //namesetter方法。

    11                        this.name = name;

    12              }

    13              public int getAge() {                                        //agegetter方法

    14                        return age;

    15              }

    16              public void setAge(int age) {                        //agesetter方法

    17                        this.age = age;

    18              }

    19              public char getSex() {                                    //sexgetter方法

    20                        return sex;

    21              }

    22              public void setSex(char sex) {                      //sexsetter方法

    23                        this.sex = sex;

    24              }

    25              public String getHome() {                             //homegetter方法

    26                        return home;

    27     }

    28              public void setHome(String home) {                   //homesetter方法

    29                       this.home = home;

    30              }

    31     }

    【代码解析】:一个只有gettersetter方法的JavaBean或者说一个pojo类,作为一个vo(数据传输对象)。定义了四个变量agenamesexhome

    2)创建JSP页面,实现对值的操作。

    代码9.5 操作JavaBeancoredemo03.jsp

    1    

    2    

    3    

    4    

    5    

    6    

    set<span>标签的使用</span>

    7    

    8    

    9              maverick

    10              25

    11             

    12              china

    13             

  • 使用的目标对象为:${person }

    14             

  • Bean中获得的name值为:

    15             

  • Bean中获得的age值为:

    16             

  • Bean中获得的sex值为:

    17             

  • Bean中获得的home值为:

    18             

    19    

    【代码解析】:

    1)第1行设置页面格式和字符编码集。

    2)第2行使用JSP的指令元素指定要使用的JavaBean

    3)第3行引入JSTL核心标签库。

    4)第9~12行设置JavaBean的属性值,等同与setter方法。

    5)使用EL表达式得到JavaBean的属性值,并用out标签输出。

    【关键代码】:

    负责实例化Beanid指定实例化后的对象名,可以通过${person}得到person在内存中的值(或者使用person.toString()方法)。

    maverick

    Target指向实例化后的对象,property指向要插入值的参数名。

    注意:使用target时一定要指向实例化后的JavaBean对象,也就是要跟配套使用,也可以java脚本实例化,但这就失去了是用标签的本质意义。

    使用Java脚本实例化:

    程序运行结果如图9.4所示。

    soscw.com,搜素材

    9.4 coredemo03.jsp运行结果

    3标签

    标签主要用来从指定的JSP范围内移除指定的变量。

    【语法】:

    变量名” [scope=”page|request|session|application”]/>

    其中var属性是必须的,scope可以以省略。

    【示例程序】:代码9.6使用set标签在session中插入2个值,然后用remove标签移除。

    代码9.6 标签示例:coredemo04.jsp

    1      

    2      

    3      

    4      

    5      

    remove<span>标签的使用</span>

    6      

    7      

     

    8               

  • olive

    9               

  • 25

    10             

  • 11             

  • 12             

  • 13             

  • 14             


  • 评论


    亲,登录后才可以留言!