zoukankan      html  css  js  c++  java
  • Java Web学习总结(9)学习总结-JSTL

    一,JSTL概述

    JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是他的核心库

    二,JSTL下载与导入

    JSTL下载:

    从Apache的网站下载JSTL的JAR包。进入 "http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/" 网址下载JSTL的安装包。jakarta-taglibs-standard-1.1.2.zip,然后将下载好的JSTL安装包进行解压,此时,在lib目录下可以看到两个JAR文件,分别为jstl.jar和standard.jar。 其中,jstl.jar文件包含JSTL规范中定义的接口和相关类standard.jar文件包含用于实现JSTL的.class文件以及JSTL中5个标签库描述符文件(TLD)。

    将两个jar包导入我们工程的lib中:

    使用jsp的taglib指令导入核心标签库:

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

    三.JSTL核心库的常用标签

    1,<c:if test="">标签

    <c:if>标签和程序中的if语句作用相同,用来实现条件控制,其中test是返回boolean的条件。

    <%@ page language="java" errorPage="/error.jsp" contentType="text/html; charset=UTF-8"
        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" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <base href="<%=basePath%>">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            request.setAttribute("count", 10);
        %>
        <!-- jstl标签经常和el配合使用 -->  
        <c:if test="${count==10}">
            相等
        </c:if>
    </body>
    </html>

    运行结果:

    2,<c:forEach>标签

    该标签根据循环条件遍历集合(Collection)中的元素。

    语法:

    <c:forEach

      var="name"

      items="Collection"

      varStatus="StatusName"

      begin="begin"

      end="end"

      step="step">

    本体内容

    </c:forEach>

    参数解析:

      (1)var设定变量名用于存储从集合中取出元素。

      (2)items指定要遍历的集合。

      (3)varStatus设定变量名,该变量用于存放集合中元素的信息。

      (4)begin、end用于指定遍历的起始位置和终止位置(可选)。

      (5)step指定循环的步长。

    属性说明:

    属性名称

    是否支持EL表达式

    属性类型

    是否必须

    默认值

    var

    NO

    String

    items

    YES

    Arrays

    Collection

    Iterator

    Enumeration

    Map

    String []args

    begin

    YES

    int

    0

    end

    YES

    int

    集合中最后一个元素

    step

    YES

    int

    1

    varStatus

    NO

    String

      

    例如:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ page import="com.zender.*,java.util.*"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <base href="<%=basePath%>">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        1,遍历List<String>的值:<br/>
        <%
            List<String> strList = new ArrayList<String>();
            strList.add("Zender");
            strList.add("Zender1");
            strList.add("Zender2");
            strList.add("Zender3");
            strList.add("Zender4");
            request.setAttribute("strList", strList);
        %>
        <c:forEach items="${strList }" var="str">
            ${str }<br/>
        </c:forEach>
        <hr/>
        2,遍历List<String>的值,指定begin的值为1、end的值为3、step的值为2,从第二个开始,每两个遍历一次:<br/>
        <c:forEach items="${strList }" var="str" begin="1" end="3" step="2">
            ${str }<br/>
        </c:forEach>
        <hr/>
        3,遍历List<User>的值:<br/>
        <%
            List<User> userList = new ArrayList<User>();
            userList.add(new User(1,"Zender","123"));
            userList.add(new User(2,"Zender2","1234"));
            userList.add(new User(3,"Zender3","1235"));
            request.setAttribute("userList", userList);
        %>
        <c:forEach items="${userList }" var="user">
            id:${user.id }------name:${user.name }------pwd:${user.pwd }<br/>
        </c:forEach>
        <hr/>
        4,遍历Map<String,String>的值:<br/>
        <%
            Map<String,String> strMap = new HashMap<String,String>();
            strMap.put("name", "Zender");
            strMap.put("age", "21");
            strMap.put("addr", "ShangHai");
            request.setAttribute("strMap", strMap);
        %>
        <c:forEach items="${strMap }" var="entry">
            ${entry.key }------${entry.value }<br/>
        </c:forEach>
        <hr/>
        5,遍历Map<String,User>的值:<br/>
        <%
            Map<String,User> userMap = new HashMap<String,User>();
            userMap.put("1", new User(1,"Zender","123"));
            userMap.put("2", new User(2,"Zender2","1232"));
            userMap.put("3", new User(3,"Zender3","1233"));
            request.setAttribute("userMap", userMap);
        %>
        <c:forEach items="${userMap }" var="entry">
            编号:${entry.key },${entry.value.name }-----${entry.value.pwd }<br/>
        </c:forEach>
    </body>
    </html>

    运行结果:

    3,choose标签、when标签、otherwise标签——流程控制标签

    <c:choose>、<c:when>和<c:otherwise>这3个标签通常情况下是一起使用的,<c:choose>标签作为<c:when>和<c:otherwise>标签的父标签来使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 "if-else if-else" 的复杂条件判断结构。

    语法

    <c:choose>

    <c:when test="条件1">

    //业务逻辑1

    <c:when>

    <c:when test="条件2">

    //业务逻辑2

    <c:when>

    <c:when test="条件n">

    //业务逻辑n

    <c:when>

    <c:otherwise>

    //业务逻辑

    </c:otherwise>

    </c:choose>

    例如:

    <%@ page language="java" errorPage="/error.jsp" contentType="text/html; charset=UTF-8"
        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" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <base href="<%=basePath%>">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            request.setAttribute("score", 80);
        %>
        <c:choose>
            <c:when test="${score >= 90}">
                你的成绩为优秀!
            </c:when>
            <c:when test="${score > 70 && score < 90}">
                您的成绩为良好!
            </c:when>
            <c:when test="${score > 60 && score < 70}">
                您的成绩为及格!
            </c:when>
            <c:otherwise>
                对不起,您没有通过考试!
            </c:otherwise>
        </c:choose>
    </body>
    </html>

    运行结果:

  • 相关阅读:
    LeetCode 623. Add One Row to Tree
    LeetCode 894. All Possible Full Binary Trees
    LeetCode 988. Smallest String Starting From Leaf
    LeetCode 979. Distribute Coins in Binary Tree
    LeetCode 814. Binary Tree Pruning
    LeetCode 951. Flip Equivalent Binary Trees
    LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List
    LeetCode 889. Construct Binary Tree from Preorder and Postorder Traversal
    LeetCode 687. Longest Univalue Path
    LeetCode 428. Serialize and Deserialize N-ary Tree
  • 原文地址:https://www.cnblogs.com/Zender/p/7801318.html
Copyright © 2011-2022 走看看