现在的位置: 首页 > 综合 > 正文

JSTL标签库

2017年12月14日 ⁄ 综合 ⁄ 共 12237字 ⁄ 字号 评论关闭

1、JSTL 简介

1JavaServer Pages Standard Tag Library

2JCPJava Community Process)指定标准

3提供给 Java Web 开发人员一个标准通用的标签函数库

4和 EL 配合来取代传统直接在页面上嵌入 Java 程序(Scripting)的做法,以提高程序可读性、维护性和方便性

2、JSTL1.1安装

1下载

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

http://tomcat.apache.org/taglibs/standard/

容器必须支持Servlet 2.4 JSP 2.0 以上版本

JavaEE1.4 

2安装

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

3、JSTL标签库

1核心标签库 (core)  --- c

2国际化标签 fmt

3数据库标签 sql --Servlet

4XML标签  xml

5JSTL函数(EL函数) el

4、<c:out>标签

<c:out> 标签用于输出一段文本内容到pageContext对象当前保存的“out”对象中。

       1.c:out 输出内容到浏览器端

输出固定值

<c:out value="Hello c out~"/>

输出变量

<c:out value="${m}"/>

转义html,默认为转义,可以设置escapeXml属性为false,禁止转义

<c:out value="<a href='#'>link</a>" escapeXml="false"/>

允许输出默认值,如果给定值不存在,输出默认值

<c:out value="${city}" default="北京"/>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@  taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

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

   <hr><h1>进行html转义输出</h1>

   <a href="#">xxx</a>

   <c:out value="<a href='#'>xxx</a>" escapeXml="true"></c:out>

   ${fn:escapeXml("<a href='#'>xxx</a>") }

  

   <hr><h1>输出默认值</h1>

   <%

   String age = "100";

   pageContext.setAttribute("age",age);

    %>

   <c:out value="${age}" default="99"></c:out>

   ${empty age ? 99 : age }

  

   <hr><h1>输出变量</h1>

   <%

   String name = "itheima";

   pageContext.setAttribute("name",name);

    %>

    <c:out value="${name}"></c:out>

    ${name }

  

   <hr><h1>输出常量</h1>

   <c:out value="123456"></c:out>

   ${123456 }

  </body>

</html>

5、<c:set>标签

<c:set>标签用于把某一个对象存在指定的域范围内,或者设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的属性。  

2.c:set 设置值到四个域,设置四个范围中的java对象的属性性

在指定域中增加、修改属性

<c:set var="name" value="value" scope="page"/>

设置一个保存在四个范围的java对象的属性值,cset不能设置对象进域,但是可以更改域中对象的属性

<c:set targe="${person}" property="name" value="lisi"/>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@page import="com.itheima.domain.Person"%>

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

   <hr><h1>设置JavaBean的属性</h1>

   <%

   Person p = new Person();

   pageContext.setAttribute("p",p);

    %>

   <c:set target="${p}" property="name" value="小昭"></c:set>

   ${p.name }

   <c:set target="${p}" property="name" value="赵敏"></c:set>

   ${p.name }

  

   <hr><h1>向指定的Map中增加/修改属性</h1>

   <%

   Map map = new HashMap();

   map.put("name","张无忌");

   map.put("age",19);

   pageContext.setAttribute("map",map);

    %>

   <c:set target="${map}" property="sex" value=""></c:set>

   ${map.sex }

   <c:set target="${map}" property="sex" value=""></c:set>

   ${map.sex }

  

   <hr><h1>向指定的域中增加/修改属性</h1>

   <c:set var="name" scope="page" value="张三丰"></c:set>

   ${name }

   <c:set var="name" scope="page" value="张翠山"></c:set>

   ${name }

  </body>

</html>

6、<c:remove>标签 

<c:remove>标签用于删除各种Web域中的属性。

其语法格式如下:

<c:remove var="varName" 

[scope="{page|request|session|application}"] />

3.c:remove用来删除四个域中的值

<c:remove var="age" scope="page"/>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

  <hr><h1>cremove可以删除各个域中的属性,如果不写scope属性,cremove的时候会将四个域中指定名称的属性都删掉</h1>

   <%

   pageContext.setAttribute("room","310");

request.setAttribute("room","311");

    %>

    ${room }${requestScope.room }

    <c:remove var="room"/>

    ${room }

  </body>

</html>

7、<c:catch>标签

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

2var属性用于标识<c:catch>标签捕获的异常对象,它将保存在page这个Web域中。 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ page contentType="text/html;charset=gb2312" %>

<c:catch var="myex“ >

<%

10/0;

%>

</c:catch>

异常:<c:out value="${myex}" />  ${myex}<br />

