JavaWeb学习----JSTL标签库

一、JSTL简介:

JSTL全名为JavaServer Pages Standard Tag Library,中文名称为JSP标准标签函数库,目前最新的版本为1.2。JSTL是由JCP(Java Community Process)所指定的标准规格,它主要提供给Java Web开发人员一个标准通用的标签函数库。

Web 程序开发人员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性、维护性和方便性。

既然是库文件,那我们就要先下载咯。下载链接:http://tomcat.apache.org/

点击上图中红框部分的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、表达式标签:

  • <c:out>:主要用来显示数据的内容,就像是 <%= scripting-language %> 一样
  • <c:set>:主要用来将变量储存至JSP范围中或是JavaBean的属性中
  • <c:remove>:主要用来移除变量
  • <c:catch>:主要用来处理产生错误的异常状况,并且将错误信息储存起来(用的少)

2、流程控制:

  • <c:if>:用途和我们一般在程序中用的if 一样
  • <c :choose>:本身只当做 <c:when> 和 <c:otherwise> 的父标签
  • <c :when>/<c :otherwise>:使用<c:when>和<c:otherwise>来做流程控制时,两者都必须为<c:choose>的子标签(类似于switch···case···)

3、迭代操作:

  • <c :forEach>:循环遍历,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。
  • <c :forTokens>:用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。

下面来详细介绍一下这些标签。

二、核心标签库:

包含Web应用的常见工作, 比如:循环、表达式赋值、 基本输入输出等。

1、表达式标签:

  • <c:out>:主要用来显示数据的内容,就像是 <%= scripting-language %> 一样
  • <c:set>:主要用来将变量储存至JSP范围中或是JavaBean的属性中
  • <c:remove>:主要用来移除变量
  • <c:catch>:主要用来处理产生错误的异常状况,并且将错误信息储存起来(用的少)

代码举例:

  • <c:out>标签

新建JavaWeb工程Test08,index.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<%

request.setAttribute("name", "smyhvae");

%>

</head>

<body>

<c:out value="${requestScope.name} "></c:out>

</body>

</html>

第03行、10行、14行是我添加的代码。

03行(固定代码):使用JSTL不要忘记引入标签库。prefix="c"是前缀,“c”代表的是“<c:out>”这个表达式。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标签中,只要输入"<c",就可以通过代码提示看到许多标签。

我们在第10行给request添加一个属性,然后就可以在第14行通过out输出标签输出这个值了(当然,也可以用EL表达式来输出),运行程序,效果如下:

  • <c:set>标签

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<%

request.setAttribute("name", "smyhvae");

%>

</head>

<body>

<%--输出标签 --%>

<c:out value="${requestScope.name} "></c:out>

<%--定义变量标签 --%>

<c:set var="age" value="22"></c:set>

${age }

</body>

</html>

见18、19行代码。

效果如下:

2、流程控制:

  • <c:if>:用途和我们一般在程序中用的if 一样
  • <c :choose>:本身只当做 <c:when> 和 <c:otherwise> 的父标签
  • <c :when>/<c :otherwise>:使用<c:when>和<c:otherwise>来做流程控制时,两者都必须为<c:choose>的子标签(类似于switch···case···)

新建index2.sp文件。代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<%

request.setAttribute("name", "smyhvae");

%>

</head>

<body>

 

<%--流程控制标签if --%>

<c:if test="${not empty requestScope.name }">

欢迎你,${requestScope.name }

</c:if>

 

<c:if test="${empty requestScope.name }">

请登录后操作

</c:if>

<br />

 

<%--流程控制标签choose --%>

<c:set var="age" value="22"></c:set>

 

<c:choose>

<c:when test="${age<18 }">

未成年,不许进。

</c:when>

<c:when test="${age>=18 && age<50 }">

欢迎光临。

</c:when>

<c:otherwise>

老年人请注意身体。

</c:otherwise>

</c:choose>

 

</body>

</html>

15至22行为if标签(和if语句的功能是一样的),16行中test里面的内容必须为boolean值:我们在第10行添加了name的值,然后在16行、20行判断name的值是否为空,进而做出判断。

