首页 > 代码库 > 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属性类型属性描述
valueObject指定要输出的内容
escapeXMLBoolean指定是否将>、<等特殊字符进行HTML编码转换后再进行输出,默认值是true。
defaultObject指定如果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属性类型属性描述
valueObject用于指定属性值
var×String用于指定要设置的web域属性的名称
scope×String用于指定属性所在的web域
targetObject用于指定要设置属性的对象,这个对象必须是Javabean对象或java.utl.Map对象
propertyString用于指定当前要为对象设置的属性名称


示例:向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 属性类型属性描述
testboolean决定是否处理标签体中的内容的条件表达式
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任何支持的类型将要迭代的集合对象
beginint如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的索引值从0开始编码;如果没有指定items属性,就从begin指定的值开始迭代,直到end值结束迭代
endint参看begin属性的描述
stepint指定迭代的步长


示例:遍历数组

<%@ 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属性

  记录迭代相关的信息

属性类型意义
indexnumber现在指到成员的索引
countnumber总共指到成员的总数
firstboolean现在指到的成员是否为第一个成员
lastboolean现在指到的成员是否为最后一个成员

示例:遍历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
scopevar变量的jsp范围×Stringpage
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属性类型属性描述
urlString指定要转发或重定向到的目标资源的URL地址
contextString当要使用相对路径重定向到哦同一个服务器下的其他web应用程序中的资源的时候,context属性指定其他web应用程序的名称

本文出自 “11831428” 博客,请务必保留此出处http://11841428.blog.51cto.com/11831428/1908097

JSTL标签库