JSTL --图文并茂详解(全) 轻松掌握

本文详细介绍了JSTL(JSP Standard Tag Library),包括其与EL的配合使用,简化JSP代码的优势。通过实例展示了如何引入JSTL,以及核心标签库如forEach的使用方法,强调了set、out、remove和catch等常用标签的功能。

前言

上节我们学了EL,现在我们来讲JSTL


一、回顾EL

废话不说,直接上代码,把代码分离,Java代码写在Servlet里,前端下载jsp里

先写一个Student类


public class Student {
    private int id;
    private String name;
    private double age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getAge() {
        return age;
    }

    public void setAge(double age) {
        this.age = age;
    }

    public Student() {
    }

    public Student(int id, String name, double age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 来一个Servlet

@WebServlet("/student")
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Student> list = new ArrayList<>();
        list.add(new Student(1,"zhangsan",23.5));
        list.add(new Student(2,"lisi",53.5));
        list.add(new Student(3,"wangwu",73.5));
        //通过key valu 形式存储
        req.setAttribute("list",list);
        //转发
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }
}

 最后来一个jsp

<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
      <table border="1" bgcolor="#faebd7">
          <tr>
             <th>编号</th>
             <th>姓名</th>
             <th>成绩</th>
          </tr>
          <tr>
             <td>${requestScope.list[0].id}</td>
             <td>${requestScope.list[0].name}</td>
             <td>${requestScope.list[0].age}</td>
          </tr>
          <tr>
              <td>${requestScope.list[1].id}</td>
              <td>${requestScope.list[1].name}</td>
              <td>${requestScope.list[1].age}</td>
          </tr>
          <tr>
              <td>${requestScope.list[2].id}</td>
              <td>${requestScope.list[2].name}</td>
              <td>${requestScope.list[3].age}</td>
          </tr>
      </table>
  </body>
</html>

 我们来看看输出效果

 这样太多代码了,如果有100行那我们HTML是不是写很多?我们在jsp利用循环输出

  <body>
      <%
          List<Student> list = (List<Student>) request.getAttribute("list");
          for(Student stu:list){
              //这句是关键,El是取,前提要有存
              request.setAttribute("stu",stu);
      %>
      <table align="center" bgcolor="#faebd7" border="1">
          <tr>
              <td>${stu.id}</td>
              <td>${stu.name}</td>
              <td>${stu.age}</td>
          </tr>
          <%
              }
          %>
      </table>
  </body>

看看怎么样

 可以实现,只不过有点丑

这样一存一取的,也挺麻烦的,我们接下来JSTL

二、JSTL

1.简介(只在JSP中使用)

JSP Standard Tag Library JSP 标准标签库,JSP 为开发者提供的⼀系列的标签

使⽤这些标签可以完成 ⼀些逻辑处理,⽐如循环遍历集合,让代码更加简洁,不再出现 JSP 脚本穿插的情况。

实际开发中 EL 和 JSTL 结合起来使⽤,JSTL 侧重于逻辑处理,EL 负责展示数据。

 如何使用?需要引进,共3步

1、在web 下创建lib  需要导⼊ jar 包(两个 jstl.jar standard.jar)存放的位置 web/WEB-INF

 上图

 在lib下粘贴两个压缩包

 

 

2、在 JSP ⻚⾯开始的地⽅导⼊ JSTL核心 标签库  

        c 表示可以代替uri这一大串

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

 

 3、在需要的地⽅使⽤,我们回到我们前言中的问题

 到这里已经成功了,接下来我们用起来,仔细看c标签

整个index.jsp就这么多代码,看起来是不是简洁了

迭代标签:forEach

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
      <table align="center" bgcolor="#faebd7" border="1">
          <tr>
              <td>编号</td>
              <td>姓名</td>
              <td>成绩</td>
          </tr>
            //这个list是我setAttubute的            
          <c:forEach items="${list}" var="stu">
              <tr>
                  <td>${stu.id}</td>
                  <td>${stu.name}</td>
                  <td>${stu.age}</td>
              </tr>
          </c:forEach>
      </table>
  </body>
</html>


2.实操

JSTL 优点:

1、提供了统⼀的标签

2、可以⽤于编写各种动态功能

核⼼标签库常⽤标签: set、outremove、catch

 set:向域对象中添加数据

var相当于key  scope是请求方式,有pagaContext  request  session 等等


 target代表更改的对象目标  property代表更改对象的属性  value代表更改成什么

<body>
    <%
        Student stu = new Student(1,"zhangsang",33.2);
        request.setAttribute("stu",stu);
    %>
    //更改前输出一次
    ${requestScope.name}
    <c:set target="${stu}" property="name" value="lisi"></c:set>
    //更改后输出一次
    ${requestScope.name}
</body>

 


 out:输出域对象中的数据

<body>
    <c:set var="name" value="Tom" ></c:set>
    <c:out value="${name}"></c:out>
</body>

感觉还不如直接${name}输出 


 remove:删除域对象中的数据

<body>
    <c:set var="name" value="Tom" ></c:set>
    <c:out value="${name}"></c:out>
    <hr>
    <c:remove var="name"></c:remove>
    <c:out value="${name}" default="未定义"></c:out>
</body>

 default 表示找不到name才输出


 catch:捕获异常

<body>
    <c:catch var="error">
        <%
            int a = 10/0;
        %>
    </c:catch>
    ${error}
</body>

 

 条件标签:if choose

 细心的你应该发现了标签里面就是jsp的el表达式,上节我们讲到

 

 在if标签中,如果是false,则不输出,只有正确才输出

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值