Android学习笔记(四十六):JSTL标签函数库

JSTL标签函数库是JSP标签技术的第三个知识点,前两个分别是JSP标签、EL表达式和EL函数库。现在来学JSTL标签函数库。

一、JSTL的简介

JSTL是JavaServer Pages Standard Tag Library的缩写,它是由由JCP(Java Community Process)指定标准,可以配合EL表达式来取代java程序,提高代码的阅读性

那么JSTL是由谁开发的?

是由主要由Apache组织的Jakarta Project 实现

如何安装?

下载解压缩后将lib 中的jstl.jar、standard.jar 复制到WEB应用程序的WEB-INF\lib 下

现在还需要安装吗?

如果是javaEE5的就不用安装了,因为已经有了,看下面的图片。


主要有那几种函数库?

核心标签库 (core)  --- c
国际化标签 fmt
数据库标签 sql 
XML标签  xml
JSTL函数(EL函数) el

上一节我们已经学了 JSTL函数(EL函数) el,而数据库标签 sql 、XML标签  xml不学,国际化标签 fmt  留到以后才学,现在学核心标签库 (core)  --- c,那么那个是(core)  --- c,看下图描述文件:


二、JSTL的语法

主要的语法:

<c:out> 标签用于输出一段文本内容到pageContext对象当前保存的“out”对象中。
<c:set>标签用于把某一个对象存在指定的域范围内,或者设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的属性。  
<c:remove>标签用于删除各种Web域中的属性
<c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:<c:catch [var="varName"]>nested actions</c:catch>
!!<c:if test=“”>标签可以构造简单的“if-then”结构的条件表达式 
!!<c:choose>标签用于指定多个条件选择的组合边界,它必须与<c:when>和<c:otherwise>标签一起使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。
!!<c:forEach>标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。 
!!<c:forTokens>用来浏览一字符串中所有的成员,其成员是由定义符号所分隔的
<c:param>标签   在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。<c:param>标签可以嵌套在<c:import>、<c:url>或<c:redirect>标签内,为这些标签所使用的URL地址附加参数。
<c:import> 标签,实现include操作
<c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。URL重写就是将会话标识号以参数形式附加在URL地址后面 
<c:redirect>标签用于实现请求重定向

下面一个一个的讲解:

1.<c:out>

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="cc" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
  </head>
  
  <body>
    <h1>1.输出常量</h1>
    <cc:out value="这是常量"></cc:out>
    ${"这是常量"}
    <h1>2.输出变量</h1>
    <%
    String str="变量";
    request.setAttribute("var",str);
     %>
     <cc:out value="var"></cc:out>
     <cc:out value="${var}"></cc:out>
     ${var}
     
     <h1>3.输出默认值</h1>
     <%
     <span style="white-space:pre">	</span>String name="小红";
     <span style="white-space:pre">	</span>//pageContext.setAttribute("name",name);
      %>
      <cc:out value="${name}" default="无名"></cc:out>
      ${var==null?"无名":var}
      
      <h1>4.HTML转义输出</h1>
      <a href="#">xxx</a>
      <cc:out value="<a href='#'>xxx</a>"></cc:out>
     ${fn:escapeXml('<a href="#">xxx</a>') }
  </body>
</html>
注意上面的有一行代码是引入描述文件的:


上面的cc是可以随便设定的。

2.<c:set>

3.<c:remove>

标签用于删除各种Web域中的属性

4.<c:catch>

标签用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:<c:catch [var="varName"]>nested actions</c:catch>

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="catch"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    
  </head>
  
  <body>
  	<catch:catch var="e">
  	<%
  	    int i=3;
  		i=i/0;
  	 %>
  	 </catch:catch>
  	${e}
  </body>
</html>
在浏览器中输入:http://localhost/Day06/Jstl/ccatch.jsp

就会显示出:


5.<c:if test=“”>

