JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat4.x。在JSP 2.0中也是作为标准支持的。
如果要使用JSTL,则必须将jstl.jar和 standard.jar文件放到classpath中,如果你还需要使用XML processing及Database access(SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件中。
JSTL API文档下载
链接:http://pan.baidu.com/s/1o8FHODW 密码:1ayc
JSTL在线教程
http://www.runoob.com/jsp/jsp-jstl.html
Jar包下载地址:
http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
Maven地址:
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jstlartifactId>
<version>1.2version>
dependency>
根据JSTL标签所提供的功能,可以将其分为5个类别。
JSTL | 前置名称 | URL | 范例 |
---|---|---|---|
核心标签库 | c | http://java.sun.com/jsp/jstl/core | <c:out> |
功能分类 | 标签名称 |
---|---|
表达式操作 | out、set、remove、catch |
流程控制 | if、choose、when、otherwise |
迭代操作 | forEach、forTokens |
URL操作 | import、param、url、redirect |
要想使用这些功能,必须在jsp中引用
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
属性列表:
名称 | 说明 | 必须 | 默认值 |
---|---|---|---|
value | 要被存储的值 | 否 | 无 |
var | 欲存入的变量名称 | 否 | 无 |
scope | var变量的JSP范围 | 否 | page |
target | JavaBean或Map对象 | 否 | 无 |
property | 指定target对象的属性 | 否 | 无 |
set var="username" value="lingdu" />
set var="password" >123 set>
属性列表:
名称 | 说明 | 必须 | 默认值 |
---|---|---|---|
value | 需要显示出来的值 | 是 | 无 |
default | 如果value的值为null,则显示default的值 | 否 | 无 |
escapeXml | 是否转换特殊字符,如:<转换成 & lt; | 否 | true |
out value="${param.username}" default="username"/>
out value="${param.password}" default=" password "/>
属性列表:
名称 | 说明 | 必须 | 默认值 |
---|---|---|---|
var | 欲移出的变量名称 | 是 | 无 |
scope | Var变量的JSP范围 | 否 | page |
remove var="username" scope="session"/>
${sessionScope.username} —>输不出结果
名称 | 说明 | 必须 | 默认值 |
---|---|---|---|
test | 如果表达式的结果为true,则执行体内容,false则相反 | 是 | 无 |
var | 用来存储test运算的结果(true或false) | 否 | 无 |
scope | Var变量的JSP范围 | 否 | page |
if test="${username=='haha' }">
out value="true"> out>
if>
if test="${username != 'haha' }">
out value="false"> out>
if>
属性列表:
名称 | 说明 | 必须 | 默认值 |
---|---|---|---|
test | 如果表达式的结果为true,则执行体内容,false则相反 | 是 | 无 |
<c:choose>
<c:when test="${username=='haha' }">
<c:out value="true">c:out>
c:when>
<c:otherwise>
<c:out value="false">c:out>
c:otherwise>
c:choose>
属性列表:
名称 | 说明 | 必须 | 默认值 |
---|---|---|---|
var | 用来存放现在指定的成员 | 否 | 无 |
items | 被迭代的集合对象 | 否 | 无 |
varStatus | 用来存放现在指的相关成员信息 | 否 | 无 |
begin | 开始的位置 | 否 | 0 |
end | 结束的位置 | 否 | 最后一个成员 |
step | 每次迭代的间隔数 | 否 | 1 |
遍历数组
<%
String myArray[] = { "yellow", "red", "blue", "black" };
request.setAttribute("myArray", myArray);
%>
<c:forEach items="${myArray }" var="myStr">
<c:out value="${myStr }">c:out>
c:forEach>
循环次数
<c:forEach begin="0" end="10" step="1" varStatus="st">
<c:out value="${st.index }">c:out>
c:forEach>
<%
request.setAttribute("color", "red,green,yellow");
%>
<c:forTokens items="${color }" delims="," var="co" varStatus="status">
<c:out value="${status.index }">c:out>
<c:out value="${co }">c:out>
c:forTokens>
<%@ 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> | 在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行 |
属性 | 描述 | 必须 | 默认值 |
---|---|---|---|
driver | 注册的JDBC驱动程序类的名称 | No | None |
url | JDBC的数据库连接 URL | No | None |
user | 数据库用户名 | No | None |
password | 数据库用户名 | No | None |
dataSource | 数据库源 | No | None |
var | 变量的名称表示数据库 | No | Set default |
scope | 变量的范围来表示的数据库 | No | Page |
属性 | 描述 | 必须 | 默认值 |
---|---|---|---|
sql | SQL命令来执行(返回一个ResultSet) | No | Body |
dataSource | 数据库连接使用(覆盖默认的) | No | Default database |
maxRows | 结果存储在变量的最大数量 | No | Unlimited |
startRow | 从开始录制,结果中的行数目 | No | 0 |
var | 变量的名称表示数据库 | No | Set default |
属性 | 描述 | 必须 | 默认值 |
---|---|---|---|
sql | SQL命令来执行(不应该返回一个ResultSet) | No | Body |
dataSource | 数据库连接使用(覆盖默认的) | No | Default database |
var | 变量的名称来存储受影响的行数 | No | None |
scope | 变量的作用域来存储受影响的行数 | No | Page |
使用${变量名}可以取出受影响的行数
属性 | 描述 | 必须 | 默认值 |
---|---|---|---|
value | 参数的值 | No | Body |
<sql:update dataSource="${db}" sql="insert into test (id) values(?)" var="up">
<sql:dateParam value=“1"/>
sql:update>
连接数据库(定义为头文件): database.jsp
<%--
连接数据库的标签
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
--%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<sql:setDataSource driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/lingdu?useSSL=false" user="root"
password="123456" var="db" />
查询数据库 select_sql.jsp
<%-- 引用头文件 --%>
<%@ include file="database.jsp"%>
<%--
//sql语句的两种两种写法
1、可以在标签体中包涵sql语句
"userList" dataSource="${db }">
select * from tb_user
--%>
<%--
2、添加sql标签属性
--%>
<sql:query var="userList" sql="select * from tb_user"
dataSource="${db }">sql:query>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<table>
<tr>
<th>用户名th>
<th>密码th>
tr>
<c:forEach items="${userList.rows}" var="myvar">
<tr>
<td><c:out value="${myvar.username }">c:out>td>
<td><c:out value="${myvar.password }">c:out>td>
tr>
c:forEach>
table>
body>
html>
插入数据库insert_sql.jsp
<%-- 引用头文件 --%>
<%@ include file="database.jsp"%>
<sql:update dataSource="${db }"
sql="insert into tb_user (username,password) values(?,?)" var="insert">
username
<sql:param value="${param. username}">sql:param>
<sql:param value="${param. password}">sql:param>
sql:update>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>插入一条数据到数据库title>
head>
<body>
<br>
<br>
<br>
<form>
username : <input type="text" name="username"
value="${param.username}" /><br /> password : <input type="text"
name="password" value="${param.password}" /><br /> <input
type="submit" value="submit" />
form>
<c:if test="${insert > 0 }">
insert success !
c:if>
<br>
<br>
<br>
<sql:query var="userList" sql="select * from tb_user"
dataSource="${db }">sql:query>
<table>
<tr>
<th>usernameth>
<th>passwordth>
tr>
<c:forEach items="${userList.rows}" var="myvar">
<tr>
<td><c:out value="${myvar.username }">c:out>td>
<td><c:out value="${myvar.password }">c:out>td>
tr>
c:forEach>
table>
body>
html>
更新数据updata_sql.jsp
<%-- 引用头文件 --%>
<%@ include file="database.jsp"%>
<sql:query var="userList" sql="select * from tb_user"
dataSource="${db }">sql:query>
<sql:update dataSource="${db }"
sql="update tb_user set password=? where username=?" var="update">
<sql:param value="${param.password }">sql:param>
<sql:param value="${param.username }">sql:param>
sql:update>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>更新一条数据到数据库title>
head>
<body>
<table>
<tr>
<th>usernameth>
<th>passwordth>
tr>
<c:forEach items="${userList.rows}" var="myvar">
<tr>
<td><c:out value="${myvar.username }">c:out>td>
<td><c:out value="${myvar.password }">c:out>td>
tr>
c:forEach>
table>
<br><br><br>
<form >
User name to modify:<input type="text" name="username" value="${param.username}" /><br />
Change password to:<input type="text" name="password" value="${param.password}" /><br />
<input type="submit" value="submit" />
form>
<c:if test="${update > 0 }">
Update success !
c:if>
<br>
body>
html>
删除数据 delete_sql.jsp
<%-- 引用头文件 --%>
<%@ include file="database.jsp"%>
<sql:update dataSource="${db }"
sql="delete from tb_user where username=?" var="delete">
<sql:param value="${param.username }">sql:param>
sql:update>
<sql:query var="userList" sql="select * from tb_user"
dataSource="${db }">sql:query>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<table>
<tr>
<th>usernameth>
<th>passwordth>
tr>
<c:forEach items="${userList.rows}" var="myvar">
<tr>
<td><c:out value="${myvar.username }">c:out>td>
<td><c:out value="${myvar.password }">c:out>td>
tr>
c:forEach>
table>
<br>
<br>
<br>
<form>
username : <input type="text" name="username"
value="${param.username}" /><br /> <input type="submit"
value="submit" />
form>
<c:if test="${delete > 0 }">
delete success !
c:if>
<br>
body>
html>
<%@ 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的字符编码 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Date,java.text.SimpleDateFormat"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<%
request.setAttribute("myDate", new Date());
%>
<fmt:formatDate value="${myDate }" pattern="yyyy-MM-dd hh:mm:ss" />
<br />
<%
//正常写法
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String str = sd.format(new Date());
out.print(str);
%>
body>
html>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
函数说明
标签 | 函数属性 | 函数说明 |
---|---|---|
fn:contains() | boolean contains (java.lang.String, java.lang.String) |
测试输入的字符串是否包含指定的子串 |
fn:containsIgnoreCase() | boolean containsIgnoreCase(java.lang.String, java.lang.String) |
测试输入的字符串是否包含指定的子串,大小写不敏感 |
fn:endsWith() | boolean endsWith(java.lang.String, java.lang.String) |
测试输入的字符串是否以指定的后缀结尾 |
fn:escapeXml() | java.lang.String escapeXml(java.lang.String) |
跳过可以作为XML标记的字符 |
fn:indexOf() | int indexOf(java.lang.String, java.lang.String) |
返回指定字符串在输入字符串中出现的位置 |
fn:join() | String join (java.lang.String[], java.lang.String) |
将数组中的元素合成一个字符串然后输出 |
fn:length() | int length(java.lang.Object) |
返回字符串长度 |
fn:replace() | boolean replace(java.lang.String, java.lang.String, java.lang.String) |
将输入字符串中指定的位置替换为指定的字符串然后返回 |
fn:split() | java.lang.String[] split(java.lang.String, java.lang.String) |
将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回 |
fn:startsWith() | boolean startsWith(java.lang.String, java.lang.String) |
测试输入字符串是否以指定的前缀开始 |
fn:substring() | java.lang.String substring(java.lang.String, int, int) |
返回字符串的子集 |
fn:substringAfter() | java.lang.String substringAfter(java.lang.String, java.lang.String) |
返回字符串在指定子串之后的子集 |
fn:substringBefore() | java.lang.String substringBefore(java.lang.String, java.lang.String) |
返回字符串在指定子串之前的子集 |
fn:toLowerCase() | java.lang.String toLowerCase(java.lang.String) |
将字符串中的字符转为小写 |
fn:toUpperCase() | java.lang.String toLowerCase(java.lang.String) |
将字符串中的字符转为大写 |
fn:trim() | java.lang.String trim(java.lang.String) |
移除首位的空白符 |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<c:set var="myver" value="lingdu">c:set>
<%--
1、字符串的替换
2、函数的嵌套
--%>
<c:out value="${fn:replace('lingdu','i','d')}">c:out><br />
<c:out value="${fn:replace(fn:replace('lingdu','i','d'),'l','w')}">c:out><br />
<c:out value="${fn:replace(fn:replace(fn:replace('lingdu','i','d'),'l','w'),'g','h')}">c:out><br />
<c:out value="${fn:indexOf(fn:replace(fn:replace(fn:replace('lingdu','i','d'),'l','w'),'g','h'),'h')}">c:out><br />
<%-- 字符串截取--%>
<c:out value="${fn:substring(myver,3,5) }">c:out>
<%-- from表单传值自动截取--%>
<form method="post">
源文本:<input type="text" name="sourceText" value="${ param.sourceText}"/><br />
开始截取的位置:<input type="text" name="beginIndex" value="${param.beginIndex }"/><br />
最后的位置:<input type="text" name="endIndex" value="${param.endIndex }"/><br />
结果:<input type="text" name="resultText" value="${fn:substring(param.sourceText,param.beginIndex,param.endIndex) }"/><br />
<input type="submit" value="提交"/>
form>
body>
html>