异常 myex.getMessage<c:out value="${myex.message}" /><br />

异常 myex.getCause<c:out value="${myex.cause}" /><br />

异常 myex.getStackTrace<c:out value="${myex.stackTrace}" />

4.c:catch 用来捕获程序的异常,将捕获到的异常对象保存在page域中

<c:catch var="e">

<%

String s = null;

s.charAt(1);

%>

</c:catch>

${e.message}

8、<c:if>标签

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

5.c:if 用来取代页面中if语句,请记住,没有c:else,想要写else,只能再写个c:if,然后条件是反的

<c:if test="${n>5}"></c:if>  

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ 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:if test="${1 == 1}" var="flag" scope="page">

   1确实等于1

   </c:if>

   ${pageScope.flag }

  

   <c:if test="${1 != 1}">

   你确定吗?

   </c:if>

  </body>

</html>

9、<c:choose>标签 

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

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ page contentType="text/html;charset=gb2312" %>

<c:set value="${param.count}" var="count“  /> pageContext(count,2)

<c:choose>

<c:when test="${count == 0}">

对不起,没有符合您要求的记录。

</c:when>

<c:otherwise>

符合您要求的记录共有${count}.

</c:otherwise>

</c:choose>

6.c:choose c:when c:otherwise 一起使用,取代if elseif else 或 swich case

<c:choose>

<c:when test="${weekday==1}">

星期一

</c:when>

<c:when test="${weekday==1}">

星期二

</c:when>

<c:when test="${weekday==1}">

星期三

</c:when>

<c:otherwise>

输入无效

</c:otherwise>

</c:choose>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

  <%

   pageContext.setAttribute("num",99);

   %>

   <c:choose>

   <c:when test="${num>100}">

   num 大于100

   </c:when>

   <c:when test="${num<100}">

   num 小于 100

   </c:when>

   <c:when test="${num == 100}">

   num 等于 100

   </c:when>

   <c:otherwise>

   num 是一个数字吗?

   </c:otherwise>

   </c:choose>

  </body>

</html>

10、<c:forEach>标签

语法1

<c:forEach [var="varName"] 

items="collection" [varStatus="varStatusName"] 

[begin="begin"]

[end="end"] 

[step="step"]>

//Body内容

</c:forEach>

public int getIndex()返回当前迭代的索引号

public java.lang.Integer getStep()返回为标签设置的step属性的值,如果没有设置step属性则返回null

public boolean isFirst()返回当前是否是第一次迭代操作

public boolean isLast()返回当前是否是最后一次迭代操作

数组的遍历:将arr数组中的每个元素取出,保存到page域的i

<c:forEach var="i" items="${arr}">

${i}

</c:forEach>

List遍历

<c:forEach var="e" items="${list}">

${e}

</forEach>

Map遍历

<c:forEach var="entry" items="map">

${entry.key}  ${entry.value}

</c:forEach>

控制指定次数的循环:1开始到10结束,步长为1,保存到i,并求和

<c:forEach begin="1" end="10" step="1" var="i">

<c:set var="sum" value="${sum + i}">

</c:forEach>

<%

int atts[] = {1,2,3,4,5,6,7,8,9,10};

request.setAttribute("atts", atts);

%>

<c:forEach items="${atts}" var="item" 

begin="0" end="9" step="1" >

${item}</br>

</c:forEach>

语法2

<c:forEach [var="varName"] 

[varStatus="varStatusName"] 

begin="begin" 

end="end"

[step="step"]>

//Body内容

</c:forEach>

<c:forEach begin="1" end="10" var="item" >

${item}</br>

</c:forEach>

11varStatus属性

用来存放现在指到之成员的相关信息

------------------------------------------------------------------------------------------------

<c:forEach begin="10" end="100" step="2" var="i" varStatus="status">

<c:if test="${status.count}%3 == 0">

<font color="red">${i}</font>

</c:if>

<c:if test="${status.count}%3 != 0">

<font color="blue">${i}</font>

</c:if>

</c:forEach>

<c:forEach var="i" begin="100" end="200" step="5" varStatus="status"> 

<c:if test="${status.first}"> 

begin:<c:out value="${status.begin}">begin</c:out>     

end:<c:out value="${status.end}">end</c:out>     

step:<c:out value="${status.step}">step</c:out>

<br/> 

sequence: 

</c:if>

<c:out value="${i}"/> 

<c:if test="${status.last}"> 

<br/>There are 

<c:out value="${status.count}"/> numbers in the list. 

</c:if> 

</c:forEach> 

----------------------------------------------------------------------------------------------

<%

Map<String,String> map = new HashMap<String,String>();

map.put("001","aaa");

map.put("002","bbb");

