概念:JavaServer Pages Tag Library JSP标准标签库
是由 Apache 组织提供的开源的免费的 jsp 标签
作用:用于简化和替换 jsp 页面上的 java 代码
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别。
核心标签格式化标签SQL 标签XML 标签JSTL 函数JSTL 库安装
<dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>接下来我们在 web.xml 文件中添加以下配置:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <jsp-config> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri> <taglib-location>/WEB-INF/fmt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/fmt-rt</taglib-uri> <taglib-location>/WEB-INF/fmt-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri> <taglib-location>/WEB-INF/c.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/core-rt</taglib-uri> <taglib-location>/WEB-INF/c-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/sql</taglib-uri> <taglib-location>/WEB-INF/sql.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/sql-rt</taglib-uri> <taglib-location>/WEB-INF/sql-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/x</taglib-uri> <taglib-location>/WEB-INF/x.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/x-rt</taglib-uri> <taglib-location>/WEB-INF/x-rt.tld</taglib-location> </taglib> </jsp-config> </web-app>使用任何库,你必须在每个 JSP 文件中的头部包含 标签。
核心标签是最常用的 JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 标签描述<c:out>用于在JSP中显示数据,就像<%= … ><c:set>用于保存数据<c:remove>用于删除数据<c:catch>用来处理产生错误的异常状况,并且将错误信息储存起来<c:if>与我们在一般程序中用的if一样<c:choose>本身只当做<c:when>和<c:otherwise>的父标签<c:when><c:choose>的子标签,用来判断条件是否成立<c:otherwise><c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行<c:import>检索一个绝对或相对 URL,然后将其内容暴露给页面<c:forEach>基础迭代标签,接受多种集合类型<c:forTokens>根据指定的分隔符来分隔内容并迭代输出<c:param>用来给包含或重定向的页面传递参数<c:redirect>重定向至一个新的URL.<c:url>使用可选的查询参数来创造一个URLJSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 标签描述<fmt:formatNumber>使用指定的格式或精度格式化数字<fmt:parseNumber>解析一个代表着数字,货币或百分比的字符串<fmt:formatDate>使用指定的风格或模式格式化日期和时间<fmt:parseDate>解析一个代表着日期或时间的字符串<fmt:bundle>绑定资源<fmt:setLocale>指定地区<fmt:setBundle>绑定资源<fmt:timeZone>指定时区<fmt:setTimeZone>指定时区<fmt:message>显示资源配置文件信息<fmt:requestEncoding>设置request的字符编码JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。引用SQL标签库的语法如下:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> 标签描述<sql:setDataSource>指定数据源<sql:query>运行SQL查询语句<sql:update>运行SQL更新语句<sql:param>将SQL语句中的参数设为指定值<sql:dateParam>将SQL语句中的日期参数设为指定的java.util.Date 对象值<sql:transaction>在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行JSTL XML标签库提供了创建和操作XML文档的标签。引用XML标签库的语法如下:
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>在使用xml标签前,你必须将XML 和 XPath 的相关包拷贝至你的<Tomcat 安装目录>\lib下: XercesImpl.jar 下载地址: http://www.apache.org/dist/xerces/j/ xalan.jar 下载地址: http://xml.apache.org/xalan-j/index.html
标签描述<x:out>与<%= … >,类似,不过只用于XPath表达式<x:parse>解析 XML 数据<x:set>设置XPath表达式<x:if>判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体<x:forEach>迭代XML文档中的节点<x:choose><x:when>和<x:otherwise>的父标签<x:when><x:choose>的子标签,用来进行条件判断<x:otherwise><x:choose>的子标签,当<x:when>判断为false时被执行<x:transform>将XSL转换应用在XML文档中<x:param>与<x:transform>共同使用,用于设置XSL样式表JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 函数描述fn:contains()测试输入的字符串是否包含指定的子串fn:containsIgnoreCase()测试输入的字符串是否包含指定的子串,大小写不敏感fn:endsWith()测试输入的字符串是否以指定的后缀结尾fn:escapeXml()跳过可以作为XML标记的字符fn:indexOf()返回指定字符串在输入字符串中出现的位置fn:join()将数组中的元素合成一个字符串然后输出fn:length()返回字符串长度fn:replace()将输入字符串中指定的位置替换为指定的字符串然后返回fn:split()将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回fn:startsWith()测试输入字符串是否以指定的前缀开始fn:substring()返回字符串的子集fn:substringAfter()返回字符串在指定子串之后的子集fn:substringBefore()返回字符串在指定子串之前的子集fn:toLowerCase()将字符串中的字符转为小写fn:toUpperCase()将字符串中的字符转为大写fn:trim()移除首尾的空白符 <%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>if标签</title> </head> <body> <%-- c:if标签 1. 属性: * test 必须属性,接受boolean表达式 * 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容 * 一般情况下,test属性值会结合el表达式一起使用 2. 注意:c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签 --%> <c:if test="true"> <h1>我是真...</h1> </c:if> <br> <% //判断request域中的一个list集合是否为空,如果不为null则显示遍历集合 List list = new ArrayList(); list.add("aaaa"); request.setAttribute("list",list); request.setAttribute("number",4); %> <c:if test="${not empty list}"> 遍历集合... </c:if> <br> <c:if test="${number % 2 != 0}"> ${number}为奇数 </c:if> <c:if test="${number % 2 == 0}"> ${number}为偶数 </c:if> </body> </html>一个 JavaBean 对象的属性应该是可访问的。这个属性可以是任意合法的 Java 数据类型,包括自定义 Java 类。 一个 JavaBean 对象的属性可以是可读写,或只读,或只写。JavaBean 对象的属性通过 JavaBean 实现类中提供的两个方法来访问:
方法描述getPropertyName()举例来说,如果属性的名称为 myName,那么这个方法的名字就要写成 getMyName() 来读取这个属性。这个方法也称为访问器。setPropertyName()举例来说,如果属性的名称为 myName,那么这个方法的名字就要写成 setMyName()来写入这个属性。这个方法也称为写入器。一个只读的属性只提供 getPropertyName() 方法,一个只写的属性只提供 setPropertyName() 方法。
这是 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; } }<jsp:useBean>标签可以在 JSP 中声明一个 JavaBean,然后使用。声明后,JavaBean 对象就成了脚本变量,可以通过脚本元素或其他自定义标签来访问。jsp:useBean 标签的语法格式如下:
<jsp:useBean id="bean 的名字" scope="bean 的作用域" typeSpec/>其中,根据具体情况,scope 的值可以是 page,request,session 或 application。id值可任意只要不和同一 JSP 文件中其它 jsp:useBean 中 id 值一样就行了。 接下来给出的是 jsp:useBean 标签的一个简单的用法:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <title>useBean 实例</title> </head> <body> <jsp:useBean id="date" class="java.util.Date" /> <p>日期为:<%= date %> </body> </html>它将会产生如下结果:
日期为:Tue Jun 28 15:22:24 CST 2016在 <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>get 和 set 属性实例</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