JSTL详解
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里面就存了一次吗

这不就早存了吗
但是咱们其实在

这里又做了一个取出操作
因为不能连着取两次,所以,再第二次取的时候咋们要存一次
<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.引入到工程里面

具体操作就不细讲了

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

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);
%>

在用户端可以输出
但是默认存在page里面

我们可以把这个范围改大一点
同时我们也可以通过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:修改后的值

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

后面加上一个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>
想测试的可以试试看

浙公网安备 33010602011771号