JSTL的使用以及概念

javaWeb

一、JSTL

1.1 概念

jstl(JavaServerPages Standard Tag Library) JSP标准标签库

jsp标准标签库,用于配合指令与el表达式完成jsp页面上所有动态操作,使页面java代码的书写降到最低

1.2 使用

1、导入相应的jar包 jstl.jar standard.jar

2、在使用jstl的jsp页面中添加标签的引入(类似于java的导包)

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

3、使用相应标签完成相应功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3B5WW2Ht-1616476814687)(day0318.assets/image-20210318141606056.png)]

1.2.1 通用标签

User.java

package com.yunhe.pojo;

import java.io.Serializable;
import java.util.Objects;

public class User implements Serializable {
    private String username;
    private String password;
    private String roleName;

    public User() {
    }

    public User(String username, String password, String roleName) {
        this.username = username;
        this.password = password;
        this.roleName = roleName;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", roleName='" + roleName + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return Objects.equals(getUsername(), user.getUsername()) && Objects.equals(getPassword(), user.getPassword()) && Objects.equals(getRoleName(), user.getRoleName());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getUsername(), getPassword(), getRoleName());
    }
}

set标签



<%@ page import="com.yunhe.pojo.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%-- c是前缀  在taglib设置时设置的前缀是什么 使用时前缀就是什么 --%>
  <%-- 1、将数据存储至指定作用域 --%>
  <c:set var="name" value="值" scope="session"/>
  <%-- var 存储到作用域的名字   value存储到作用域的值    scope存储的作用域--%>
  ${name}

  <%--2、为指定对象赋值  --%>
  <% User u=new User();
    session.setAttribute("user",u);
  %>
  <c:set target="${user}" property="username" value="admin"/>
  <c:set target="${user}" property="password" value="123456"/>
  <c:set target="${user}" property="roleName" value="管理员"/>
  <%-- target设置属性的对象(一般使用el表达式获取)   property设置的属性    value设置的值 --%>
  ${user}
  </body>
</html>

out标签

用于获取输出指定数据

```jsp
<%@ page import="com.yunhe.pojo.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <% User u=new User();
    u.setPassword("123456");
    session.setAttribute("user",u);
  %>
  <%-- out标签 将结果输出到控制台 类似于el表达式输出  out.print() --%>
  <%-- el表达式值为空时没有输出  out标签至为空时可以设置默认值  --%>
  <c:out value="${user.username}" default="用户名未设置"/>
  <c:out value="${user.password}" default="密码未设置"/>
  <c:out value="${user.roleName}" default="角色未设置"/>
  </body>
</html>

remove标签

用于删除指定作用域数据

<%@ page import="com.yunhe.pojo.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <% User u=new User();
    u.setPassword("123456");
    session.setAttribute("user",u);
  %>

  <%-- remove标签  移除指定作用域指定数据 --%>
  <c:remove var="user" scope="session"/>

  <%-- out标签 将结果输出到控制台 类似于el表达式输出  out.println() --%>
  <%-- el表达式值为空时没有输出  out标签至为空时可以设置默认值  --%>
  <c:out value="${user.username}" default="用户名未设置"/>
  <c:out value="${user.password}" default="密码未设置"/>
  <c:out value="${user.roleName}" default="角色未设置"/>
  </body>
</html>

1.2.2 条件标签

if标签


<%@ page import="com.yunhe.pojo.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<% User u = new User();
    u.setUsername("admin");
    u.setPassword("123456");
    u.setRoleName("0");//0学生 1老师 2管理员
    session.setAttribute("user", u);
%>

<%-- c:if标签 对结果进行判断如果为true则在页面输出标签内容 --%>
<c:if test="${true}" var="names" scope="page"></c:if>
<%--  test使用el表达式获取数据后进行判断   var用于声明变量保存判断的结果  scope用于设置变量存储的作用域 --%>
<table>
    <thead>
    <tr>
        <th>账号</th>
        <th>密码</th>
        <th>角色</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>
            ${user.username}
        </td>
        <td>
            ${user.password}
        </td>
        <td>
            <c:if test="${user.roleName eq '0'}" var="c1" scope="page">
                学生
            </c:if>
            <c:if test="${user.roleName eq '1'}" var="c2" scope="page">
                老师
            </c:if>
            <c:if test="${user.roleName eq '2'}" var="c3" scope="page">
                管理员
            </c:if>
        </td>
        判断结果1${c1}
        判断结果2${c2}
        判断结果3${c3}
    </tr>
    </tbody>
</table>
</body>
</html>

choose标签

```jsp
<%@ page import="com.yunhe.pojo.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<% User u = new User();
    u.setUsername("admin");
    u.setPassword("123456");
    u.setRoleName("5");//0学生 1老师 2管理员
    session.setAttribute("user", u);
