一、JSTL简介
JSTL的全称:JSP Standard Tag Libary,JSP的标准标签库
JSTL的作用:
提供给Java web开发人员一个标准通用的标签函数库。
和EL来取来传统直接在页面上嵌入Java程序的做法,以提供程序可读性、维护性和方便性。
JSTL的版本:
JSTTL的主要版本是1.0、1.1和1.2。
1.0版本EL表达式还没有纳入官方规范。
1.0和1.2版本EL表达式已经纳入官方规范。
二、<c:out>标签
输出常量和域范围中的变量(value属性,使用EL表达式)。
输出默认值(default属性)。
默认HTML标签不转义(escapeXML)。
| 属性名 | 是否支持EL | 属性类型 | 属性描述 |
| value | √ | Object | 指定要输出的内容 |
| escapeXML | √ | Boolean | 指定是否将>、<等特殊字符进行HTML编码转换后再进行输出,默认值是true。 |
| default | √ | Object | 指定如果value属性的值为null时所输出的默认值 |
示例:输出常量
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL标签库</title> </head> <body> <c:out value="Hello"></c:out> </body> </html>
示例:输出域中的变量
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<!-- 输出域中的变量 -->
<%
request.setAttribute("name", "你好,世界");
%>
<c:out value="${name}"></c:out>
</body>
</html>示例:输出默认值
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<!-- 输出默认值 -->
<c:out value="${haha}" default="你好 Java"></c:out>
</body>
</html>示例:输出HTML标签
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL标签库</title> </head> <body> <c:out value="<a href=‘#‘>超链接</a>"></c:out> </body> </html>
默认情况下,输出的是字符串,所以要加上escapeXml="false"属性。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL标签库</title> </head> <body> <c:out value="<a href=‘#‘>超链接</a>" escapeXml="false"></c:out> </body> </html>
三、<c:set>标签
向4个域中存入值(var value scope属性)。
设置web域中java.util.Map类型的属性对象或Javabean类型的属性对象的属性(target prperty value属性)。
| 属性名 | 是否支持EL | 属性类型 | 属性描述 |
| value | √ | Object | 用于指定属性值 |
| var | × | String | 用于指定要设置的web域属性的名称 |
| scope | × | String | 用于指定属性所在的web域 |
| target | √ | Object | 用于指定要设置属性的对象,这个对象必须是Javabean对象或java.utl.Map对象 |
| property | √ | String | 用于指定当前要为对象设置的属性名称 |
示例:向4个web域对象存入值
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<c:set var="i" value="哈哈" scope="request"></c:set>
<c:out value="${i}"></c:out>
</body>
</html><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<!-- 传统方式 -->
<%
request.setAttribute("name", "呵呵");
%>
<c:out value="${name}"></c:out>
<!-- jstl方式 -->
<c:set var="i" value="哈哈" scope="request"></c:set>
<c:out value="${i}"></c:out>
</body>
</html>示例:修改Javabean对象存入值
<%@page import="cn.vo.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<%
request.setAttribute("user", new User("你好","世界"));
%>
<c:set target="${user }" property="username" value="哈哈"></c:set>
${user.username }
</body>
</html>四、<c:remove>标签
<c:remove>标签用于删除各种web域中的值。
其语法格式如下:
<c:remove var="varName" [scope={page|request|session|application}]></c:remove><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<!-- 删除属性之前 -->
<c:set var="i" value="哈哈" scope="page"></c:set>
${i}
<!-- 删除属性之后 -->
<c:remove var="i" scope="page"/>
${i}
</body>
</html>五、<c:catch>标签
<c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:
<c:catch [var =‘varName‘]> </c:catch>
var属性用于标识<c:catch>标签捕获的异常对象,它将保存在page这个web域中。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<c:catch var="e">
<%
int i = 10 / 0;
%>
</c:catch>
${e.message }
</body>
</html>六、<c:if>标签
<c:if test="">标签可以构造简单的"if-then"结构的条件表达式。
| 属性名 | 是否支持EL | 属性类型 | 属性描述 |
| test | √ | boolean | 决定是否处理标签体中的内容的条件表达式 |
| var | × | String | 用于指定将test属性的之后定结果保存到某个web域中的某个属性的名称 |
| scope | × | String | 指定将test属性的执行结果保存到那个web域中 |
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<c:set var="i" value="10" scope="page"></c:set>
<c:if test="${i == 10 }">
正确
</c:if>
</body>
</html><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<c:set var="i" value="10" scope="page"></c:set>
<!--
var 表示判断的结果
-->
<c:if test="${i == 10 }" var="x" scope="page">
正确
</c:if>
${x }
</body>
</html>六、<c:choose>标签
<c:choose>标签用于指定多个条件选择的组合边界,它必须和<c:when>和<c:otherwise>标签一起使用。使用<c:choose>标签、<c:when>和<c:otherwise>这三个标签,可以构造类似“if-else”的复杂条件判断结构
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<c:set var="i" value="10" scope="page"></c:set>
<c:choose>
<c:when test="${i ==10 }">
i的值是10
</c:when>
<c:otherwise>
i的值不等于10
</c:otherwise>
</c:choose>
</body>
</html>
七、<c:foreach>标签
<c:foreach>标签用于对一个集合对象中的元素进行循环迭代操作,或者按照指定的次数重复迭代标签体中的内容。
| 属性名 | 是否支持EL | 属性类型 | 属性描述 |
| var | × | String | 指定将当前迭代到的元素保存到page这个web域中的属性名称 |
| varstatus | × | String | 记住用于保存迭代信息的对象 |
| items | √ | 任何支持的类型 | 将要迭代的集合对象 |
| begin | √ | int | 如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的索引值从0开始编码;如果没有指定items属性,就从begin指定的值开始迭代,直到end值结束迭代 |
| end | √ | int | 参看begin属性的描述 |
| step | √ | int | 指定迭代的步长 |
示例:遍历数组
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<!--
for(String s:str[]){
}
-->
<%
String[] str = {"哈哈","呵呵"};
request.setAttribute("str", str);
%>
<c:forEach var="s" items="${str}" >
${s}
</c:forEach>
</body>
</html>示例:遍历List集合
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<!--
for(String s:str[]){
}
-->
<%
List<String> list = new ArrayList<String>();
list.add("哈哈");
list.add("呵呵");
list.add("嘻嘻");
request.setAttribute("list",list);
%>
<c:forEach var="i" items="${list}" >
${i}
</c:forEach>
</body>
</html>示例:遍历Map集合
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<!--
for(String s:str[]){
}
-->
<%
Map<String,String> map = new HashMap<String,String>();
map.put("a", "aa");
map.put("b", "bb");
request.setAttribute("map",map);
%>
<c:forEach var="entry" items="${map}" >
${entry.key }
${entry.value}
</c:forEach>
</body>
</html>示例:从1到10遍历
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<c:forEach var="i" begin="1" end="10" step="1">
${i}
</c:forEach>
</body>
</html>示例:计算从1加到100的和
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<c:set var="sum" value="0" scope="page"></c:set>
<c:forEach var="i" begin="1" end="100" step="1">
<c:set var="sum" value="${sum+i}" scope="page"></c:set>
</c:forEach>
${sum }
</body>
</html>varStatus属性
记录迭代相关的信息
| 属性 | 类型 | 意义 |
| index | number | 现在指到成员的索引 |
| count | number | 总共指到成员的总数 |
| first | boolean | 现在指到的成员是否为第一个成员 |
| last | boolean | 现在指到的成员是否为最后一个成员 |
示例:遍历10到100的偶数,每到第三个数,显示为红色
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<c:forEach var="i" begin="10" end="100" step="2" varStatus="status">
<c:choose>
<c:when test="${ status.count %3 ==0 }">
<font color="red">${i }</font>
</c:when>
<c:otherwise>
${i }
</c:otherwise>
</c:choose>
</c:forEach>
</body>
</html>八、<c:param>标签
在jsp页面进行URL的相关操作时,经常需要在URL地址后面附加一些参数。<c:param>标签可以嵌套在<c:import>和<c:url>以及<c:redirect>标签内,为这些标签所使用的URL地址附加参数。
<c:param>标签在为一个URL地址附加参数的时候,会自动对参数值进行URL编码。
<c:param name="" value=""></c:param>
九、<c:import>标签
| 名称 | 说明 | EL | 类型 | 必须 | 默认值 |
| url | 一文件被包含的地址 | √ | String | 是 | 无 |
| context | 虚拟路径 | √ | String | 否 | 无 |
| var | 存储被包含文件的内容(以String类型存入) | × | String | 否 | 无 |
| scope | var变量的jsp范围 | × | String | 否 | page |
| charEncoding | 被包含文件之内容的编码格式 | √ | String | 否 | 无 |
| varReader | 存储被包含文件的内容(以Reader类型存入) | × | String | 否 | 无 |
haha.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP ‘haha.jsp‘ starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 哈哈 </body> </html>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL标签库</title> </head> <body> <!-- 起到包含的效果 --> <c:import url="/haha.jsp"></c:import> </body> </html>
将页面包含在变量之中
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<!-- 起到包含的效果 -->
<c:import url="/haha.jsp" var="i" scope="page"></c:import>
<!-- 将页面保存在变量i之中 -->
${i }
</body>
</html>传递参数
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP ‘haha.jsp‘ starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
${param.haha}
哈哈
</body>
</html><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<!-- 起到包含的效果 -->
<c:import url="/haha.jsp" var="i" scope="page">
<c:param name="haha" value="haha"></c:param>
</c:import>
<!-- 将页面保存在变量i之中 -->
${i }
</body>
</html>十、<c:url>标签
<c:url>标签用于在jsp页面中构造一个URL地址,其主要目的在于实现URL重写。URL重写就是将会话标识号以参数形式附加到URL地址的后面。
其实,就是进行session的追踪。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL标签库</title>
</head>
<body>
<c:url var="i" value="/haha.jsp"></c:url>
<a href="${i }">haha.jsp</a>
</body>
</html>十一、<c:redirect>标签
用于实现请求重定向。
| 属性名 | 是否支持EL | 属性类型 | 属性描述 |
| url | √ | String | 指定要转发或重定向到的目标资源的URL地址 |
| context | √ | String | 当要使用相对路径重定向到哦同一个服务器下的其他web应用程序中的资源的时候,context属性指定其他web应用程序的名称 |
本文出自 “11831428” 博客,请务必保留此出处http://11841428.blog.51cto.com/11831428/1908097
原文:http://11841428.blog.51cto.com/11831428/1908097