map.put("003","ccc");

request.setAttribute("map",map);

%>

<c:forEach var="m" items="${requestScope.map}">

${m.key } , ${m.value } <br/>

</c:forEach>

----------------------------------------------------------------------------------------------

<%

Map<String,String> map = new HashMap<String,String>();

map.put("001","aaa");

map.put("002","bbb");

map.put("003","ccc");

request.setAttribute("map",map);

%>

<c:forEach var="m" items="${requestScope.map}">

${m.key } , ${m.value } <br/>

</c:forEach>

实验:遍历10100的偶数,如果数字所在的位置是3的倍数,显示成红色

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

   <br><hr><h1>实验:遍历10100的偶数,如果数字所在的位置是3的倍数,显示成红色</h1>

   <c:forEach begin="10" end="100" step="2" var="i" varStatus="status">

   <c:if test="${status.count%3 == 0}">

   <font color="red" >${i }</font>

   </c:if>

   <c:if test="${status.count%3 != 0}">

   <font color="blue" >${i }</font>

   </c:if>

   </c:forEach>

  

   <br><hr><h1>控制重复执行标签体</h1>

   <c:forEach begin="0" end="10" step="2" var="i" varStatus="status">

   ${i }

   </c:forEach>

  

  

   <br><hr><h1>迭代Map中的元素</h1>

<%

Map map = new HashMap();

map.put("name","杨过");

map.put("age",17);

pageContext.setAttribute("map",map);

 %>

 <c:forEach items="${map}" var="entry">

  ${entry.key }:${entry.value }

 </c:forEach>

  

   <hr><h1>迭代List中的元素</h1>

   <%

   List list = new ArrayList();

   list.add("天山童老");

   list.add("李秋水");

   list.add("无崖子");

   pageContext.setAttribute("list",list);

    %>

    <c:forEach items="${list }" var="name">

     ${name }

    </c:forEach>

  

   <hr><h1>迭代数组中的元素</h1>

   <%

   String [] strs = {"王语嫣","段誉","虚竹","乔峰"};

   pageContext.setAttribute("strs",strs);

    %>

<c:forEach items="${strs}" var="str">

${str }

</c:forEach>

  </body>

</html>

 12<c:forTokens>

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

8.c:forTokens 切割字符串(复习 StiringTokenize类)

<c:forTokens items="${s}" delims="," var="e">

${e}

</c:forTokens>

<c:forTokens 

items="stringOfTokens" 

delims="delimiters" 

[var="varName"]

[varStatus="varStatusName"] 

[begin="begin"] 

[end="end"] 

[step="step"]>

  //body内容

</c:forTokens>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ 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="www.itheima.com" delims="." var="str">

   ${str } <br>

   </c:forTokens>

  </body>

</html>

13、<c:param>标签 

(1)在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。<c:param>标签可以嵌套在<c:import><c:url><c:redirect>标签内,为这些标签所使用的URL地址附加参数。

(2)<c:param>标签在为一个URL地址附加参数时,将自动对参数值进行URL编码,例如,如果传递的参数值为“中国”,则将其转换为“%d6%d0%b9%fa”后再附加到URL地址后面,这也就是使用<c:param>标签的最大好处。 

(3)示例:<c:param name="name" value="value" />

14、<c:import> 标签

引入1.jsp的输出,拼接到当前jsp的输出中

<c:import url="/1.jsp" context="/day08"/>

引入1.jsp的输出,保存到scope域中以var指定名为名称的属性中

<c:improt url="/1.jsp" context="/day08" var="content" scope="page"/>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

   cimport用来进行页面包含操作<br>

   <c:import url="/index.jsp" var="index" scope="page"></c:import>

   ${index }

  </body>

</html>

15<c:url>标签 

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

<c:url value="/index.jsp"context="/day04" var="myurl2" scope="page">

<c:param name="username" value="张三"></c:param>

</c:url>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

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

  <hr><h1>java方式实现URL重写</h1>

  <%

   String url = "/Day07/index.jsp";

   url = response.encodeURL(url);

   %>

   <%= url %>

   

  <hr><h1>curl标签实现URL重写</h1>

  <c:url context="/Day07" value="/index.jsp" var="url" scope="page">

   <c:param name="name" value="+"></c:param>

  </c:url>

  ${url }

  <a href="${url }">xxx</a>

  </body>

</html>

16<c:redirect>标签

<c:redirect>标签用于实现请求重定向

<c:redirect url="/index.jsp" context="/day08"/>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ 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:redirect url="/index.jsp" context="${pageContext.request.contextPath}"></c:redirect>

  </body>

</html>

【上篇】
【下篇】

抱歉!评论已关闭.