%>
<%-- c:choose标签 用于完成if。。else的书写 只有在每个分支上拥有test属性用于判断数据的结果 --%>
<c:choose>
    <c:when test="${user.roleName eq '0'}">
        学生
    </c:when>
    <c:when test="${user.roleName eq '1'}">
        教师
    </c:when>
    <c:when test="${user.roleName eq '2'}">
        管理员
    </c:when>
    <c:otherwise>
        什么玩意
    </c:otherwise>
</c:choose >
<table>
    <thead>
    <tr>
        <th>账号</th>
        <th>密码</th>
        <th>角色</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>
            ${user.username}
        </td>
        <td>
            ${user.password}
        </td>
        <td>
            <c:choose>
                <c:when test="${user.roleName eq '0'}">
                    学生
                </c:when>
                <c:when test="${user.roleName eq '1'}">
                    教师
                </c:when>
                <c:when test="${user.roleName eq '2'}">
                    管理员
                </c:when>
                <c:otherwise>
                    什么玩意
                </c:otherwise>
            </c:choose >
        </td>

    </tr>
    </tbody>
</table>
</body>
</html>

### 1.2.3 迭代标签

foreach标签

```java
``jsp
<%@ page import="com.yunhe.pojo.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Random" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<%
    ArrayList<User> list=new ArrayList<>();
    for(int i=1;i<=20;i++){
        String [] roleArr={"学生","教师","管理员"};
        Random r=new Random();
        list.add(new User("a"+i,"a"+i+i,roleArr[r.nextInt(roleArr.length)]));
    }
    session.setAttribute("list", list);
%>
<%--  foreach标签用于循环的执行与数据集合的遍历 --%>
<%-- 1、循环的书写 --%>
<c:forEach  var="i" begin="0"  end="10" step="2">
    <%-- var用于保存循环时的变量  begin初始变量的值  end 变量结束的值  step每次循环后变量修改的大小   --%>
   ${i} hello world!<br>
</c:forEach>

<%-- 2、遍历数据集合 --%>

<c:forEach var="i" items="${list}" varStatus="status">
    <%-- var用于保存循环时的变量 items保存遍历的数据集合  varStatus声明保存当前循环的相应信息  --%>
    ${i}<br>
</c:forEach>





<table>
    <thead>
    <tr>
        <th>账号</th>
        <th>密码</th>
        <th>角色</th>
    </tr>
    </thead>
    <tbody>
<c:forEach var="i" items="${list}" varStatus="status">
    <tr>
        <td>
                ${status.count}
        </td>

        <td>
            ${i.username}
        </td>
        <td>
                ${i.password}
        </td>
        <td>
                ${i.roleName}
        </td>
    </tr>
</c:forEach>
    </tbody>
</table>
</body>
</html>


-%>
${i} hello world!

</c:forEach>

<%-- 2、遍历数据集合 --%>

<c:forEach var="i" items="${list}" varStatus="status">
    <%-- var用于保存循环时的变量 items保存遍历的数据集合  varStatus声明保存当前循环的相应信息  --%>
    ${i}<br>
</c:forEach>





<table>
    <thead>
    <tr>
        <th>账号</th>
        <th>密码</th>
        <th>角色</th>
    </tr>
    </thead>
    <tbody>
<c:forEach var="i" items="${list}" varStatus="status">
    <tr>
        <td>
                ${status.count}
        </td>

        <td>
            ${i.username}
        </td>
        <td>
                ${i.password}
        </td>
        <td>
                ${i.roleName}
        </td>
    </tr>
</c:forEach>
    </tbody>
</table>
</body>
</html>


上一篇:EL&JSTL


下一篇:EL表达式与JSTL表达式