zoukankan      html  css  js  c++  java
  • JSTL

    JavaWeb:JSTL

     

    JSTL

    说明

    什么是JSTL?

      JSP标准标签库(JavaServer Pages Standard Tag Library,JSTL)是一个定制的标签库的集合,用来解决像遍历map或者集合、条件测试、XML处理,甚至数据库访问和数据操作等常见的问题。

    JSTL库的安装

    下载地址:
      • 官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
      • 菜鸟教程网下载地址:jakarta-taglibs-standard-1.1.2.zip
    安装
      将jakarta-taglibs-standard-1.1.2/lib/下的两个jar文件:standard.jar和jstl.jar文件拷贝到/WEB-INF/lib/下并添加至环境变量。
      然后在IDEA中加入tld约束文件: 

      

      
      同样的操作加入其余四个tld约束文件:

    区域URI前缀
    XML http://java.sun.com/jsp/jstl/xml x
    国际化 http://java.sun.com/jsp/jstl/fmt fmt
    数据库 http://java.sun.com/jsp/jstl/sql sql
    函数 http://java.sun.com/jsp/jstl/functions fn

    在JSP中使用JSTL

      在JSP页面中引用JSTL库,必须在在JSP页面的开头做以下声明:

      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core">
      <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml">
      <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt">
      <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql">
      <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions">

    说明:

      前缀可以使任意的,但是为了更加规范,建议采用如此简写形式。

    一般行为

    <c:out>标签

    说明:
      out标签可以将一个表达式的结果打印到网页上,这个表达式可以是基于<%=?%>的传统形式,也可以是EL表达式
    演示:

    复制代码
     1 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core">
     2 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
     3 <html>
     4   <head>
     5     <title>$Title$</title>
     6   </head>
     7   <body>
     8     <%--默认值有两种表示方式--%>
    10     <c:out value="${param.username}">
    11       默认值
    12     </c:out>
    13     
    14     <c:out value="${param.username}" default="默认值"/>
    15   </body>
    16 </html>
    复制代码

    <c:set>标签

    说明:
      set标签具有以下三个作用:
      1.为String类型的命名变量设定值。
      2.如果命名变量为JavaBean,那么为这个JavaBean对象的特定属性设定值。
      3.如果命名变量为Map类型,那么为这个Map对象中的特定Key设定值。
    演示: 
      1.为String类型的命名变量设定值。

    复制代码
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <c:set var="命名变量的名字" value="哈哈哈" scope="session"/>
        <c:set var="user" value="Tom" scope="session"/>
        <c:out value="${sessionScope.user}" default="unknow"/>
    </body>
    </html>
    复制代码


      2.如果命名变量为JavaBean,那么为这个JavaBean对象的特定属性设定值。

    复制代码
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <jsp:useBean id="product" scope="session" class="domain.Product"/>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <c:set target="${product}" property="name" value="白象方便面"/>
        <c:out value="${product.name}" default="unknow"/>
    </body>
    </html>
    复制代码

      3.如果命名变量为Map类型,那么为这个Map对象中的特定Key设定值。

    复制代码
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <jsp:useBean id="hashmap" class="java.util.HashMap" scope="request"/>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <c:set target="${hashmap}" property="1" value="Monday"/>
        <c:set target="${hashmap}" property="2" value="Tuesday"/>
        <c:set target="${hashmap}" property="3" value="Wednesday"/>
        <c:out value="${hashmap.get('1')}" default="unknow"/>
    </body>
    </html>
    复制代码

    <c:remove>标签

    说明:
      reomve标签用于删除特定范围内的命名变量。
    演示:

    复制代码
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <jsp:useBean id="hashmap" class="java.util.HashMap" scope="request"/>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <c:set target="${hashmap}" property="1" value="Monday"/>
        <c:remove var="hashmap" scope="request"/>
        <c:out value="${hashmap.get('1')}" default="unknow"/>
    </body>
    </html>
    复制代码

    条件行为

    <c:if>标签

    说明:
      用于实现Java语言中的if语句的功能。
    演示:

    复制代码
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%--测试结果将保存在result变量中--%>
        <c:if test="${param.username=='Tom'}" var="result" scope="request">
            <%--如果测试成功,则会输出true--%>
            <c:out value="${result}"/>
        </c:if>
    </body>
    </html>
    复制代码

    <c:choose>、<c:when>、<c:otherwise>

    说明:
      <c:choose>、<c:when>、<c:otherwise>三个标签一起连用,可以实现Java语言中的if-else语句的功能。
    演示:

    复制代码
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <c:choose>
        <c:when test="${empty param.username}">
            Noknown user
        </c:when>
        <c:when test="${param.username=='Tom'}">
            Tom
        </c:when>
        <c:otherwise>
            Other
        </c:otherwise>
    </c:choose>
    </body>
    </html>
    复制代码

    迭代标签

    <c:forEach标签>

    说明:
      forEach标签用于遍历集合中的对象,并且能重复执行标签主体。
    演示:
      1.基本用法:

    复制代码
    <%@ page import="java.util.List" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            List books = new ArrayList();
            books.add("JavaWeb程序设计");
            books.add("Java程序设计");
            books.add("JSP程序设计");
        %>
        <c:forEach var="book" items="<%=books%>">
            ${book} &nbsp;
        </c:forEach>
    </body>
    </html>
    复制代码

      2.foreach的varStatus属性
      varStatus属性用于设定一个LoopTagStatus类型的命名变量,它位于NESTED范围,这个命名变量包含了从集合中取出的当前元素的状态信息。
      • count 当前元素在集合中的序号,从1开始计数。
      • index 当前元素在集合中的索引,从0开始计数。
      • first 当前元素是否时集合中的第一个元素
      • last 当前元素是否是集合中的最后一个元素

    复制代码
    <%@ page import="java.util.List" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            List books = new ArrayList();
            books.add("JavaWeb程序设计");
            books.add("Java程序设计");
            books.add("JSP程序设计");
        %>
        <c:forEach var="book" items="<%=books%>" varStatus="status">
           ${status.count} &nbsp;${status.index}&nbsp;${status.first}&nbsp;${status.last}&nbsp;${book}<br>
        </c:forEach>
    </body>
    </html>
    复制代码

      3.begin、end、step
      begin、end、step分别指定循环的起始索引、结束索引和步长。

    复制代码
    <%@ page import="java.util.List" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            List books = new ArrayList();
            books.add("JavaWeb程序设计");
            books.add("Java程序设计");
            books.add("JSP程序设计");
        %>
        <c:forEach var="book" items="<%=books%>" varStatus="status" begin="1" end="2" step="1">
           ${status.count} &nbsp;${status.index}&nbsp;${status.first}&nbsp;${status.last}&nbsp;${book}<br>
        </c:forEach>
    </body>
    </html>
    复制代码


      4.可以遍历的集合
      forEach可以遍历的集合包括:
      • Set、List、Map、Iterator、Enumeration接口的实现类。

    复制代码
    <%@ page import="java.util.HashMap" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            HashMap hashMap = new HashMap();
            hashMap.put("one","Monday");
            hashMap.put("two","Tuesday");
            hashMap.put("three","Wednesday");
    
        %>
        <c:forEach var="week" items="<%=hashMap%>">
          ${week.key} &nbsp;${week.value}<br>
        </c:forEach>
    </body>
    </html>
    复制代码

    • Java数组
    • 以逗号隔开的字符串

    复制代码
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
    String names = "Tom,Mike,Juice";
    
        %>
        <c:forEach var="name" items="<%=names%>">
            ${name}<br>
        </c:forEach>
    </body>
    </html>
    复制代码

    <c:forTokens>标签

    说明:
      forTokens标签用于遍历字符串中用特定分隔符分割的子字符串,并且能重复执行标签主体。
    演示:

    复制代码
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
    String names = "Tom|Mike|Juice";
    
        %>
        <c:forTokens var="name" items="<%=names%>" delims="|">
            ${name}<br>
        </c:forTokens>
    </body>
    </html>
    复制代码

    未完待续...




     
    分类: JavaWeb
  • 相关阅读:
    PDE_DATA 定义
    每天写日记争创青年艺术家 2014-5-14
    [Servlet3.0新功能]注释替代配置文件
    Flex4+Spring3+Hibernate3+BlazeDS整合笔记
    Flex博客
    hibernate缓存机制详细分析
    计算机的艺术-算法
    算法/数据结构/数学
    线性表 及Java实现 顺序表、链表、栈、队列
    java 图的邻接矩阵
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/6516966.html
Copyright © 2011-2022 走看看