1.JSTL标签库是什么?53
-JavaStandardTagLib(Java标准标签库)
-JSTL标签库通常与EL表达式一起使用。目的是让JSP中的Java代码消失。
-标签写在JSP中,但实际上最终还是要执行相应的java程序。(java程序在jar包中。)
2.使用JSTL标签库的步骤:532.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中。然后“AddLib..”
-它必须像mysql的数据库驱动器一样放置在WEB中-INF/lib目录下。
-什么时候需要把jar包放在WEBB-INF/lib目录?如果tomcat服务器没有这个jar。
2.2第二步:将标签库引入JSP。(使用标签库引入taglib指令。)-JSTL提供了很多标签。你想引入哪个标签???专注于核心标签库。
<%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>
这是核心标签库。
prefix=“这里随便起个名字就行了,核心标签库,大家默认叫c,你随便。”
2.3第三步:在需要使用标签的位置使用。表面使用标签,底层实际上是java程序。
代码在E:\java学习javaWeb\coursecourse25web17.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表达式只能从域中获取数据。遍历List集合-%><%--EL表达式只能从域中获取数据-%><%--var后面的名字是随意的。var属性代表集合中的每一个元素。--%><c:forEach items="${stuList}" var="s"> id:${s.id},name${s.name}c:forEach>
3.JSTL标签原理53<%@taglibprefix="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.在jarMETA-INF目录下,有一个CETA-INF目录.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所有语法的代码可以出现在标签体中。 <body-content>JSP</body-content> 如果是JSP,则表示符合JSP所有语法的代码可以出现在标签体中。例如,EL表达式。 <attribute> <description> 描述这个属性 </description> <name>var</name> 属性名 <required>false</required> false表示该属性不必要。true表示这个属性是必要的。true表示这个属性是必要的。 <rtexprvalue>false</rtexprvalue> 该描述显示了该属性是否支持EL表达式。false表示不支持。true表示支持EL表达式。 </attribute> </tag>
4.jstl的核心标签库core中常用的标签是什么?544.1c:if代码在E:\java学习javaWeb\course\course25web18.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属性支持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(sesssion域)、application(application域)-%><%--将var中的v存储到request域。--%><c:if test="${not empty param.username}" var="v" scope="request"> 欢迎你${param.username}h1>c:if><%--request域的v通过EL表达式取出-%><%--存储在v变量中的test属性值。--%>${v}
4.2c:forEach${元素状态对象.count}
${i}
代码在E:\java学习javaWeb\course\course25web19.jsp<%--对JSTL标签库常用的标签库进行深入研究: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开始-%-%><%--结束-%%结束-%><%--步长-%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表达式只能从域中获取数据。遍历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.3c:choosec:whenc:otherwise代码在E:\java学习javaWeb\course\course25web20.jsp<%--对JSTL标签库常用的标签库进行深入研究: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>