当前位置: 首页 > 图灵资讯 > 技术篇> 深度解析JSTL标签库

深度解析JSTL标签库

来源:图灵教育
时间:2023-06-04 09:15:56

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>

上一篇:

javassist动态生成类

下一篇:

EL表达式2