-
什么是JSTL标签库?
- Java Standard Tag Lib(Java标准的标签库)
- JSTL标签库通常结合EL表达式一起使用。目的是让JSP中的java代码消失。
- 标签是写在JSP当中的,但实际上最终还是要执行对应的java程序。(java程序在jar包当中。)
-
使用JSTL标签库的步骤:
-
第一步:引入JSTL标签库对应的jar包。
- tomcat10之后引入的jar包是(jar包可以去Maven仓库找):
- 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服务器没有的。
- tomcat10之后引入的jar包是(jar包可以去Maven仓库找):
-
第二步:在JSP中引入要使用标签库。(使用taglib指令引入标签库。)
-
JSTL提供了很多种标签,你要引入哪个标签????重点掌握核心标签库。
-
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 这个就是核心标签库。 prefix="这里随便起一个名字就行了,核心标签库,大家默认的叫做c,随意。"
-
-
第三步:在需要使用标签的位置使用即可。表面使用的是标签,底层实际上还是java程序。
-
-
JSTL标签的原理
-
<%@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文件。
-
源码解析:配置文件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> <c:catch var=""> JSP.... </c:catch>
-
-
-
jstl中的核心标签库core当中有哪些常用的标签呢?
-
c:if
- <c:if test=“boolean类型,支持EL表达式”></c: if>
<%--核心标签库中的if标签--%> <%--test属性是必须的,支持EL表达式,test属性值必须是boolean类型--%> <c:if test="${empty param.username}"> <h1>用户名不能为空</h1> </c:if> <%--没有else标签--%> <%--if标签还有var属性,不是必须的--%> <%--if标签还有scope属性,用来指定var的存储域,不是必须的--%> <%--scope有四个值:page(pageContext域)、request、session、application--%> <%--将var中的值存储到request域中--%> <c:if test="${not empty param.username}" var="v" scope="request"> <h1>欢迎${param.username}</h1> </c:if> <%--从request域中取v--%> <%--v变量中存储的是test属性的值--%> ${v}<%--true或者false--%>
- <c:if test=“boolean类型,支持EL表达式”></c: if>
-
c:forEach
- <c:forEach items=“集合,支持EL表达式” var=“集合中的元素” varStatus=“元素状态对象”> ${元素状态对象.count} </c: forEach>
- <c:forEach var=“i” begin=“1” end=“10” step=“2”> ${i} </c: forEach>
<%--核心标签库中的forEach标签--%> <%--var循环中的变量--%> <%--begin开始--%> <%--end结束--%> <%--step步长--%> <%--底层实际上,会将i存储到pageContext域当中--%> <c:forEach var="i" begin="1" end="10" step="1"> ${i}<br> </c:forEach> <%--servlet中的代码--%> <% // 创建List集合 List<Student> 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集合中的元素遍历,输出到浏览器--%> <%--使用core标签库中forEach标签,对List集合进行遍历--%> <%--items是一个集合--%> <%--var后面的名字是随意的,var属性代表的是集合中的每一个元素--%> <%--varStatus这个属性表示var的状态对象.--%> <%--varStatus这个状态对象有count属性。可以直接使用--%> <c:forEach items="${stuList}" var="stu" varStatus="stuStatus"> <%--count属性从1开始,以1递增--%> 编号:${stuStatus.count} id:${stu.id} name:${stu.name}<br> </c:forEach>
-
c:choose c:when c:otherwise
-
<%--注意:这个嵌套结构不能随便改,只能这样写--%> <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>
-
-