<c:if test=“”>标签可以构造简单的“if-then”结构的条件表达式  

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="if" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    

  </head>
  
  <body>
   <if:if test="${3>1}" var="pp" >
   	这是正确的
   </if:if>
   <if:if test="${3<1}" var="kk">
   	这是错误的
   </if:if>
   ${"<br>"}
   ${pp}
   ${"<br>"}
   ${kk}
  </body>
</html>
显示:

6.<c:choose>

<c:choose>标签用于指定多个条件选择的组合边界,它必须与<c:when>和<c:otherwise>标签一起使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  
  <body>
   <%
   	String day="4";
   	pageContext.setAttribute("day",day);
    %>
    <c:choose>
    	<c:when test="${day==1}">
    		${"星期一"}
    	</c:when>
    	<c:when test="${day==2}">
    		${"星期二"}
    	</c:when>
    	<c:when test="${day==3}">
    		${"星期三"}
    	</c:when>	
    	<c:when test="${day==4}">
    		${"星期四"}
    	</c:when>
    	<c:when test="${day==5}">
    		${"星期五"}
    	</c:when>
    	<c:otherwise>
    		${"休息日"}
    	</c:otherwise>
    </c:choose>
  </body>
</html>
可以显示:


7.<c:forEach>

<c:forEach>标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
   
  </head>
  
  <body>
   <h1>遍历数组中的数据</h1>
   <%
   	String[] citys={"北京","上海","广州","香港"};
   	pageContext.setAttribute("citys",citys);
    %>
   <c:forEach items="${citys}" var="c">
   	 ${c}<br>
   </c:forEach>
   
   <h1>遍历集合中的数据</h1>
  <%
  	List list=new ArrayList();
  	list.add("中国");
  	list.add("美国");
  	list.add("俄罗斯");
  	list.add("印度");
    pageContext.setAttribute("list",list);
   %>
   <c:forEach items="${list}" var="l">
   ${l}<br>
   </c:forEach>
   
   <h1>遍历Map中的数据</h1>
   <%
   	Map map=new LinkedHashMap();
   	map.put("1","第一号");
   	map.put("2","第二号");
   	map.put("3","第三号");
   	map.put("4","第四号");
   	pageContext.setAttribute("map",map);
    %>
    <c:forEach items="${map}" var="jk">
    	${jk}-----${jk.key}:${jk.value}<br>
    </c:forEach>
    
    <h1>循环执行指定的内容若干次</h1>
    <c:forEach begin="0" end="10" step="2" var="i">
    	${i}
    </c:forEach>
    
    <h1>实验:遍历10到100的偶数,如果数字所在的位置是3的陪数,显示成红色</h1>
    <c:forEach begin="10" end="100" step="2" var="i" varStatus="start">
   		<c:if test="${start.count%3==0}">
   			<font color="red">
   				${i}
   			</font>
   		</c:if>
   		<c:if test="${start.count%3!=0}">
   			<font color="blue">
   			    ${i}
   			</font>
   		</c:if>
    </c:forEach>
  </body>
</html>
可以显示:


7.<c:forTokens>

<c:forTokens>用来浏览一字符串中所有的成员,其成员是由定义符号所分隔的

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   

  </head>
  
  <body>
  	<c:forTokens items="wo-shi-guang-dong-ren" delims="-" var="str" begin="1" end="3">
  		${str}<br>
  	</c:forTokens>
  </body>
</html>
可以显示:


8.<c:import>

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
  </head>
  
  <body>
    from index.jsp
    <c:import url="/index.jsp" var="p" scope="page"></c:import>
    xxxx
    yyyy
    ${p}
    zzzz
  </body>
</html>
可以显示

9.<c:url>

<c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。URL重写就是将会话标识号以参数形式附加在URL地址后面 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    

  </head>
  
  <body>
   <%
   	String url=response.encodeURL(request.getContextPath()+"/index.jsp");
    out.write(url);
    %>
   <a href="<%=url %>">首页</a>
   
   <h1>用jstl进行url重写</h1>
   <c:url value="/index.jsp" context="${pageContext.request.contextPath}" var="url1" scope="page"></c:url>
   <a href="${url1}">首页</a>
  </body>
</html>













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值