一、JSTL简介:
JSTL全名为JavaServer Pages Standard Tag Library,中文名称为JSP标准标签函数库,目前最新的版本为1.2。JSTL是由JCP(Java Community Process)所指定的标准规格,它主要提供给Java Web开发人员一个标准通用的标签函数库。
Web 程序开发人员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性、维护性和方便性。
下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
点击上图中红框部分的Taglibs,进入如下界面:
点击上图中的红框部分,进入如下界面:
上图中,点击最新版本进行下载。
下载完之后,将jar包复制到JavaWeb工程的/WebContent/WEB-INF/lib目录下即可使用。
JSTL所提供的标签函数库主要分为五大类:
(1)核心标签库 (Core tag library)
(2)I18N 格式标签库 (I18N-capable formatting tag library)
(3)SQL 标签库 (SQL tag library)
(4)XML 标签库 (XML tag library)
(5)函数标签库 (Functions tag library
最常用的是第一个,其他几个不是很常用。
核心标签库 (Core tag library)主要有以下几种:
1、表达式标签:
:主要用来显示数据的内容,就像是 一样
:主要用来将变量储存至JSP范围中或是JavaBean的属性中
:主要用来移除变量
:主要用来处理产生错误的异常状况,并且将错误信息储存起来(用的少)
2、流程控制:
:用途和我们一般在程序中用的if 一样
:本身只当做 和 的父标签
/:使用和来做流程控制时,两者都必须为的子标签(类似于switch···case···)
3、迭代操作:
:循环遍历,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行的本体内容。
:用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
下面来详细介绍一下这些标签。
二、核心标签库:
包含Web应用的常见工作, 比如:循环、表达式赋值、 基本输入输出等。
1、表达式标签:
:主要用来显示数据的内容,就像是 一样
:主要用来将变量储存至JSP范围中或是JavaBean的属性中
:主要用来移除变量
:主要用来处理产生错误的异常状况,并且将错误信息储存起来(用的少)
代码举例:
标签
新建JavaWeb工程Test08,index.jsp代码如下:
1
2 pageEncoding="UTF-8"%>
3
4
5
6
7
8
Insert title here9
10 request.setAttribute("name", "smyhvae");11 %>
12
13
14
15
16
17
第03行、10行、14行是我添加的代码。
03行(固定代码):使用JSTL不要忘记引入标签库。prefix="c"是前缀,“c”代表的是“”这个表达式。uri中是填入命名空间,可以通过代码提示选择http://java.sun.com/jsp/jstl/core。可以通过下面的方式找到这个uri:在Java Reasources/Libraries/Web App Libraries/jstl.jar/META-INF目录下许多tld格式的文件,这些tld文件指的是标签库的声明文件:
上图中的c.tld文件代表的就是core这个标签库,打开它,能够看到uri:
其实第03行代码是固定写死了的,添加即可,可以不用深究。
一旦引入core标签库,此时在body标签中,只要输入"
我们在第10行给request添加一个属性,然后就可以在第14行通过out输出标签输出这个值了(当然,也可以用EL表达式来输出),运行程序,效果如下:
标签
1
2 pageEncoding="UTF-8"%>
3
4
5
6
7
8
Insert title here9
10 request.setAttribute("name", "smyhvae");
11 %>
12
13
14
15
16
17
18
19 ${age }20
21
22
见18、19行代码。
效果如下:
2、流程控制:
:用途和我们一般在程序中用的if 一样
:本身只当做 和 的父标签
/:使用和来做流程控制时,两者都必须为的子标签(类似于switch···case···)
新建index2.sp文件。代码如下:
1
2 pageEncoding="UTF-8"%>
3
4
5
6
7
8
Insert title here9
10 request.setAttribute("name", "smyhvae");
11 %>
12
13
14
15
16
17 欢迎你,${requestScope.name }
18
19
20
21 请登录后操作
22
23
24
25
26
27
28
29
30 未成年,不许进。
31
32
33 欢迎光临。
34
35
36 老年人请注意身体。
37
38
39
40
41
15至22行为if标签(和if语句的功能是一样的),16行中test里面的内容必须为boolean值:我们在第10行添加了name的值,然后在16行、20行判断name的值是否为空,进而做出判断。
25行至38行为choose标签(和switch···case···的功能是一样的)。
运行程序,效果如下:
3、迭代操作:
:循环遍历,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行的本体内容。
:用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
代码举例:
新建类User,作为遍历的对象。User.java代码如下:
1 package com.vae.bean;
2
3 public class User {
4 private String name;
5 private String sex;
6 private int age;
7 public User() {
8 super();
9 }
10 public User(String name, String sex, int age) {
11 super();
12 this.name = name;
13 this.sex = sex;
14 this.age = age;
15 }
16 public String getName() {
17 return name;
18 }
19 public void setName(String name) {
20 this.name = name;
21 }
22 public String getSex() {
23 return sex;
24 }
25 public void setSex(String sex) {
26 this.sex = sex;
27 }
28 public int getAge() {
29 return age;
30 }
31 public void setAge(int age) {
32 this.age = age;
33 }
34 @Override
35 public String toString() {
36 return "User [name=" + name + ", sex=" + sex + ", age=" + age + "]";
37 }
38
39
40 }
新建文件index3.jsp,代码如下:
1
2 pageEncoding="UTF-8"%>
3
4
5
6
7
8
9
Insert title here10
11
12 List users = new ArrayList();
13 User u1 = new User("生命壹号", "男", 22);
14 User u2 = new User("生命二号", "男", 23);
15 User u3 = new User("vae", "女", 24);
16 users.add(u1);
17 users.add(u2);
18 users.add(u3);
19 request.setAttribute("users", users);
20 %>
21
22
23
24
25
26
name27
sex28
age29
30
31
32
33
${user.name}34
${user.sex}35
${user.age}36
37
38
39
核心代码是31行至37行。
我们在12至19行里,往List中加入多个user对象的值,并放入request中。然后在第24行加入一个表格,在表格里通过遍历User对象中的内容,这里用到了中的两个属性:31行的"items"表示需要迭代的集合,"var"表示每次一取,定义的变量。
运行程序,效果如下:
中的属性:
我们在上面的代码中的31行用到了过中的两个属性:items和var。接下来来学习一下其他的属性:
begin:表示从第几个开始索引,一般不写;
end:表示结束的位置。如果需要遍历十行,在此处写10即可。
step:增量。
上面的三个属性用的比较少。
varStatus:当前的状态。它的状态有以下几个:
index 索引 从0开始
count 从1开始 当前遍历次数
current 当前正在迭代的对象
first 是否是第一个
last 是否是最后一个
我们给varStatus举个例子。我们在上面的index3.jsp代码中进一步添加:
index3.jsp:
1
2 pageEncoding="UTF-8"%>
3
4
5
6
7
8
9
Insert title here10
11
12 List users = new ArrayList();
13 User u1 = new User("生命壹号", "男", 22);
14 User u2 = new User("生命二号", "男", 23);
15 User u3 = new User("vae", "女", 24);
16 users.add(u1);
17 users.add(u2);
18 users.add(u3);
19 request.setAttribute("users", users);
20 %>
21
22
23
24
25
26
27
name28
sex29
age30
状态值31
32
33
34
35
${user.name}36
${user.sex}37
${user.age}38
39 index :${status.index }
40 count :${status.count }
41 current :${status.current }
42 first :${status.first }
43 last :${status.last }
44
45
46
47
48
49
加粗部分的30行、33行中的varStatus属性、38行至44行是我进一步添加的代码。运行程序,效果如下:
通过上面的图片,再来回顾一下varStatus的各种状态,就一目了然了:
index 索引 从0开始
count 从1开始 当前遍历次数
current 当前正在迭代的对象
first 是否是第一个
last 是否是最后一个
代码举例:
新建index4.jsp文件,代码如下:
index4.jsp:
1
2 pageEncoding="UTF-8"%>
3
4
5
6
7
8
Insert title here9
10
11
12
13
14 ${myValue }
15
16
17
12行:字符串的键为likes,值为"羽毛球,摄影,音乐"。
13行:遍历items中的字符串,delims中的逗号是分隔符。
运行程序,效果如下:
【工程文件】
密码:itqn