JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)
JSTL提供了核心标签库、格式标签库、SQL标签库、XML标签库和函数标签库5中标签库。
核心标签库
核心标签库主要用于完成JSP页面常用功能,其中包括JSTL的表达式标签,条件标签,循环标签和URL标签。
格式标签库
格式标签库提供了一个简单的国际化(I18N)标记,用于处理国际化相关问题,另外格式标签库中还包含了用于格式化数字和日期显示格式的标签。
SQL标签库
SQL标签库封装了数据库访问的通用逻辑,简化了对数据库的访问,如果结合核心标签库,可以很方便的获取结果集,并迭代输出结果集中的数据。
XML标签库
XML标签库可以处理和生成XML标记,使用这些标记可以很方便的开发基于XML的Web应用。
函数标签库
函数标签库提供了一系列字符串操作函数,用于完成分解字符串,连接字符串,返回子串,确定字符串是否包含特定的子串等功能。
在使用JSTL标签之前,必须在JSP页面的首行使用<%@ taglib%>指令定义标签库的位置和访问前缀。
标签库名称 | 资源标示符(uri) | 前缀(prefix) |
核心标签库 | http://java.sun.com/jsp/jstl/core | c |
XML标签库 | http://java.sun.com/jsp/jstl/xml | x |
数据库标签库 | http://java.sun.com/jsp/jstl/sql | sql |
格式化标签库 | http://java.sun.com/jsp/jstl/fmt | fmt |
函数标签库 | http://java.sun.com.jsp/jstl/functions | fn |
表达式标签
表达式标签主要包括<c:out>,<c:set>,<c:remove>,<c:catch>4个标签。
<c:out>输出标签
<c:out>输出标签用于将表达式的值输出到JSP页面中,该标签可以代替<%= %>。类似于JSP内置对象中的out。
语法:
<c:out value="expression" escapeXml="true|false" default="defaultValue"/>
其中value用于指定将要输出的变量或表达式;escapeXML用于指定是否转换特殊字符,默认为TRUE,表示转换,例如:将"<"转换为"<"default 用于指定当value值等于null时,将要显示的默认值。
其中value可以使用EL表达式,而其他不可以使用EL表达式。
例如:使用<c:out>标签输出字符串"水平线标记<hr>"。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
当escapeXml属性为TRUE时:
<c:out value="水平线标记<hr>" escapeXml="true"/>
<br>
当escapeXml属性为false时:
<c:out value="水平线标记<hr>" escapeXml="false"></c:out>
</body>
</html>
最终显示效果如图:
<c:set>设置标签
<c:set>标签用于在指定范围(page、request、session、application)内定义保存某个变量的值。
语法:将值存在指定名称的变量中
<c:set value="value" var="name" scope="page"/>
或将变量存储在指定对象的属性中。
<c:set value="value" var="name" scope="page"/>
注意,target属性不能直接指定javaBean或Map,而应该是使用EL表达式或脚本表达式指定真正的对象,例如要为student对象name属性赋值,应该使用target="${student}"而不是使用target=student。
首先看一下javaBean
package Bean;
public class Student {
private String name;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后看相关处理界面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="Bean.Student" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP</title>
</head>
<body>
<c:set var="info" value="这是测试信息!" scope="session"/>
${info}
<br>
<jsp:useBean id="student" class="Bean.Student"/>
<c:set value="张三" target="${student}" property="name"/>
${student.name }
</body>
</html>
<c:remove>移除标签
<c:remove>标签可以从指定的JSP范围内移除指定的变量。
语法:
<c:remove var="name" scope="page"/>
var是要移除变量的名称。scope是用于指定变量的存在范围。可选值有page,request,session,application,默认是page。
例如:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'CRemove.jsp' starting page</title>
</head>
<body>
<c:set var="mess" value="测试信息!"/>
<c:out value="${mess}"/>
<c:remove var="mess"/>
<c:out value="${mess}" default="值为空"/>
</body>
</html>