最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • 基于Spring開發(fā)之自定義標(biāo)簽及其解析

    基于Spring開發(fā)之自定義標(biāo)簽及其解析

    Spring框架是現(xiàn)在Java最流行的開源框架之一,需要實現(xiàn)一些自定義的標(biāo)簽,主要是方便使用我們框架的人能夠快速、簡單進(jìn)行配置,有興趣的可以了解一下。
    2017-04-04
  • 老生常談Java中List與ArrayList的區(qū)別

    老生常談Java中List與ArrayList的區(qū)別

    大家都知道List是接口,ArrayList是List接口的一個實現(xiàn)類,接下來通過本文給大家介紹Java中List與ArrayList的區(qū)別,需要的朋友可以參考下
    2022-08-08
  • java支付寶即時到帳提交訂單功能

    java支付寶即時到帳提交訂單功能

    這篇文章主要為大家詳細(xì)介紹了java支付寶即時到帳提交訂單功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 詳解Elasticsearch如何把一個索引變?yōu)橹蛔x

    詳解Elasticsearch如何把一個索引變?yōu)橹蛔x

    這篇文章主要為大家介紹了詳解Elasticsearch如何把一個索引變?yōu)橹蛔x示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java多線程中線程封閉詳解

    java多線程中線程封閉詳解

    在本文里我們給大家分享了關(guān)于java多線程中線程封閉的知識點內(nèi)容以及用法,有需要讀者們可以參考下。
    2019-07-07
  • 一文探索Apache HttpClient如何設(shè)定超時時間

    一文探索Apache HttpClient如何設(shè)定超時時間

    Apache HttpClient是一個流行的Java庫,用于發(fā)送HTTP請求,這篇文章主要為大家介紹了Apache HttpClient如何設(shè)定超時時間,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-10-10
  • 基于java解析JSON的三種方式詳解

    基于java解析JSON的三種方式詳解

    這篇文章主要介紹了基于java解析JSON的三種方式,結(jié)合實例形式詳細(xì)分析了json解析的原理與GSON、FastJSON等常用解析操作技巧,需要的朋友可以參考下
    2016-12-12
  • JAVA自定義注解實現(xiàn)接口/ip限流的示例代碼

    JAVA自定義注解實現(xiàn)接口/ip限流的示例代碼

    本文主要介紹了JAVA自定義注解實現(xiàn)接口/ip限流的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Spring中的@ModelAttribute模型屬性綁定詳解

    Spring中的@ModelAttribute模型屬性綁定詳解

    這篇文章主要介紹了Spring中的@ModelAttribute模型屬性綁定詳解,@ModelAttribute用于將方法參數(shù)或返回值綁定到Model屬性上,并公開給Web視圖,支持使用@RequestMapping注釋的Controller類,需要的朋友可以參考下
    2024-02-02
  • Java 基礎(chǔ)--Arrays工具類詳解

    Java 基礎(chǔ)--Arrays工具類詳解

    這篇文章主要介紹了Java Arrays工具類用法,結(jié)合實例形式分析了java Arrays工具類針對數(shù)組元素修改、復(fù)制、排序等操作使用技巧與相關(guān)注意事項,需要的朋友可以參考下
    2021-09-09

最新評論

长沙县| 绿春县| 共和县| 伊通| 富平县| 林芝县| 麻栗坡县| 枣阳市| 尉氏县| 朝阳市| 科技| 谷城县| 商水县| 镇江市| 富川| 南昌县| 太原市| 龙口市| 麟游县| 法库县| 富顺县| 无为县| 临猗县| 平原县| 吴旗县| 安岳县| 阿拉善右旗| 宁陕县| 株洲市| 安溪县| 徐闻县| 仲巴县| 白河县| 洛阳市| 稷山县| 怀集县| 北川| 县级市| 嘉黎县| 个旧市| 霞浦县|