重新学javaweb---JSTL标签

JSTL简介:
标准标签库JSTL的全名为:Java Server Pages Standard Tag Library.
JSTL主要提供了5大类标签库:

  1. 核心标签库: 为日常任务提供通用支持,如显示和设置变量,重复使用一组项目,测试条件以及其他操作(如导入和重定向web页面等).
  2. 国际化(I18N)标签库: 支持多种语言的引用程序.
  3. SQL标签库: 对访问和修改数据库提供标准化支持.
  4. XML标签库: 对XML文件处理和操作提供支持,包括XML节点的解析,迭代,基于XML数据的条件评估以及可扩展样式语言转换(Extensible Style Language Transformations , XSLT)的执行.
  5. 函数标签库: 通过在EL表达式中调用函数标签库中的函数来实现特定的操作,例如: ${fn:contains(sring,substring)},其功能是判断string字符串中是否包含substring字符串.

下面我们主要看一下核心标签库 c
引入:

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

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

<body>
    <br>
    <% String name = "张无忌"; pageContext.setAttribute("name", name); %>
    <c:out value="这个是常量"></c:out>
    <br>
    <c:out value="${name }"></c:out>
    <br>
    <c:out value="${name1111 }" default="默认值是张三丰"></c:out>
    <br>
    <a href="#">xxx</a>
    <br>
    <c:out value="<a href='#'>xxx</a>" escapeXml="true"></c:out>
    <br>
   ${fn:escapeXml("<a href='#'>xxx</a>") }

</body>

结果:
重新学javaweb---JSTL标签_第1张图片

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

<h2>设置或修改javaBean属性中的属性</h2>
<%Person p=new Person(); pageContext.setAttribute("p", p); %>
<c:set target="${p }" property="name" value="fc"></c:set>
${p.name }


//结果:设置或修改javaBean属性中的属性

fc
<h2>设置或修改Map中的属性</h2>
    <br>
    <%
        Map<String, String> map = new HashMap();
        pageContext.setAttribute("map", map);
    %>
    <c:set target="${map }" property="cellphone" value="110"></c:set>
    ${map.cellphone}
    //结果:110

    <h2>设置或修改域中的属性</h2>
    <br>
    <c:set var="name" value="林殊" scope="page"></c:set>
    <br> ${name }
//结果:林殊

scope 可选 page|request|session|application

3.< c:remove>标签用于删除各种Web域中的属性
其语法格式如下:如果不写scope 全部删除

<c:remove var="varName"     
        [scope="{page|request|session|application}"] /> 
<% pageContext.setAttribute("name", "赫敏"); request.setAttribute("name", "哈利波特"); session.setAttribute("name", "金妮"); application.setAttribute("name", "罗恩"); %>
    <c:remove var="name" scope="page" />
    <c:remove var="name" scope="request" />
    <c:remove var="name" scope="application" />
    ${name }
//结果:金妮

4.catch标签
catch标签的功能和java中的try{…}catch{…}语句的功能很相似,它用于捕获嵌入到其中间语句抛出的异常,这个标签的使用格式如下:

 <c:catch var=”varName”>
       相关操作语句
</c:catch>   --如果操作语句中出现异常,则catch会将异常保存在 varName变量中.放在page域当中
 <c:catch var="e">e 存到pagecontext中<br>
        <%
            int i = 1 / 0;
        %>
    </c:catch>
    ${e.message }
//结果:/ by zero

5.if标签
这个标签作用与java中的if语句作用相同,用于判断条件语句,主要的使用格式如下
1. 在< c:if> 体中不包括体的使用格式:
< c:if test=”checkCondition” var=”varName” scope=”page|request|session|application”/>
2. 当< c:if> 体中包括体时,使用格式如下:
 < c:if test=”checkCondition” var=”varName” scope=”page|request|session|application”>
   body content
< /c:if>
标签中使用的属性说明:
test : 判断条件的表达式,返回类型为true 或者 false;(也就是if的条件)
var : 这个变量用于保存test条件表达式判断所返回的true或者false值
   (if条件执行后所得到的boolean值将要保存在var变量中).
scope : 指定var变量所在的有效范围.

6.choose , when , otherwise 标签

<body>
<%int day=113; 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:otherwise>
休息
</c:otherwise>
</c:choose>
</body>
  <c:set var=”num” scope=”page” value=”admin”/>
       <c:choose>
              <c:when test=”${num==’guest’}”>
                     <c:out value=”guest”/>
              </c:when>
<c:when test=”${num==’admin’}”>
                     <c:out value=”admin”/>
              </c:when>
              <c:otherwise>
                     <c:out value=”other”/>
              </c:otherwise>
       </c:choose>
                            运行jsp页面后,输出 admin

7.forEach迭代标签
格式如下:

< c:forEach items=”collection” var=”varName” [varstatue=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>
       Body content
< /c:forEach>

这个标签使用的属性描述如下:
1. var : 也就是保存在collection集合类中的对象名称.
2. items : 将要迭代的集合类名.
3. varStatus : 存储迭代的状态信息,可以访问到迭代自身的信息.
4. begin : 如果指定了begin值,就表示从items[begin]开始迭代;如果没有指定begin值,则从集合的第一个值开始迭代.
5. end : 表示迭代到集合的end位时结束,如果没有指定end值,则表示一直迭代到集合的最后一位.
6. step : 指定迭代的步长.

<h1>遍历数组中的数据</h1>
    <% String[] city = { "北京", "上海", "青岛" }; pageContext.setAttribute("city", city); %>
    <c:forEach items="${city }" var="c">
   ${c }
   </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="p">
    ${p }
    </c:forEach>
//结果:山东 辽宁 北京 上海
<h1>遍历Map中的数据</h1>
    <%
    Map map=new HashMap();
    map.put("name", "fc");
    map.put("gender", "男");
    pageContext.setAttribute("map", map);
     %>
    <c:forEach items="${map }" var="entry">
    ${entry.key }:${entry.value }
    </c:forEach>
//结果:age: 23 name: fc gender: 男
<h1>循环执行指定的内容若干次</h1>
    <c:forEach begin="0" end="10" step="2" var="i">
    ${i }=>
    </c:forEach>
//结果:0=> 2=> 4=> 6=> 8=> 10=>
<h1>遍历10到100的偶数 如果数字所在的位置是三的倍数 显示红色</h1>
    <c:forEach begin="10" end="100" 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>
<% String Items[] = new String[5]; Items[0] = "核心标签库"; Items[1] = "国际化标签库"; Items[2] = "SQL标签库"; Items[3] = "XML标签库"; Items[4] = "函数标签库"; request.setAttribute("ItemName", Items); %>
    <br>
    <B><c:out value="输出整个迭代的信息:" /><B><br> 
    <c:forEach var="Item" items="${ItemName}" begin="3" end="4" step="1" varStatus="s">
       &nbsp;<c:out value="${Item }" />的四种属性:<br>
       &nbsp;所在位置即索引: <c:out value="${s.index}" />
                <br>
       &nbsp;总共已迭代的次数: <c:out value="${s.count}" />
                <br>
       &nbsp;是否为第一个位置: <c:out value="${s.first}" />
                <br>
       &nbsp;是否为最后一个位置: <c:out value="${s.last}" />
        <br>
        <br>
            </c:forEach>
结果:
输出整个迭代的信息:
 XML标签库的四种属性:
 所在位置即索引: 3 
 总共已迭代的次数: 1 
 是否为第一个位置: true 
 是否为最后一个位置: false 

 函数标签库的四种属性:
 所在位置即索引: 4 
 总共已迭代的次数: 2 
 是否为第一个位置: false 
 是否为最后一个位置: true 

8.forTokens 标签
这个标签的作用和Java中的StringTokenizer类的作用非常相似,通过items属性来指定一个特定的字符串,然后通过delims属性指定一种分隔符(可以同时指定多个),通过指定的分隔符把items属性指定的字符串进行分组,与forEach标签一样,forTokens标签也可以指定begin和end以及step属性值.
格式:

<c:forTokens items=”stringOfTokens” delims=”delimiters” var=”varName” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>
              Body content
</c:forTokens>
<c:forTokens items="www.itheima.com" delims="." var="s">
                    ${s }
                </c:forTokens>
结果:
www itheima com 

9.< c:import>标签:

  该标签用于把其他今天文件包含到该文件当中,它与传统的<jsp:include>相类似,不同的是<jsp:include>标签只能用来包括该应用中的其他文件,而<c:import>还可以包含外部站点中的静态文件,所以它的功能更加强大.
from xxxxx....
    <c:import url="/index.jsp" var="p" scope="page"></c:import>
    xxxx
    yyyy
    ${p }
    zzzz
//from xxxxx.... xxxx yyyy This is my JSP page. 
//zzzz 

10< c:redirect>和< c:param>标签:
Redirect标签用来进行页面之间的重定向,它与传统JSP程序重的< jsp:redirect>标签功能相类似,param标签是与redirect一起使用的,它用来进行参数值的传递,redirect标签的使用格式如下:

<c:redirect url="/index.jsp" context="${pageContext.request.contextPath}">
        <c:param name="name" value="zhang"></c:param>
    </c:redirect>

11.< c:url>标签:
这个标签主要用来重写url地址,使用格式如下:


< c:url value=”value” [context=”context”] [var=”varName”] [scope=”page|request|session|application”] />
      //当进行参数传递时,使用格式如下:
<c:url value=”value” [context=”context”] [var=”varName”] [scope=”page|request|session|application”] >
             < c: param name=”paramName” value=”value” />
</ c:url>

标签中使用的属性描述如下:
value: 将要处理的URL地址.
context: 当使用相对路径方法指定外部文件时,这个属性指定的是外在文件的名称.
var: 给这个URL地址起一个标识.
Scope: 规定这个var属性所指定变量的有效范围.

<% String url = response.encodeURL(request.getContextPath()+"/index.jsp"); %>
    <a href="<%= url %>">hhhh</a>

    <c:url value="/index.jsp" context="${pageContext.request.contextPath}" var="url" scope="page"></c:url>
    <a href="${url }">xxx</a>

参考文章:
http://blog.csdn.net/imust_can/article/details/6965756

你可能感兴趣的:(标签,jstl)