ei表达式只可以在jsp里面显示

但并不是在<%%>里面

<table>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>成绩</th>
    </tr>
    <%
        List<User> list =(List<User>) request.getAttribute("list");
        for(User user:list){
    %>
    <tr>
        <th>${user.id}</th>
        <th>${user.name}</th>
        <th>${user.score}</th>
    </tr>

    <%
        }
    %>
</table>

因此我们可以想到这种方法,但是用户端界面根本读不到

。。

想不到敲半天代码给我整这一出

为啥读不出呢?

其实吧ei表达式读取数据是在取出域里面的数据

所以如果我们要用ei表达式,我们就要先将数据存到request里面

ei表达式,咱们之前就讲过,就单单只是简化了get这一步骤,而如果要使用get那咱们就需要在前面加一个set操作

先存再取

有人就会问了,咱们不是在servlet里面就存了一次吗

JSTL详解_jar

 

 

这不就早存了吗

但是咱们其实在

JSTL详解_jar_02

 

 这里又做了一个取出操作

因为不能连着取两次,所以,再第二次取的时候咋们要存一次

<table>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>成绩</th>
    </tr>
    <%
        List<User> list =(List<User>) request.getAttribute("list");
        for(User user:list){
            request.setAttribute("user",user);
    %>
    <tr>
        <th>${user.id}</th>
        <th>${user.name}</th>
        <th>${user.score}</th>
    </tr>

    <%
        }
    %>
</table>
${requestScope.list}

感兴趣的可以试试,反正我500了

但毕竟是jsp界面咱们还是不要老是搞这种操作

因为ei的功能就那么多做不到那种操作,所以这时候咋们的jstl就应声出来了

jstl为jsp开发者提供一系列的标签

出了jsp就用不了了

jstl负责逻辑处理,ei负责展示数据

1.使用jstl第一步需要导入jar包(jstl.jar和standard,jar的包)

2.引入到工程里面

JSTL详解_jar包_03

 

 

具体操作就不细讲了

JSTL详解_jar包_04

 

 在加进来之后咱们就可以看见源码了

JSTL详解_数据_05

 

 3.在jsp操作的界面导入jstl标签库

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

就差不多这样

其中那个lib里面的jar包必须放在web-inf里面

--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--taglib就是引入的标签,其中url就是jsp的核心,将其引进来,使用了这个他就会自动去找到该jar包--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>成绩</th>
    </tr>
    <c:forEach items="${list}" var="user">
        <tr>
            <th>${user.id}</th>
            <th>${user.name}</th>
            <th>${user.score}</th>
        </tr>
    </c:forEach>
</table>
${requestScope.list}
</body>
</html>

我的还是不出意外的报错了

但这一段代码应该是没问题的

其中jstl里面<c:forEach //这里代表的是循环操作 items后面接的是集合处,var是将其转换为user的形式

 

jstl的优点:

1.提供了统一标签

2.可以用于编写各种动态功能

常用的标签:

set,out,remove,catch

set:往域对象中添加数据

<%
    request.setAttribute(key,value);
%>

JSTL详解_java_06

 

 在用户端可以输出

但是默认存在page里面

JSTL详解_jar_07

 

 我们可以把这个范围改大一点

同时我们也可以通过set来对对象信息进行修改

<%--将信息存储到--%>
        <%
            User user=new User(1,"张三",99);
            request.setAttribute("user",user);
        %>
        ${user.name}
<hr/>
        <c:set target="${user}" property="name" value="李四"></c:set>
        ${user.name}

这就是将其原有的值进行修改

target是要修改的目标(获取该元素的信息)

property:修改的地方

value:修改后的值

JSTL详解_jar包_08

 

 

out使当出现取不出来的情况,就会用default里面的数据进行代替

remove:删除操作

JSTL详解_html_09

 

 后面加上一个scope删除指定范围的数据

catch:捕获异常信息

<%@ page import="com.southwind.entity.User" %><%--
  Created by IntelliJ IDEA.
  User: mr.wang
  Date: 2021/10/30
  Time: 17:00
  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>
<%--将信息存储到--%>
        <%
            User user=new User(1,"张三",99);
            request.setAttribute("user",user);
        %>
        ${user.name}
<hr/>
        <c:set target="${user}" property="name" value="李四"></c:set>
        ${user.name}
<%--输出数据--%>
<c:out value="${name}" default="未定义"></c:out>

<c:remove var="${name}" scope="page"></c:remove>
<%--将错误信息放到error里面--%>
<c:catch var="error">
    <%
        int a=10/0;
    %>
</c:catch>
<%--输出报错的原因--%>
${error}
</body>
</html>

想测试的可以试试看

真的牛掰