jsp JSTL标签详细示例(c:if与c:forEach)

JSTL标准标签库(jsp Standarded Tag Library),使用标签来取代jsp页面上的Java代码

JSTL标签库有很多,我们只学两个,if标签的替代和for循环标签的替代

JSTL快速入门(使用步骤)

1.导入坐标

<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

2.在jsp页面页面上引入JSTL标签库

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

3.使用

<c:if>

1.c:if标签  相当于Java中的if else标签

(我们结合el标签来进行判断,从servlet中获取值,在jsp文件中进行判断)

实体类brand

package com.ithema.pojo;
/*
在实体类中,基本数据类型,建议使用其对应的包装类
 */
public class Brand {

    //id主键
    private Integer id;
    //品牌名称
    private String brandName;
    //企业名称
    private String companyName;
    //排序字段
    private Integer ordered;
    //描述信息
    private String description;
    //状态 0:禁用 1:启用
    private Integer status;
    public Brand(Integer id, String brandName, String companyName, Integer ordered, String description,
                 Integer status) {
        super();
        this.id = id;
        this.brandName = brandName;
        this.companyName = companyName;
        this.ordered = ordered;
        this.description = description;
        this.status = status;
    }
    public Brand() {
    }
    @Override
    public String toString() {
        return "Brand [id=" + id + ", brandName=" + brandName + ", companyName=" + companyName + ", ordered=" + ordered
                + ", description=" + description + ", status=" + status + "]";
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getBrandName() {
        return brandName;
    }
    public void setBrandName(String brandName) {
        this.brandName = brandName;
    }
    public String getCompanyName() {
        return companyName;
    }
    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }
    public Integer getOrdered() {
        return ordered;
    }
    public void setOrdered(Integer ordered) {
        this.ordered = ordered;
    }
    public String getDescription() {
        return description;
    }
    public void getDescription(String description) {
        this.description = description;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
}

servlet-el  servlet文件

package com.ithema.web;
import com.ithema.pojo.Brand;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/demo1")
public class Servlet_el extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.准备数据 现在是list集合,以后是数据库
        List<Brand> brands= new ArrayList<Brand>();
        brands.add(new Brand(1,"小米公司","小米科技有限公司",100,"为发烧而生",1));

        //2.储存带request域中进行转发
        request.setAttribute("brands",brands);
        request.setAttribute("status",1);

        //3.进行请求转发
//        request.getRequestDispatcher("el-demo.jsp").forward(request,response);
        request.getRequestDispatcher("jstl-demo.jsp").forward(request,response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

jstl-demo.jsp文件

<%@ 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:if:用来完成逻辑判断,替换java if else
        1.一般用法是用el表达式来获取值
        2.再用jstl标签上的c:if来判断值是否合乎规则
--%>
<%--<c:if test="true">
    <h1> true </h1>
</c:if>
<c:if test="false">
    <h1> false </h1>
</c:if>--%>
<c:if test="${status ==1}">
    <h2>启用status字符串</h2>
</c:if>
<c:if test="${status !=1}">
    <h2>禁用status字符串</h2>
</c:if>
</body>
</html>

pom文件 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>jsp-demo01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>18</maven.compiler.source>
        <maven.compiler.target>18</maven.compiler.target>
    </properties>

    <packaging>war</packaging>

    <build>
        <plugins>
            <!--tomcat 的插件 (相当于在maven内部放置了个tomcat服务器)-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!--apache提供的与io适配的工具类,好用-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <!--mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>
        <!--junit依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>Test</scope>
        </dependency>
        <!--添加slf4j-api日志api-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.36</version>
        </dependency>
        <!--添加logback-classic依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!--添加logback-core依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>
</project>

效果

2.c:forEach标签  相当于Java中的foreach循环

1.<c:forEach>:相当于for循环

*items:被遍历的容器

*var:遍历产生的临时变量

*varStatus:遍历状态对象

        *index属性 从0开始计数

        *count属性 从1开始计数

    (例如,在数据库中的id可能会有断层,而用数据库中的id当作序号的话,会在显示页面造成断层,从而对阅读者产生不好的影响,所以就会使用varStatus这么一个方法)

示例:

<c:forEach items="${brands}" var="brand">
    <tr align="center">
        <td>${brand.id}</td>
        <td>${brand.brandName}</td>
        <td>${brand.companyName}</td>
        <td>${brand.ordered}</td>
        <td>${brand.description}</td>
        <td>${brand.status}</td>
    </tr>
</c:forEach>

2.${brand.id}代表的不是实体类中的属性变量的名称,而是找到getID这个方法,获取值

实体类brand(和上面的是一样的,所以就不在写了) 

 servlet-el  servlet文件

package com.ithema.web;

import com.ithema.pojo.Brand;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/demo1")
public class Servlet_el extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.准备数据 现在是list集合,以后是数据库
        List<Brand> brands= new ArrayList<Brand>();
        brands.add(new Brand(1,"小米公司","小米科技有限公司",100,"为发烧而生",1));
        brands.add(new Brand(2,"华为","华为科技有限公司",10,"不为发烧而生",0));
        brands.add(new Brand(3,"锤子","锤子科技有限公司",99,"为破产而胜",1));

        //2.储存带request域中进行转发
        request.setAttribute("brands",brands);
        request.setAttribute("status",1);

        //3.进行请求转发
//        request.getRequestDispatcher("el-demo.jsp").forward(request,response);
//        request.getRequestDispatcher("jstl-demo.jsp").forward(request,response);
        request.getRequestDispatcher("jstl-for-demo.jsp").forward(request,response);

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

 jstl-for-demo.jsp文件

<%--
  Created by IntelliJ IDEA.
  User: HP
  Date: 2022/8/20
  Time: 16:21
  To change this template use File | Settings | File Templates.
--%>
<%@ 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>
<table border="1" cellspacing="0" width="800">
    <tr>
        <th>序号</th>
        <th>品牌名称</th>
        <th>企业名称</th>
        <th>排序</th>
        <th>品牌介绍</th>
        <th>状态</th>
        <th>操作</th>

    </tr>
<c:forEach items="${brands}" var="brand" varStatus="status">
    <tr align="center">
<%--        <td>${brand.id}</td>--%>
        <td>${status.count}</td>
        <td>${brand.brandName}</td>
        <td>${brand.companyName}</td>
        <td>${brand.ordered}</td>
        <td>${brand.description}</td>
        <c:if test="${brand.status == 0 }">
            <td>禁用</td>
        </c:if>
        <c:if test="${brand.status == 1 }">
            <td>启用</td>
        </c:if>
        <td><a href="#">修改</a>/<a href="#">删除</a></td>
    </tr>
</c:forEach>
</table>
</body>
</html>

效果

3. c:forEach标签  相当于Java中的for循环(简单for循环)

    *begin:开始数

    *end :结束数

    *step :步长

示例:

<c:forEach begin="0" end="10" step="1" var="i">
    <h2>for循环</h2><br>
</c:forEach>

相当于

for(int i = 0,i<=10,i++){

system.out.println(”for循环“);

}

效果 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看到我,请让我去学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值