JavaWeb开发与代码的编写(十二)
Jstl标签库
JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的。使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码
JSTL标签库的分类
- 核心标签(用得最多)
- 国际化标签(I18N格式化标签)
- 数据库标签(SQL标签,很少使用)
- XML标签(几乎不用)
- JSTL函数(EL函数)
核心标签库使用说明
JSTL的核心标签库标签共13个,使用这些标签能够完成JSP页面的基本功能,减少编码工作。
从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。 (1)表达式控制标签:out标签、set标签、remove标签、catch标签。 (2)流程控制标签:if标签、choose标签、when标签、otherwise标签。 (3)循环标签:forEach标签、forTokens标签。 (4)URL操作标签:import标签、url标签、redirect标签、param标签。
在JSP页面引入核心标签库的代码为:
标签的功能
标签主要是用来输出数据对象(字符串、表达式)的内容或结果。 在使用Java脚本输出时常使用的方式为: 或者 ,在web开发中,为了避免暴露逻辑代码会尽量减少页面中的Java脚本,使用标签就可以实现以上功能。
JSTL的使用是和EL表达式分不开的,EL表达式虽然可以直接将结果返回给页面,但有时得到的结果为空,有特定的结果处理功能,EL的单独使用会降低程序的易读性,建议把EL的结果输入放入标签中。
标签的语法
标签的使用有两种语法格式: 【语法1】: 【语法2】:默认值 这两种方式没有本质的区别,只是格式上的差别。[escapeXml=”true|false”] [default=”默认值”]这些使用[]属性表示是不是必须的。
标签的属性
标签的使用范例
JSTL: --表达式控制标签“out”标签的使用
- (1)
- (2)
- (3)
- (4)
- (5)
- (6)使用了默认值
- (7)
- (8)
- (9)
运行结果如下:
表达式控制标签——set标签使用总结
标签的功能
标签用于把某一个对象存在指定的域范围内,或者将某一个对象存储到Map或者JavaBean对象中。
标签的语法
标签的编写共有4种语法格式。 语法1:存值,把一个值放在指定的域范围内。 含义:把一个变量名为name1值为“值1”的变量存储在指定的scope范围内。 语法2: 值2 含义:把一个变量名为name2,值为值2的变量存储在指定的scope范围内。 语法3: 含义:把一个值为“值3”赋值给指定的JavaBean的属性名。相当与setter()方法。 语法4: 值4 含义:把一个值4赋值给指定的JavaBean的属性名。 从功能上分语法1和语法2、语法3和语法4的效果是一样的,只是把value值放置的位置不同,至于使用那个根据个人的喜爱,语法1和语法2是向scope范围内存储一个值,语法3和语法4是给指定的JavaBean赋值。
标签的属性
标签的使用范例
1
2
3
4
5
6
8
9
10
11
12 JSTL: --表达式控制标签“set”标签的使用
13
14
15
16
17 代码给出了给指定scope范围赋值的示例。
18
19
20 - 把一个值放入page域中:
21
22 - 从page域中得到值:${pageScope.data1}
23
24
25 - 把一个值放入request域中:
26
27 - 从request域中得到值:${requestScope.data2}
28
29
30 - 把一个值放入session域中。
31
32 - 从session域中得到值:${sessionScope.name1}
33
34
35 - 把一个值放入application域中。白虎神皇
36
37 - 使用out标签和EL表达式嵌套从application域中得到值:
38 未得到name的值
39
40
41
42 - 未指定scope的范围,会从不同的范围内查找得到相应的值:${data1}、${data2}、${name1}、${name2}
43
44
45 使用Java脚本实现以上功能
46
47
48 - 把一个值放入page域中。
49 - 从page域中得到值:
50
51 - 把一个值放入request域中。
52 - 从request域中得到值:
53
54 - 把一个值放入session域中。
55 - 从session中域得到值:
56
59
60 - 把另一个值放入application域中。
61 - 从application域中得到值:
62
63
64 - 未指定scope的范围,会从不同的范围内查找得到相应的值:
65 、
66 、
67 、
68
69
70
71
72
73 操作JavaBean,设置JavaBean的属性值
74
你的成绩为优秀!
您的成绩为良好!
您的成绩为及格
对不起,您没有通过考试!
运行结果如下:
循环标签——forEach标签使用总结
标签的功能
该标签根据循环条件遍历集合(Collection)中的元素。
标签的语法
本体内容
【参数解析】: (1)var设定变量名用于存储从集合中取出元素。 (2)items指定要遍历的集合。 (3)varStatus设定变量名,该变量用于存放集合中元素的信息。 (4)begin、end用于指定遍历的起始位置和终止位置(可选)。 (5)step指定循环的步长。
标签属性
其中varStatus有4个状态属性,如下表所示:
使用范例
JSTL: -- forEach标签实例
的四种属性:
所在位置,即索引:
总共已迭代的次数:
是否为第一个位置:
是否为最后一个位置:
运行结果如下:
循环标签——forTokens标签使用总结
标签的功能
该标签用于浏览字符串,并根据指定的字符将字符串截取。
标签的语法
语法: 本体内容 【参数说明】 (1)items指定被迭代的字符串。 (2)delims指定使用的分隔符。 (3)var指定用来存放遍历到的成员。 (4)begin指定遍历的开始位置(int型从取值0开始)。 (5)end指定遍历结束的位置(int型,默认集合中最后一个元素)。 (6)step遍历的步长(大于0的整型)。 (7)varStatus存放遍历到的成员的状态信息
使用范例
JSTL: -- forTokens标签实例
的四种属性:
所在位置,即索引:
总共已迭代的次数:
是否为第一个位置:
是否为最后一个位置:
运行结果如下:
URL操作标签——import标签使用讲解
标签的功能
该标签可以把其他静态或动态文件包含到本JSP页面,与的区别为:只能包含同一个web应用中的文件。而可以包含其他web应用中的文件,甚至是网络上的资源。
标签的语法
【语法1】: 【语法2】:
【参数说明】: (1)URL为资源的路径,当引用的资源不存在时系统会抛出异常,因此该语句应该放在语句块中捕获。 (2)引用资源有两种方式:绝对路径和相对路径。 使用绝对路径的示例如下: 使用相对路径的示例如下:,aa.txt放在同一文件目录。 (3)如果以“/”开头表示应用的根目录下。例如:tomcat应用程序的根目录文件夹为webapps。导入webapps下的文件bb.txt的编写方式为: 如果访问webapps管理文件夹中其他web应用就要用context属性。 (4)context属性用于在访问其他web应用的文件时,指定根目录。例如,访问root下的index.jsp的实现代码为: 等同于webapps/root/index.jsp (5)var、scope、charEncoding、varReader是可选属性。
标签的使用范例
JSTL: -- import标签实例
${error1}
${error2}
${error3}
URL操作标签——url标签使用总结
标签的功能
标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。
标签的语法
【语法1】:指定一个url不做修改,可以选择把该url存储在JSP不同的范围中。 【语法2】:配合 标签给url加上指定参数及参数值,可以选择以name存储该url。
标签的主要属性
标签使用范例
JSTL: -- url标签实例
使用url标签生成一个动态的url,并把值存入session中.
百度首页(不带参数)
配合 <c:param>标签给url加上指定参数及参数值,生成一个动态的url然后存储到paramUrl变量中
123456
百度首页(带参数)
URL操作标签——redirect标签使用总结
标签的功能
该标签用来实现请求的重定向。同时可以配合使用标签在url中加入指定的参数。
标签的语法
【语法1】: 【语法2】: 【参数说明】: (1)url指定重定向页面的地址,可以是一个string类型的绝对地址或相对地址。 (2)context用于导入其他web应用中的页面。
标签的属性
标签使用范例
JSTL: -- redirect标签实例
GACL
123
标签使用总结
在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。标签可以嵌套在、或标签内,为这些标签所使用的URL地址附加参数。 标签在为一个URL地址附加参数时,将自动对参数值进行URL编码,例如,如果传递的参数值为“中国”, 则将其转换为“%d6%d0%b9%fa”后再附加到URL地址后面,这也就是使用标签的最大好处。 示例1:与标签嵌套使用
123456
百度首页(带参数)
示例2:与标签嵌套使用
GACL
123
关于JSTL核心标签库中的标签掌握以上的那些标签基本上就可以应付开发了。