25行至38行为choose标签(和switch···case···的功能是一样的)。

运行程序,效果如下:

3、迭代操作:

  • <c :forEach>:循环遍历,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。
  • <c :forTokens>:用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。

代码举例:

  • <c :forEach>

新建类User,作为遍历的对象。User.java代码如下:

package com.vae.bean;

 

public class User {

private String name;

private String sex;

private int age;

public User() {

super();

}

public User(String name, String sex, int age) {

super();

this.name = name;

this.sex = sex;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "User [name=" + name + ", sex=" + sex + ", age=" + age + "]";

}

 

}

新建文件index3.jsp,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@page import="com.vae.bean.User,java.util.*"%>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

 

<%

List<User> users = new ArrayList<User>();

User u1 = new User("生命壹号", "男", 22);

User u2 = new User("生命二号", "男", 23);

User u3 = new User("vae", "女", 24);

users.add(u1);

users.add(u2);

users.add(u3);

request.setAttribute("users", users);

%>

</head>

 

<body>

<table border="1">

<tr>

<th>name</th>

<th>sex</th>

<th>age</th>

</tr>

 

<c:forEach items="${requestScope.users }" var="user">

<tr>

<td>${user.name}</td>

<td>${user.sex}</td>

<td>${user.age}</td>

</tr>

</c:forEach>

</body>

</html>

核心代码是31行至37行。

我们在12至19行里,往List中加入多个user对象的值,并放入request中。然后在第24行加入一个表格,在表格里通过<c :forEach>遍历User对象中的内容,这里用到了<c :forEach>中的两个属性:31行的"items"表示需要迭代的集合,"var"表示每次一取,定义的变量。

运行程序,效果如下:

<c :forEach>中的属性:

我们在上面的代码中的31行用到了过<c :forEach>中的两个属性:items和var。接下来来学习一下其他的属性:

  • begin:表示从第几个开始索引,一般不写;
  • end:表示结束的位置。如果需要遍历十行,在此处写10即可。
  • step:增量。

上面的三个属性用的比较少。

  • varStatus:当前的状态。它的状态有以下几个:

index  索引 从0开始

count  从1开始 当前遍历次数

current 当前正在迭代的对象

first  是否是第一个

last   是否是最后一个

我们给varStatus举个例子。我们在上面的index3.jsp代码中进一步添加:

index3.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@page import="com.vae.bean.User,java.util.*"%>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

 

<%

List<User> users = new ArrayList<User>();

User u1 = new User("生命壹号", "男", 22);

User u2 = new User("生命二号", "男", 23);

User u3 = new User("vae", "女", 24);

users.add(u1);

users.add(u2);

users.add(u3);

request.setAttribute("users", users);

%>

</head>

 

<body>

 

<table border="1">

<tr>

<th>name</th>

<th>sex</th>

<th>age</th>

<th>状态值</th>

</tr>

 

<c:forEach items="${requestScope.users }" var="user" varStatus="status">

<tr>

<td>${user.name}</td>

<td>${user.sex}</td>

<td>${user.age}</td>

<td>

index :${status.index }<br/>

count :${status.count }<br/>

current :${status.current }<br/>

first :${status.first }<br/>

last :${status.last }<br/>

</td>

</tr>

</c:forEach>

</table>

 

</body>

</html>

加粗部分的30行、33行中的varStatus属性、38行至44行是我添加的代码。运行程序,效果如下:

通过上面的图片,再来回顾一下varStatus的各种状态,就一目了然了:

  • index  索引 从0开始
  • count  从1开始 当前遍历次数
  • current 当前正在迭代的对象
  • first  是否是第一个
  • last   是否是最后一个

代码举例:

  • <c :forTokens>

新建index4.jsp文件,代码如下:

index4.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

 

<c:set var="likes" value="羽毛球,摄影,音乐"></c:set>

<c:forTokens items="${likes }" delims="," var="myValue">

${myValue }<br/>

</c:forTokens>

