欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java的JSTL標(biāo)簽庫詳解

 更新時間:2023年05月17日 08:56:20   作者:@每天都要敲代碼  
JSTL包含用于編寫和開發(fā)JSP頁面的一組標(biāo)準(zhǔn)標(biāo)簽,它可以為用戶提供一個無腳本環(huán)境。在此環(huán)境中,用戶可以使用標(biāo)簽編寫代碼,而無須使用Java腳本

一:深入解析JSTL標(biāo)簽庫 

1、什么是JSTL標(biāo)簽庫

①Java Standard Tag Lib(Java標(biāo)準(zhǔn)的標(biāo)簽庫)。

②JSTL標(biāo)簽庫通常結(jié)合EL表達(dá)式一起使用,目的是讓JSP中的java代碼消失。

③標(biāo)簽是寫在JSP當(dāng)中的,但實際上最終還是要執(zhí)行對應(yīng)的java程序(java程序在jar包當(dāng)中)

2、使用JSTL標(biāo)簽庫的步驟 

第一步:引入JSTL標(biāo)簽庫對應(yīng)的jar包

  • (1)tomcat9之前引入的jar包是:
    • ①taglibs-standard-impl-1.2.5.jar
    • ②taglibs-standard-spec-1.2.5.jar
  • (2)tomcat10之后引入的jar包是:
    • ①jakarta.servlet.jsp.jstl-2.0.0.jar
    • ②jakarta.servlet.jsp.jstl-api-2.0.0.jar
  • (3)在IDEA當(dāng)中怎么引入?
    • ①在WEB-INF下新建lib目錄,然后將jar包拷貝到lib當(dāng)中,選中兩個jar包右擊鼠標(biāo),點擊“Add Lib...”進(jìn)行添加。
    • ②一定是要和mysql的數(shù)據(jù)庫驅(qū)動一樣,都是放在WEB-INF/lib目錄下的。
    • ③什么時候需要將jar包放到WEB-INF/lib目錄下?如果這個jar是tomcat服務(wù)器沒有的。

第二步:在JSP中引入要使用標(biāo)簽庫

①使用taglib指令引入標(biāo)簽庫

②JSTL提供了很多種標(biāo)簽,重點掌握核心標(biāo)簽庫 ://java.sun.com/jsp/jstl/core

③語法格式如下:

prefix="起的名字,核心標(biāo)簽庫,一般默認(rèn)叫做c,可隨意。"

uri=//java.sun.com/jsp/jstl/core 表示使用的是這個庫

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

第三步: 在需要使用標(biāo)簽的位置使用即可

①表面使用的是標(biāo)簽,底層實際上還是java程序 。

②例如:<c:catch></c:catch> 實際上對應(yīng)的就是一個java類。

3、JSTL標(biāo)簽的原理

  • <%@taglib prefix="c" uri="//java.sun.com/jsp/jstl/core" %>以上uri后面的路徑實際上指向了一個xxx.tld文件。鼠標(biāo)停留在路徑上,按ctr鍵就會自動顯示對應(yīng)的xxx.tld文件,例如:C:\Users\86177\IdeaProjects\JavaWeb\jsp\web\WEB-INF\lib\taglibs-standard-impl-1.2.5.jar!\META-INF\c.tld
  • tld文件實際上是一個xml配置文件,在tld文件中描述了“標(biāo)簽”和“java類”之間的關(guān)系。 以上核心標(biāo)簽庫對應(yīng)的tld文件是:c.tld文件。它在taglibs-standard-impl-1.2.5.jar里面META-INF目錄下,有一個c.tld文件。

  •  以里面的catch標(biāo)簽為例,進(jìn)行源碼分析
<tag>
        <description>  對標(biāo)簽的描述
            Catches any Throwable that occurs in its body and optionally
            exposes it.
        </description>
        <name>catch</name> 標(biāo)簽的名字
        <tag-class>
            org.apache.taglibs.standard.tag.common.core.CatchTag
        </tag-class> 標(biāo)簽對應(yīng)的java類
        <body-content>JSP</body-content>標(biāo)簽體當(dāng)中可以出現(xiàn)的內(nèi)容,如果是JSP,就表示標(biāo)簽體中可以出現(xiàn)符合JSP所有語法的代碼。例如EL表達(dá)式(屬于JSP的)。
        <attribute>  屬性
            <description> 對這個屬性的描述
                Name of the exported scoped variable for the
                exception thrown from a nested action. The type of the
                scoped variable is the type of the exception thrown.
            </description>
            <name>var</name> 屬性名
            <required>false</required> false表示該屬性不是必須的。true表示該屬性是必須的。
            <rtexprvalue>false</rtexprvalue> 這個描述說明了該屬性是否支持EL表達(dá)式。false表示不支持。true表示支持EL表達(dá)式。
        </attribute>
    </tag>
  • 所以對于catch標(biāo)簽的語法格式如下:
