• 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>

    运行结果:

  • 相关阅读:
    iOS
    UI基本视图控制
    堆和栈的区别 ?
    单例模式
    Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?
    id
    协议
    分类(类别)
    #import和#include以及@class三者的区别?
    内存管理
  • 原文地址:https://www.cnblogs.com/Zender/p/7801318.html
Copyright © 2020-2023  润新知