</body>

</html>

12行:字符串的键为likes,值为"羽毛球,摄影,音乐"。

13行:遍历items中的字符串,delims中的逗号是分隔符。

运行程序,效果如下:

【工程文件】

链接:http://pan.baidu.com/s/1qWNU6Xe

密码:itqn

时间: 2024-08-25 00:30:26

JavaWeb学习----JSTL标签库的相关文章

Java学习——JSTL标签与EL表达式之间的微妙关系

原文总结的太好了,忍不住记录.转发. 原文地址:http://blog.csdn.net/u010168160/article/details/49182867 目录(?)[-] 一EL表达式 EL相关概念 EL基本格式 EL语法组成-标识符 PS使用EL的时候默认会以一定顺序pageContextrequestsessionapplication搜索四个作用域将最先找到的变量值显示出来 开启和关闭EL表达式 二JSTL标签库 相关概念 JSTL标签库分类 JSTL的优点 为什么要用JSTL 使

javaweb学习总结(二十八)——JSTL标签库之核心标签【转】

原文地址:javaweb学习总结(二十八)——JSTL标签库之核心标签 一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心标签(用得最多) 国际化标签(I18N格式化标签) 数据库标签(SQL标签,很少使用) XML标签(几乎不用) JSTL函数(EL函数) 三.核心标签库使用说明 JSTL的核心标签库标签共13个,使用这些标签能够完成JSP页面的

JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% request.setCharacterEncoding("UTF-8"); %> <jsp:forward page="/index.jsp"> <jsp:param value="张三" name="userName&q

javaweb学习总结(二十八)——JSTL标签库之核心标签

一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心标签(用得最多) 国际化标签(I18N格式化标签) 数据库标签(SQL标签,很少使用) XML标签(几乎不用) JSTL函数(EL函数) 三.核心标签库使用说明 JSTL的核心标签库标签共13个,使用这些标签能够完成JSP页面的基本功能,减少编码工作. 从功能上可以分为4类:表达式控制标签.流程控制

javaWeb学习总结(9)- JSTL标签库之核心标签

一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心标签(用得最多) 国际化标签(I18N格式化标签) 数据库标签(SQL标签,很少使用) XML标签(几乎不用) JSTL函数(EL函数) 三.核心标签库使用说明 JSTL的核心标签库标签共13个,使用这些标签能够完成JSP页面的基本功能,减少编码工作. 从功能上可以分为4类:表达式控制标签.流程控制

JavaWeb基础—EL表达式与JSTL标签库

EL表达式: EL 全名为Expression Language.EL主要作用 获取数据(访问对象,访问数据,遍历集合等) 执行运算 获取JavaWeb常用对象 调用Java方法(EL函数库) 给出一个小案例: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="com.jiangbei.domain

JAVAWEB开发之JSTL标签库的使用、 自己定义EL函数、自己定义标签(带属性的、带标签体的)

JSTL JSTL简单介绍: JSTL的全称:JSP Standard Tag Library.JSP标准标签库 JSTL的作用: 提供给Java Web开发者一个标准通用的标签函数库 和EL来代替传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性.维护性和方便性 JSTL的版本号: JSTL的主要版本号是1.0.1.1和1.2(差别不大) 1.0版本号EL表达式还没有纳入官方规范 1.1和1.2版本号EL表达式已经纳入了官方规范 JSTL1.1 下载对应的jar包

学会怎样使用Jsp 内置标签、jstl标签库及自定义标签

学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签. jsp标签的分类: 1)内置标签(动作标签): 不需要在jsp页面导入标签 2)jstl标签: 需要在jsp页面中导入标签 3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签 1.内置标签(动作标签): <jsp:forward />转发标签: 语法:<jsp:forward page="

JSTL标签库(转)

原文地址:http://www.blogjava.net/maverick1003/articles/236575.html JSTL标签库 JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的.在告别modle1模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定义标签的开发难度较大和不利于技术标准化产生了自定义标签库. JSTL标签库可分为5类: 1      核心标签库 2        I18N格式化标签库 3