<c:catch var="">
	JSP....
</c:catch>
  •  以foreach標(biāo)簽進(jìn)行舉例說明,通過源碼分析,發(fā)現(xiàn)foreach標(biāo)簽有一個items屬性,這個屬性是可以指向一個集合的,并且也支持EL表達(dá)式;還有一個var屬性,var后面的名字是隨意的,var屬性代表的是集合中的每一個元素。
  • 所以現(xiàn)在就可以使用EL表達(dá)式來代替我們原來我們用java代碼使用增強for循環(huán)取出數(shù)據(jù)的過程!
<%@ page import="com.bjpowernode.javaweb.jsp.Student" %>
<%@ page import="java.util.*" %>
<%@page contentType="text/html; charset=UTF-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    // 創(chuàng)建List集合
    List<Student> stuList = new ArrayList<>();
    // 創(chuàng)建Student對象
    Student s1 = new Student("110", "經(jīng)常");
    Student s2 = new Student("120", "救護(hù)車");
    Student s3 = new Student("119", "消防車");
    // 添加到List集合中
    stuList.add(s1);
    stuList.add(s2);
    stuList.add(s3);
    // 將list集合存儲到request域當(dāng)中
    request.setAttribute("stuList", stuList);
%>
<%--第一種方式:使用Java代碼,把for循環(huán)拆分了,看起來很詭異--%>
<%
    /// 從域中獲取List集合
    List<Student> stus = (List<Student>)request.getAttribute("stuList");
    // 編寫for循環(huán)遍歷list集合
    for(Student stu: stus){
%>
    id:<%=stu.getId()%>,name:<%=stu.getName()%><br>
<%
    }
%>
<%--第二種方式:使用JSTL標(biāo)簽庫中的forEach標(biāo)簽,非常簡明、美觀--%>
<c:forEach items="${stuList}" var="s">
    id:${s.id},name:${s.name}<br>
</c:forEach>
  • 進(jìn)行測試訪問://localhost:8080/jsp/17.jsp 發(fā)現(xiàn)這兩種方式都能取出數(shù)據(jù)!

4、jstl中的核心標(biāo)簽庫core當(dāng)中常用的標(biāo)簽

(1)if標(biāo)簽

  • ①語法格式:<c:if test=" "></c: if> 。
  • ②test屬性是必須的,test屬性支持EL表達(dá)式;test屬性值只能是boolean類型。
  • ③if標(biāo)簽還有var屬性,不是必須的;v變量中存儲的是test屬性的值。
  • ④還有scope屬性,用來指定var的存儲域,也不是必須的。scope有四個值可選:page(pageContext域)、request(request域)、session(session域)、application(application域)
<%@page contentType="text/html;charset=UTF-8" %>
<%--引入核心標(biāo)簽庫--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--if標(biāo)簽,test屬性是必須的--%>
<c:if test="${empty param.username}">
    <h1>用戶名不能為空</h1>
</c:if>
<c:if test="${not empty param.username}" var="v" scope="request">
    <h1>歡迎${param.username}登錄</h1>
</c:if>
<%--通過EL表達(dá)式將request域當(dāng)中的v取出--%>
${v}

發(fā)送請求//localhost:8080/jsp/18.jsp?????? ,前端沒有傳入username,后端就取不到數(shù)據(jù),調(diào)用隱式對象param.username返回的就是一個false;所以變量v取出來的也就是false

發(fā)送請求//localhost:8080/jsp/18.jsp?username=zhangsan,前端傳入username為張三,后端就能取到數(shù)據(jù),調(diào)用隱式對象param.username返回的就是一個true;所以變量v取出來的也就是true

(2)forEach標(biāo)簽

①<c:forEach var="i" begin="1" end="10" step="2"> ${i} </c: forEach> ;var用來指定循環(huán)中的變量;begin開始;end結(jié)束;step步長。forEach底層實際上會將i存儲到pageContext域當(dāng)中;因為EL表達(dá)式只能從某個域當(dāng)中取數(shù)據(jù)!

<%@ page contentType="text/html;charset=UTF-8"%>
<%--引入核心標(biāo)簽庫--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--forEach底層實際上:會將i存儲到pageContext域當(dāng)中--%>
<c:forEach var="i" begin="1" end="10" step="2">
     <%--所以這里才會使用EL表達(dá)式將其取出,因為EL表達(dá)式只能從某個域當(dāng)中取數(shù)據(jù)--%>
    ${i}&nbsp;
