1. 什么是JSTL标签库? 53
- Java Standard Tag Lib(Java标准的标签库)
- JSTL标签库通常结合EL表达式一起使用。目的是让JSP中的java代码消失。
- 标签是写在JSP当中的,但实际上最终还是要执行对应的java程序。(java程序在jar包当中。)
2. 使用JSTL标签库的步骤:53
2.1 第一步:引入JSTL标签库对应的jar包。
- tomcat10之后引入的jar包是:
- jakarta.servlet.jsp.jstl-2.0.0.jar
- jakarta.servlet.jsp.jstl-api-2.0.0.jar
- 在IDEA当中怎么引入?
- 在WEB-INF下新建lib目录,然后将jar包拷贝到lib当中。然后将其“Add Lib...”
- 一定是要和mysql的数据库驱动一样,都是放在WEB-INF/lib目录下的。
- 什么时候需要将jar包放到WEB-INF/lib目录下?如果这个jar是tomcat服务器没有的。
2.2 第二步:在JSP中引入要使用标签库。(使用taglib指令引入标签库。)
- JSTL提供了很多种标签,你要引入哪个标签????重点掌握核心标签库。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
这个就是核心标签库。
prefix="这里随便起一个名字就行了,核心标签库,大家默认的叫做c,你随意。"
2.3 第三步:在需要使用标签的位置使用即可。
表面使用的是标签,底层实际上还是java程序。
代码在E:\java学习\javaWeb\course\course25\web
17.jsp
<%--深度学习JSTL标签库 53--%>
<%@ page import="java.util.List" %>
<%@ page import="com.bjpowernode.javaweb.jsp.bean.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@page contentType="text/html;charset=UTF-8" %>
<%--引入标签库 这里引入的是jstl的核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%--格式化标签库,专门负责格式化操作的。--%>
<%--<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>--%>
<%--sql标签库--%>
<%--<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>--%>
<%
//创建list集合
List stuList = new ArrayList<>();
//创建Student对象
Student s1 = new Student("110", "警察");
Student s2 = new Student("120", "救护车");
Student s3 = new Student("119", "消防车");
//添加到List集合中
stuList.add(s1);
stuList.add(s2);
stuList.add(s3);
//将list集合存储到request域当中
request.setAttribute("stuList",stuList);
%>
<%--需求:将List集合中的元素遍历。输出学生信息到浏览器--%>
<%--使用java代码--%>
<%
//从域中获取list集合
List stus = (List) request.getAttribute("stuList");
//编写for循环遍历list集合
for (Student stu : stus) {
%>
id:<%=stu.getId()%>,name:<%=stu.getName()%>
<%
}
%>
<%--使用core标签库中forEach标签。对List集合进行遍历--%>
<%--EL表达式只能从域中取数据。--%>
<%--var后面的名字是随意的。var属性代表的是集合中的每一个元素。--%>
<c:forEach items="${stuList}" var="s">
id:${s.id},name${s.name}
c:forEach>
3. JSTL标签的原理 53
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
以上uri后面的路径实际上指向了一个xxx.tld文件。
tld文件实际上是一个xml配置文件。
在tld文件中描述了“标签”和“java类”之间的关系。
以上核心标签库对应的tld文件是:c.tld文件。它在哪里。
在jakarta.servlet.jsp.jstl-2.0.0.jar里面META-INF目录下,有一个c.tld文件。
3.1 源码解析:配置文件tld解析
<tag>
<description>对该标签的描述</description>
<name>catch</name> 标签的名字
<tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class> 标签对应的java类。
<body-content>JSP</body-content> 标签体当中可以出现的内容,如果是JSP,就表示标签体中可以出现符合JSP所有语法的代码。例如EL表达式。
<attribute>
<description>
对这个属性的描述
</description>
<name>var</name> 属性名
<required>false</required> false表示该属性不是必须的。true表示该属性是必须的。
<rtexprvalue>false</rtexprvalue> 这个描述说明了该属性是否支持EL表达式。false表示不支持。true表示支持EL表达式。
</attribute>
</tag>
4. jstl中的核心标签库core当中有哪些常用的标签呢?54
4.1 c:if
代码在E:\java学习\javaWeb\course\course25\web
18.jsp
<%--深度学习JSTL标签库常用的标签库 c:if 54--%>
<%@page contentType="text/html;charset=UTF-8" %>
<%--引入标签库 这里引入的是jstl的核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%--核心标签库中的if标签--%>
<%--test属性是必须的。test属性支持EL表达式。test属性值只能是boolean类型。--%>
<c:if test="${empty param.username}">
用户名不能为空h1>
c:if>
<%--没有else标签的话,可以搞两个if出来。--%>
<%--if标签还有var属性,不是必须的。--%>
<%--if标签还有scope属性,用来指定var的存储域。也不是必须的。--%>
<%--scope有四个值可选:page(pageContext域)、request(request域)、session(session域)、application(application域)--%>
<%--将var中的v存储到request域。--%>
<c:if test="${not empty param.username}" var="v" scope="request">
欢迎你${param.username}h1>
c:if>
<%--通过EL表达式将request域当中的v取出--%>
<%--v变量中存储的是test属性的值。--%>
${v}
4.2 c:forEach
${元素状态对象.count}
${i}
代码在E:\java学习\javaWeb\course\course25\web
19.jsp
<%--深度学习JSTL标签库常用的标签库c:forEach 54--%>
<%@ page import="com.bjpowernode.javaweb.jsp.bean.Student" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@page contentType="text/html;charset=UTF-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%--var用来指定循环中的变量--%>
<%--begin开始--%>
<%--end结束--%>
<%--step步长--%>
<%--底层实际上:会将i存储到pageContext域当中。--%>
<c:forEach var="i" begin="1" end="10" step="1" >
<%--所以这里才会使用EL表达式将其取出,一定是从某个域当中取出的。--%>
${i}
c:forEach>
<%
//创建list集合
List stuList = new ArrayList<>();
//创建Student对象
Student s1 = new Student("110", "警察");
Student s2 = new Student("120", "救护车");
Student s3 = new Student("119", "消防车");
//添加到List集合中
stuList.add(s1);
stuList.add(s2);
stuList.add(s3);
//将list集合存储到request域当中
request.setAttribute("stuList",stuList);
%>
<%--使用core标签库中forEach标签。对List集合进行遍历--%>
<%--EL表达式只能从域中取数据。--%>
<%--var后面的名字是随意的。var属性代表的是集合中的每一个元素。--%>
<%--var="s"这个s代表的是集合中的每个Student对象--%>
<%--varStatus="这个属性表示var的状态对象,这里是一个java对象,这个java对象代表了var的状态"--%>
<%--varStatus="这个名字是随意的"--%>
<%--varStatus这个状态对象有count属性。可以直接使用。--%>
<c:forEach items="${stuList}" var="s" varStatus="stuStatus">
<%--varStatus的count值从1开始,以1递增,主要是用于编号/序号。--%>
编号:${stuStatus.count}. id:${s.id},name${s.name}
c:forEach>
4.3 c:choose c:when c:otherwise
代码在E:\java学习\javaWeb\course\course25\web
20.jsp
<%--深度学习JSTL标签库常用的标签库c:choose 54--%>
<%@page contentType="text/html;charset=UTF-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%--c:choose类似于--%>
<%--
if(){
}else if(){
}else if(){
}else if(){
}else{
}
--%>
<%--注意:这个嵌套结构不能随便改,只能这样嵌套。--%>
<c:choose>
<c:when test="${param.age<18}">
青少年
c:when>
<c:when test="${param.age<35}">
壮年
c:when>
<c:when test="${param.age<55}">
中年
c:when>
<c:otherwise>
老年
c:otherwise>
c:choose>
标签:stuList,java,标签,jar,JSTL,Student,解析
From: https://blog.51cto.com/u_15784725/6407824