JSTL --图文并茂详解(全) 轻松掌握
前言
上节我们学了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;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}
来一个Servlet
@WebServlet("/student")
public class UserServlet extends HttpServlet {@Overrideprotected 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、out、remove、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,则不输出,只有正确才输出
JSTL --图文并茂详解(全) 轻松掌握相关推荐
- UICC 之 USIM 详解全系列——UICC基础知识介绍
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--UICC(TS102 ...
- UICC 之 USIM 详解全系列——UICC协议层结构
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--UICC协议层结构 ...
- UICC 之 USIM 详解全系列——背景与系列介绍
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--背景与系列介绍 文章 ...
- 屏幕小于6英寸的手机_6英寸屏幕真的大么?你可能对“全面屏”有什么误解!详解全面屏手机那些事...
6英寸屏幕真的大么?你可能对"全面屏"有什么误解!详解全面屏手机那些事 2018-05-15 10:31:35 225点赞 278收藏 118评论 小编注:想获得更多专属福利吗?金 ...
- rust机枪塔攻击模式_《辐射4》机枪塔类型及使用心得图文详解 全类型机枪塔伤害介绍...
今天小编给大家分享的是玩家"影与静"总结的<辐射4>机枪塔类型及使用心得图文详解 全类型机枪塔伤害介绍,一起来看下吧. 查过相关攻略,内容也就是在庇护山庄和星光做的攻速 ...
- EL表达式 JSTL(详解)
相关JSTL.EL博客收集如下: JSTL 标签大全详解:http://blog.csdn.net/qq_25827845/article/details/53311722 EL表达式详解:http: ...
- mysql详解(全)
库表基础属性 mysql操作 mysql表操作 mysql表内容操作 mysql查询流程 存储引擎 数据记录存储格式 系统表汇总 建表规范 建表约束 字段类型 sql函数 存储过程 sql关键字 sq ...
- redis详解(全)
学前小故事 数据库和缓存保证一致性小故事 windows && linux 安装redis redis 持久化 redis API 学前小故事 [我是redis] 你好,我是Redis ...
- 图文并茂详解iptables 防火墙工作原理及知识点
防火墙相关概念 iptables相关概念以及工作原理 iptables中四表五链的原理及规则 iptables中的基本命令详解 ------------------防火墙相关概念----------- ...
最新文章
- 物理攻击规避(Physical Attack Mitigation)
- 虚拟IO服务器,虚拟IO服务器VIOS概念.doc
- 40029错误{“errcode“:40029,“errmsg“:“invalid code, rid: 623bbdcd-3c97f4af-5a2c06d6“}
- Android Robolectric 加载运行本地 So 动态库
- nodejs gulp less编辑
- matconvnet 尝试将 SCRIPT vl_imreadjpeg 作为函数执行:
- Junit 4 的 @Before 和 @BeforeClass 对比 Junit 5 @BeforeEach 和 @BeforeAll
- 创维电视安装第三方app
- WIN7 SP1 windbg安装符号文件
- caps scrlk numlk 闪烁
- python分析谷歌浏览器的历史记录
- ESP32设备驱动-BMP180气压温度传感器驱动
- python预测股票价格论文_基于机器学习的股票分析与预测模型研究
- Zynq-Linux移植学习笔记之24-VPVN温度监测
- 论文阅读13:ENHANCING COLLABORATIVE FILTERING MUSIC RECOMMENDATION BY BALANCING EXPLORATION AND EXPLOITAT
- 创业者手记:我所犯的那些入门错误
- H.264与AVS视频标准核心技术比较
- Python总纲路线
- sim卡没坏但苹果手机无服务_手机资讯:苹果iPhone读取不Sim卡怎么办
- 单片机实例21——拉幕式数码显示技术(硬件电路图+汇编程序+C语言程序)
热门文章
- 得年轻人者得天下,新闻客户端如何抓住不看报纸的90后?
- 中学校园网计算机网络工程系统设计,中学校园网络系统设计方案.pdf
- vue项目使用高德地图定位当前地址
- 如何查看 ubuntu 版本是不是 :LTS
- 2021年N1叉车司机模拟考试题及N1叉车司机作业模拟考试
- matlab差速器建模仿真,matlab 两轮差速模型运动模型公式和运动轨迹模拟
- 图像分类相关优质开源数据集汇总(附下载链接)
- NLP算法-关键词提取之Gensim算法库
- C语言俄罗斯方块(旧版本)
- 面试技巧和注意事项---------65个最常见的面试问题与技巧性答复------------CSDN