</c:forEach>

執(zhí)行結(jié)果如下:

②varStatus屬性:表示var的狀態(tài)對象,這里是一個java對象,這個java對象代表了var的狀態(tài);并且varStatus這個狀態(tài)對象有count屬性,可以直接使用。

<%@ page import="com.bjpowernode.javaweb.jsp.Student" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8"%>
<%--引入核心標(biāo)簽庫--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    // 創(chuàng)建List集合
    List<Student> stuList = new ArrayList<>();
    // 創(chuàng)建Student對象
    Student s1 = new Student("110", "經(jīng)常");
    Student s2 = new Student("120", "救護(hù)車");
    Student s3 = new Student("119", "消防車");
    // 添加到List集合中
    stuList.add(s1);
    stuList.add(s2);
    stuList.add(s3);
    // 將list集合存儲到request域當(dāng)中
    request.setAttribute("stuList", stuList);
%>
<c:forEach items="${stuList}" var="s" varStatus="stuStatus">
    <%--varStatus的count值從1開始,以1遞增,主要是用于編號/序號。--%>
    編號:${stuStatus.count} &nbsp;,id:${s.id},name:${s.name} <br>
</c:forEach>

執(zhí)行結(jié)果:

(3)choose-when-otherwise

①這實際上是一個嵌套結(jié)構(gòu),語法格式是固定的,不能隨意使用!

<%@page contentType="text/html;charset=UTF-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<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>

執(zhí)行結(jié)果:

到此這篇關(guān)于Java的JSTL標(biāo)簽庫詳解的文章就介紹到這了,更多相關(guān)JSTL標(biāo)簽庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot集成redis實現(xiàn)共享存儲session

    SpringBoot集成redis實現(xiàn)共享存儲session

    這篇文章主要介紹了SpringBoot集成redis實現(xiàn)共享存儲session的流程步驟,文中通過代碼示例介紹的非常詳細(xì),并總結(jié)了一些常見的錯誤及解決方法,需要的朋友可以參考下
    2024-03-03
  • Java 在volatile內(nèi)部調(diào)用接口的方法

    Java 在volatile內(nèi)部調(diào)用接口的方法

    在Java中,volatile?關(guān)鍵字通常用于確保變量的可見性和有序性,而不是用來修飾接口或方法調(diào)用的,這篇文章主要介紹了Java 在volatile內(nèi)部調(diào)用接口的方法,需要的朋友可以參考下
    2024-07-07
  • mybatis查詢返回Map<String,Object>類型的講解

    mybatis查詢返回Map<String,Object>類型的講解

    這篇文章主要介紹了mybatis查詢返回Map<String,Object>類型的講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java取某段/某個時間段的值的方法

    java取某段/某個時間段的值的方法

    這篇文章主要介紹了java取某段/某個時間段的值的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 關(guān)于對Java正則表達(dá)式"\\"的理解

    關(guān)于對Java正則表達(dá)式"\\"的理解

    正則表達(dá)式中,\代表轉(zhuǎn)義字符,通常是轉(zhuǎn)義一些特殊字符,下面這篇文章主要給大家介紹了關(guān)于對Java正則表達(dá)式"\\"的相關(guān)理解,需要的朋友可以參考下
    2022-09-09
  • mybatis中@Param注解總是報取不到參數(shù)問題及解決

    mybatis中@Param注解總是報取不到參數(shù)問題及解決

    這篇文章主要介紹了mybatis中@Param注解總是報取不到參數(shù)問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例

    Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例

    這篇文章主要介紹了Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例,幫助大家更好的理解和學(xué)習(xí)使用Spring Cloud,感興趣的朋友可以了解下
    2021-03-03
  • Java運行時動態(tài)生成類實現(xiàn)過程詳解

    Java運行時動態(tài)生成類實現(xiàn)過程詳解

    這篇文章主要介紹了Java運行時動態(tài)生成類實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • java實現(xiàn)識別二維碼圖片功能方法詳解與實例源碼

    java實現(xiàn)識別二維碼圖片功能方法詳解與實例源碼

    這篇文章主要介紹了java實現(xiàn)識別二維碼圖片,java無法識別二維碼情況下對二維碼圖片調(diào)優(yōu)功能方法與實例源碼,需要的朋友可以參考下
    2022-12-12
  • 解決SpringCloud下spring-boot-maven-plugin插件的打包問題

    解決SpringCloud下spring-boot-maven-plugin插件的打包問題

    這篇文章主要介紹了SpringCloud下spring-boot-maven-plugin插件的打包問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論