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>

运行结果:

原文地址:https://www.cnblogs.com/Zender/p/7801318.html