首页 > 代码库 > JSTL标签库
JSTL标签库
一、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="http://www.mamicode.com/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="http://www.mamicode.com/${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="http://www.mamicode.com/${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="http://www.mamicode.com/超链接"></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="http://www.mamicode.com/超链接" 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="http://www.mamicode.com/哈哈" scope="request"></c:set> <c:out value="http://www.mamicode.com/${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="http://www.mamicode.com/${name}"></c:out> <!-- jstl方式 --> <c:set var="i" value="http://www.mamicode.com/哈哈" scope="request"></c:set> <c:out value="http://www.mamicode.com/${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="http://www.mamicode.com/哈哈"></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="http://www.mamicode.com/哈哈" 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="http://www.mamicode.com/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="http://www.mamicode.com/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="http://www.mamicode.com/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="http://www.mamicode.com/0" scope="page"></c:set> <c:forEach var="i" begin="1" end="100" step="1"> <c:set var="sum" value="http://www.mamicode.com/${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="http://www.mamicode.com/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="http://www.mamicode.com/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="http://www.mamicode.com/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="http://www.mamicode.com/haha.jsp"></c:url> <a href="http://www.mamicode.com/${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
JSTL标签库