整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JSP 標準標簽庫(JSTL)

          JSP 標準標簽庫(JSTL)

          JSP標準標簽庫(JSTL)是一個JSP標簽集合,它封裝了JSP應用的通用核心功能。

          JSTL支持通用的、結構化的任務,比如迭代,條件判斷,XML文檔操作,國際化標簽,SQL標簽。 除了這些,它還提供了一個框架來使用集成JSTL的自定義標簽。

          根據JSTL標簽所提供的功能,可以將其分為5個類別。

          • 核心標簽

          • 格式化標簽

          • SQL 標簽

          • XML 標簽

          • JSTL 函數

          JSTL 庫安裝

          Apache Tomcat安裝JSTL 庫步驟如下:

          從Apache的標準標簽庫中下載的二進包(jakarta-taglibs-standard-current.zip)。

          • 官方下載地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

          • 本站下載地址:jakarta-taglibs-standard-1.1.2.zip

          下載jakarta-taglibs-standard-1.1.2.zip 包并解壓,將jakarta-taglibs-standard-1.1.2/lib/下的兩個jar文件:standard.jar和jstl.jar文件拷貝到/WEB-INF/lib/下。

          接下來我們在 web.xml 文件中添加以下配置:

          <?xml version="1.0" encoding="UTF-8"?><web-app version="2.4"

          xmlns="http://java.sun.com/xml/ns/j2ee"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

          http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

          <jsp-config>

          <taglib>

          <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>

          <taglib-location>/WEB-INF/fmt.tld</taglib-location>

          </taglib>

          <taglib>

          <taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri>

          <taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>

          </taglib>

          <taglib>

          <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>

          <taglib-location>/WEB-INF/c.tld</taglib-location>

          </taglib>

          <taglib>

          <taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri>

          <taglib-location>/WEB-INF/c-rt.tld</taglib-location>

          </taglib>

          <taglib>

          <taglib-uri>http://java.sun.com/jstl/sql</taglib-uri>

          <taglib-location>/WEB-INF/sql.tld</taglib-location>

          </taglib>

          <taglib>

          <taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri>

          <taglib-location>/WEB-INF/sql-rt.tld</taglib-location>

          </taglib>

          <taglib>

          <taglib-uri>http://java.sun.com/jstl/x</taglib-uri>

          <taglib-location>/WEB-INF/x.tld</taglib-location>

          </taglib>

          <taglib>

          <taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri>

          <taglib-location>/WEB-INF/x-rt.tld</taglib-location>

          </taglib>

          </jsp-config></web-app>

          使用任何庫,你必須在每個JSP文件中的頭部包含<taglib>標簽。

          核心標簽

          核心標簽是最常用的JSTL標簽。引用核心標簽庫的語法如下:

          <%@ taglib prefix="c"

          uri="http://java.sun.com/jsp/jstl/core" %>

          標簽描述
          <c:out>用于在JSP中顯示數據,就像<%=... >
          <c:set>用于保存數據
          <c:remove>用于刪除數據
          <c:catch>用來處理產生錯誤的異常狀況,并且將錯誤信息儲存起來
          <c:if>與我們在一般程序中用的if一樣
          <c:choose>本身只當做<c:when>和<c:otherwise>的父標簽
          <c:when><c:choose>的子標簽,用來判斷條件是否成立
          <c:otherwise><c:choose>的子標簽,接在<c:when>標簽后,當<c:when>標簽判斷為false時被執行
          <c:import>檢索一個絕對或相對 URL,然后將其內容暴露給頁面
          <c:forEach>基礎迭代標簽,接受多種集合類型
          <c:forTokens>根據指定的分隔符來分隔內容并迭代輸出
          <c:param>用來給包含或重定向的頁面傳遞參數
          <c:redirect>重定向至一個新的URL.
          <c:url>使用可選的查詢參數來創造一個URL

          格式化標簽

          JSTL格式化標簽用來格式化并輸出文本、日期、時間、數字。引用格式化標簽庫的語法如下:

          <%@ taglib prefix="fmt"

          uri="http://java.sun.com/jsp/jstl/fmt" %>

          標簽描述
          <fmt:formatNumber>使用指定的格式或精度格式化數字
          <fmt:parseNumber>解析一個代表著數字,貨幣或百分比的字符串
          <fmt:formatDate>使用指定的風格或模式格式化日期和時間
          <fmt:parseDate>解析一個代表著日期或時間的字符串
          <fmt:bundle>綁定資源
          <fmt:setLocale>指定地區
          <fmt:setBundle>綁定資源
          <fmt:timeZone>指定時區
          <fmt:setTimeZone>指定時區
          <fmt:message>顯示資源配置文件信息
          <fmt:requestEncoding>設置request的字符編碼

          SQL標簽

          JSTL SQL標簽庫提供了與關系型數據庫(Oracle,MySQL,SQL Server等等)進行交互的標簽。引用SQL標簽庫的語法如下:

          <%@ taglib prefix="sql"

          uri="http://java.sun.com/jsp/jstl/sql" %>

          標簽描述
          <sql:setDataSource>指定數據源
          <sql:query>運行SQL查詢語句
          <sql:update>運行SQL更新語句
          <sql:param>將SQL語句中的參數設為指定值
          <sql:dateParam>將SQL語句中的日期參數設為指定的java.util.Date 對象值
          <sql:transaction>在共享數據庫連接中提供嵌套的數據庫行為元素,將所有語句以一個事務的形式來運行

          XML 標簽

          JSTL XML標簽庫提供了創建和操作XML文檔的標簽。引用XML標簽庫的語法如下:

          <%@ taglib prefix="x"

          uri="http://java.sun.com/jsp/jstl/xml" %>

          在使用xml標簽前,你必須將XML 和 XPath 的相關包拷貝至你的<Tomcat 安裝目錄>\lib下:

          • XercesImpl.jar

            下載地址: http://www.apache.org/dist/xerces/j/

          • xalan.jar

            下載地址: http://xml.apache.org/xalan-j/index.html

          標簽描述
          <x:out>與<%=... >,類似,不過只用于XPath表達式
          <x:parse>解析 XML 數據
          <x:set>設置XPath表達式
          <x:if>判斷XPath表達式,若為真,則執行本體中的內容,否則跳過本體
          <x:forEach>迭代XML文檔中的節點
          <x:choose><x:when>和<x:otherwise>的父標簽
          <x:when><x:choose>的子標簽,用來進行條件判斷
          <x:otherwise><x:choose>的子標簽,當<x:when>判斷為false時被執行
          <x:transform>將XSL轉換應用在XML文檔中
          <x:param>與<x:transform>共同使用,用于設置XSL樣式表

          JSTL函數

          JSTL包含一系列標準函數,大部分是通用的字符串處理函數。引用JSTL函數庫的語法如下:

          <%@ taglib prefix="fn"

          uri="http://java.sun.com/jsp/jstl/functions" %>

          函數描述
          fn:contains()測試輸入的字符串是否包含指定的子串
          fn:containsIgnoreCase()測試輸入的字符串是否包含指定的子串,大小寫不敏感
          fn:endsWith()測試輸入的字符串是否以指定的后綴結尾
          fn:escapeXml()跳過可以作為XML標記的字符
          fn:indexOf()返回指定字符串在輸入字符串中出現的位置
          fn:join()將數組中的元素合成一個字符串然后輸出
          fn:length()返回字符串長度
          fn:replace()將輸入字符串中指定的位置替換為指定的字符串然后返回
          fn:split()將字符串用指定的分隔符分隔然后組成一個子字符串數組并返回
          fn:startsWith()測試輸入字符串是否以指定的前綴開始
          fn:substring()返回字符串的子集
          fn:substringAfter()返回字符串在指定子串之后的子集
          fn:substringBefore()返回字符串在指定子串之前的子集
          fn:toLowerCase()將字符串中的字符轉為小寫
          fn:toUpperCase()將字符串中的字符轉為大寫
          fn:trim()移除首位的空白符

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          本系列文章旨在記錄和總結自己在Java Web開發之路上的知識點、經驗、問題和思考,希望能幫助更多(Java)碼農和想成為(Java)碼農的人。
          

          1. 介紹
          2. JSTL規范下載
          3. JSTL包含哪些庫
          4. JSTL如何使用
          5. 租房網應用中使用JSTL
          6. JSTL相關的JAR包
          7. EL表達式訪問列表的長度
          8. JSTL的forEach標簽
          9. 剩下的頁面改造
          10. 總結

          介紹

          上篇文章我們使用JSP技術對租房網平臺進行了改造,也提到下面這樣的代碼有點奇葩:

          <%for (House house : mockHouses) { 
          	System.out.println(house); %>
          	<li><h2><a href="house-details.jsp?userName=${param.userName}&houseId=<%=house.getId() %>"><%=house.getName() %></a></h2></li>
          <%} %>
          

          像這樣的代碼我們可以使用JSTL技術來解決。當然,JSTL可不僅僅只有這點功能,你還可以定義自己的標簽。

          在這篇文章里,我提到過JSTL是JSP相關的技術,從它的名字全稱(JSP Standard Tag Library,即JSP標準標簽庫)就可以看出來。

          在本篇文章里,我們就嘗試初步使用JSTL來進一步改造我們的租房網應用。

          JSTL規范下載

          既然稱之為庫,那么它包含哪些庫呢?

          我們可以把JSTL規范下載下來看一下,當然你也可以找本相關書籍,或者直接在網上搜索一下。

          JSTL規范的下載類似Servlet規范的下載(可以參考這篇文章),不過我們在JCP官網(https://jcp.org/en/home/index)中搜索的關鍵字就變成Tag或Tag Library了。

          我們在搜索結果中就可以看到:

          點擊 Download page 鏈接可以看到:

          然后繼續點擊底部的 Maintenance Review 2 of JSR 52 鏈接,跳轉到:

          不過,再次點擊DOWNLOAD按鈕時,我這邊出現無法訪問此網站的錯誤。所以我轉而點擊底部的 JSR-000052 A Standard Tag Library for JavaServer Pages Detail Page 鏈接:

          從這里我們可以看到JSTL規范的各個階段,我們選擇 Maintenance Release 2 這個階段,點擊它右邊的 Download page 鏈接:

          然后再點擊紅色箭頭所指的鏈接,跳轉到真正的下載頁面:

          后續操作就跟Servlet規范的下載類似了。

          JSTL包含哪些庫

          現在,我們可以打開JSTL規范,可以看到如下描述:

          事實上,JSTL應該就只是一個庫,但它根據不同功能而劃分成了多個庫:

          • 核心:變量支持、流控制、URL管理等等,它的命名空間URI是:http://java.sun.com/jsp/jstl/core,標簽前綴通常使用:c
          • XML處理:它的命名空間URI是:http://java.sun.com/jsp/jstl/xml,標簽前綴通常使用:x
          • 國際化:語言區域、消息格式化、數字和日期格式化等,它的命名空間URI是:http://java.sun.com/jsp/jstl/fmt,標簽前綴通常使用:fmt
          • 數據庫訪問(SQL):它的命名空間URI是:http://java.sun.com/jsp/jstl/sql,標簽前綴通常使用:sql
          • 函數:集合長度、字符串操作等,它的命名空間URI是:http://java.sun.com/jsp/jstl/functions,標簽前綴通常使用:fn

          JSTL如何使用

          JSTL的終極目標是簡化JSP頁面的開發,所以,它應該是在JSP頁面中使用。

          既然是標簽,那它的使用是否跟HTML標簽、XML標簽類似呢?答案是肯定的。

          不過,JSTL標簽的使用與XML標簽使用時聲明命名空間類似,也需要告訴Servlet/JSP容器該JSP頁面需要引入某個庫(即上述的核心、XML處理、國際化、數據庫訪問、函數等等,以及以后自定義的標簽)。

          在JSP頁面中是使用一個JSP指令(即taglib指令,之前我們用過page指令)來聲明的:

          <%@ taglib uri="uri" prefix="prefix" %>
          

          舉個例子,假設我們要使用JSTL的核心庫,則應該在JSP頁面的開頭處這樣聲明:

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

          然后,就可以使用核心庫的標簽,比如out標簽:

          <c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/>
          <c:out value="value" [escapeXml="{true|false}"]>
           default value
          </c:out>
          

          注意:在標簽的語法中,[]表示可選的屬性。如果值帶下劃線,則表示為默認值。

          out標簽有兩種形式,有屬性和屬性值,也可能有標簽內容,跟HTML標簽和XML標簽類似。

          租房網應用中使用JSTL

          我們就拿租房網應用中的房源列表頁面houses.jsp來使用JSTL改造,因為這里涉及列表數據的展示。

          列表數據是很常見的,我們經常可以看到包含列表數據的頁面,比如訂單列表、商品列表等等。

          houses.jsp原來的代碼是這樣的:

          <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
          <%@ include file="include.jsp"%>
          <%
          	List<House> mockHouses=(List<House>) request.getAttribute("mockHouses");
          	System.out.println(mockHouses);
          %>
          <h6>共找到你感興趣的房源 <%=mockHouses.size() %> 條</h6>
          <ul>
          <%for (House house : mockHouses) { 
          	System.out.println(house); %>
          	<li><h2><a href="house-details.jsp?userName=${param.userName}&houseId=<%=house.getId() %>"><%=house.getName() %></a></h2></li>
          <%} %>
          </ul>
          </body>
          </html>
          

          首先要引入JSTL中的核心庫(因為我們后面要用到的forEach標簽是屬于核心庫的):

          <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
          <%@ include file="include.jsp"%>
          <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
          

          遺憾的是,我們添加這句聲明之后,Eclipse就報錯了:

          提示是說找不到這個標簽庫的描述符。那就根據這個提示在網上搜索答案唄。

          答案就是原來我們還需要在我們的工程結構里配置JSTL相關的JAR包,而Tomcat這個Servlet/JSP容器本身不提供這些JSTL相關的JAR包,我們需要單獨下載。

          JSTL相關的JAR包

          那么在哪里下載呢?既然我們是使用Tomcat這個Servlet/JSP容器,那么我們就可以到它的官網(http://tomcat.apache.org/)上看看:

          我們可以看到左側導航欄中有個Taglibs鏈接,我們點進去看看:

          還真就是JSTL相關JAR包的下載頁面,點擊Download鏈接進去,可以找到真正的下載鏈接:

          我們可以看下Binary README文件,里面有該JAR包版本支持的Tomcat和JSP等版本信息,如果我們使用的Tomcat是最新版本(9.0.x),那直接下載下面四個JAR包即可,否則需要點進Archives頁面下載歷史版本。

          好,我們把四個JAR包下載下來之后,就可以添加到我們的租房網應用的工程里面了,可以參考這篇文章。

          實際上,直接把這四個JAR包拷貝到WebContent/WEB-INF/lib節點下是最快的。

          現在,我們可以看到上述的Eclipse報錯提示就消失了。

          EL表達式訪問列表的長度

          首先,我們可以使用EL表達式來訪問列表的長度:

          <h6>共找到你感興趣的房源 ${mockHouses.size()} 條</h6>
          

          據說低版本的JSP容器不可以這樣直接用EL表達式來訪問列表的長度,而應該使用JSTL的函數庫中的length方法:

          ${fn:length(list) }
          

          當然,首先需要引入JSTL的函數庫。讀者朋友可以自行嘗試一下。

          JSTL的forEach標簽

          我們可以通過JSTL規范查看一下這個forEach標簽的用法:

          當然,可能只看這個語法格式還是不太明白如何使用,那么可以繼續看規范中的描述,或者直接網上搜索即可。

          我們需要改造的代碼是這一部分:

          <%for (House house : mockHouses) { 
          	System.out.println(house); %>
          	<li><h2><a href="house-details.jsp?userName=${param.userName}&houseId=<%=house.getId() %>"><%=house.getName() %></a></h2></li>
          <%} %>
          

          我們可以先把它注釋掉(在Eclipse中可以選中這一段,然后鍵入Ctrl + Shift + /),然后敲入開始標簽的左尖括號 < ,于是Eclipse會出現智能提示:

          嗯,這個功能還是挺好用的,提高開發效率。

          閑話不多說了,直接上代碼:

          <c:forEach var="house" items="${mockHouses}">
          	<li><h2><a href="house-details.jsp?userName=${param.userName}&houseId=${house.id}">${house.name}</a></h2></li>
          </c:forEach>
          

          看似跟之前變化不大,但至少沒那么奇葩了,風格也與HTML很一致。

          forEach標簽遍歷列表數據的基本屬性是:

          • var:相當于定義一個變量來表示指向列表中的某一項;
          • items:指定需要遍歷哪個列表,需要注意的是其值又是使用EL表達式來訪問頁面/請求/會話/應用中的某個屬性數據(即使用setAttribute()添加的對象)

          forEach標簽的內容就可以是普通的HTML標簽了,然后HTML標簽里我們就可以使用EL表達式來訪問列表中每一項數據。

          實際上,EL表達式直接訪問對象的屬性,而非調用對象的方法,比如:

          ${house.id}
          

          注意,param是EL的隱式對象,它是由Servlet/JSP容器創建并傳進來的,它可以直接訪問請求所攜帶的參數。

          所以,我們實際上可以把原來的這一部分:

          <%
          	List<House> mockHouses=(List<House>) request.getAttribute("mockHouses");
          	System.out.println(mockHouses);
          %>
          

          刪除掉。

          現在houses.jsp的代碼就變成這樣了:

          <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
          <%@ include file="include.jsp"%>
          <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
          <h6>共找到你感興趣的房源 ${mockHouses.size()} 條</h6>
          <ul>
          <c:forEach var="house" items="${mockHouses}">
          	<li><h2><a href="house-details.jsp?userName=${param.userName}&houseId=${house.id}">${house.name}</a></h2></li>
          </c:forEach>
          </ul>
          </body>
          </html>
          

          是不是清晰明朗了許多?

          當然,JSP頁面的開發者必須知道傳進這個頁面的到底有哪些數據對象!

          沒錯,這就相當于把數據的展示(視圖層)給分離開來,你需要與后端(控制器層和模型層)約定/設計好每一個JSP頁面都有哪些數據對象。

          然后,JSP頁面的開發者和后端(控制器層和模型層)的開發者就可以各自獨立去開發了。

          剩下的頁面改造

          剩下的house-details.jsp和house-form.jsp該如何改造呢?大家可以先思考一下。

          提示:JSP頁面應該只關心取數據展示,而不應該關心如何查找到某個數據這種邏輯,應該把這種邏輯放到后端(控制器層和模型層)。

          我的改造是這樣的,把原來這兩個頁面的如何查找到某個數據這種邏輯放到Filter中,前后端約定好這兩個頁面中存在target這個House對象,于是doFilter()方法中在將請求交給下個節點之前應該掛載上target這個House對象:

          		if (userName==null || userName.isEmpty()) {
          			System.out.println("invalid user!");
          			httpServletResponse.sendRedirect("login.html");
          		} else {
          			String houseId=httpServletRequest.getParameter("houseId");
          			if (houseId !=null && !houseId.trim().isEmpty()) {
          				House target=findHouseById(houseId);//找不到怎么辦?
          				httpServletRequest.setAttribute("target", target);
          			}
          			chain.doFilter(request, response);
          		}
          

          另外,應該把如何查找某個房源的邏輯封裝起來:

          	private House findHouseById(String houseId) {
          		for (House house : mockHouses) {
          			if (houseId.equals(house.getId())) {
          				return house;
          			}
          		}
          		return null;
          	}
          

          然后,這兩個頁面就極其簡單了,house-details.jsp是這樣的:

          <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
          <%@ include file="include.jsp"%>
          <h2>${target.name}<a href="house-form.jsp?userName=${param.userName}&houseId=${target.id}">編輯</a></h2>
          <h3>${target.detail}</h3>
          <h4><a href="houses.jsp?userName=${param.userName}">回到列表</a></h4>
          </body>
          </html>
          

          house-form.jsp是這樣的:

          <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
          <%@ include file="include.jsp"%>
          <form action="house-form.servlet" method="post">
          <input type="hidden" name="userName" value="${param.userName}"/>
          <input type="hidden" name="houseId" value="${target.id}"/>
          <label for="house_name">房源名字:</label><input type="text" id="house_name" name="houseName" value="${target.name}" />
          <label for="house_detail">房源詳細信息:</label><input type="text" id="house_detail" name="houseDetail" value="${target.detail}" />
          <input type="submit" value="提交" />
          </form>
          </body>
          </html>
          

          可以看到,這兩個頁面只是取數據(target這個House對象)展示而已。

          總結

          • JSTL的終極目標是簡化JSP開發;
          • JSTL的使用需要先聲明某個庫;
          • JSTL的標簽使用類似HTML標簽和XML標簽,語法規則可以查看JSTL規范;
          • JSP頁面使用JSTL和EL表達式基本可以實現大部分功能;
          • EL表達式能夠直接訪問頁面/請求/會話/應用這幾個對象中掛載(即setAttribute()方法)的數據對象;
          • EL表達式使用 ${ } ;
          • EL中存在隱式對象,以后再介紹;
          • 列表數據很常見很重要;
          • 列表數據采用JSTL的forEach標簽來遍歷(實際上也可以采用EL表達式,比如${mockHouses[i].id});
          • 前后端開發的分離:前端只關心取數據如何展示;后端關心如何取數據并掛載到頁面/請求/會話/應用這幾個對象中;
          • 前后端需約定/設計好數據;

          《大數據和人工智能交流》頭條號向廣大初學者新增C 、Java 、Python 、Scala、javascript 等目前流行的計算機、大數據編程語言,希望大家以后關注本頭條號更多的內容。


          JSP的標簽

          一、輸出數據標簽

          (1)bean類

          package com;

          public class User {

          private String name;

          private String sid;

          public String getName() {

          return name;

          }

          public void setName(String name) {

          this.name=name;

          }

          public String getSid() {

          return sid;

          }

          public void setSid(String sid) {

          this.sid=sid;

          }

          }

          (2)servlet控制

          package com;

          import java.io.IOException;

          import javax.servlet.ServletException;

          import javax.servlet.http.HttpServlet;

          import javax.servlet.http.HttpServletRequest;

          import javax.servlet.http.HttpServletResponse;

          public class DemoServlet extends HttpServlet {

          public void doGet(HttpServletRequest request, HttpServletResponse response)

          throws ServletException, IOException {

          User user=new User();

          //注意要加set方法

          user.setName("zhangsan");

          request.setAttribute("user", user);

          request.getRequestDispatcher("/test.jsp").forward(request, response);

          }

          }

          (3)test.jsp頁面

          <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

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

          <c:out value="${user.name}"/>

          二、循環標簽

          循環標簽比較復雜

          【1】循環list數據,并且list里面數據為基本數據類型

          (1)servlet

          package com;

          import java.io.IOException;

          import java.util.ArrayList;

          import java.util.List;

          import javax.servlet.ServletException;

          import javax.servlet.http.HttpServlet;

          import javax.servlet.http.HttpServletRequest;

          import javax.servlet.http.HttpServletResponse;

          public class DemoServlet extends HttpServlet {

          public void doGet(HttpServletRequest request, HttpServletResponse response)

          throws ServletException, IOException {

          List list=new ArrayList();

          list.add("aaa");

          list.add("bbb");

          list.add("ccc");

          request.setAttribute("list", list);

          request.getRequestDispatcher("/test.jsp").forward(request, response);

          }

          }

          (2)test.jsp頁面

          <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

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

          <c:forEach items="${list}" var="data" varStatus="id" begin="0">

          ${id.index } <c:out value="${data}"/><br/>

          </c:forEach>

          【2】循環list數據,并且list里面數據為引用數據類型

          (1)User實體類

          package com;

          public class User {

          private String name;

          private String sid;

          public String getName() {

          return name;

          }

          public void setName(String name) {

          this.name=name;

          }

          public String getSid() {

          return sid;

          }

          public void setSid(String sid) {

          this.sid=sid;

          }

          }

          (2)servlet

          package com;

          import java.io.IOException;

          import java.util.ArrayList;

          import java.util.List;

          import javax.servlet.ServletException;

          import javax.servlet.http.HttpServlet;

          import javax.servlet.http.HttpServletRequest;

          import javax.servlet.http.HttpServletResponse;

          public class DemoServlet extends HttpServlet {

          public void doGet(HttpServletRequest request, HttpServletResponse response)

          throws ServletException, IOException {

          List list=new ArrayList();

          User user1=new User();

          user1.setName("zhaoyan1");

          User user2=new User();

          user2.setName("zhaoyan2");

          User user3=new User();

          user3.setName("zhaoyan3");

          list.add(user1);

          list.add(user2);

          list.add(user3);

          request.setAttribute("list", list);

          request.getRequestDispatcher("/test.jsp").forward(request, response);

          }

          }

          (3)test.jsp頁面

          <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

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

          <c:forEach items="${list}" var="data" varStatus="id" begin="0">

          ${id.index } <c:out value="${data.name}"/><br/>

          </c:forEach>

          三、頁面之間數據傳遞

          (1)index.jsp頁面

          <%@ page language="java" pageEncoding="GBK"%>

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

          <html>

          <head>

          <title>測試<c:url>標簽</title>

          </head>

          <body>

          <c:url value="deal.jsp" var="url" scope="session">

          <c:param name="user" value="mr"/>

          </c:url>

          <a href="${url}">提交</a>

          </body>

          </html>

          (2)deal.jsp頁面

          <%@ page language="java" pageEncoding="GBK"%>

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

          <html>

          <head>

          <title>測試<c:url>標簽</title>

          </head>

          <body>

          傳遞的參數:${param.user}

          </body>

          </html>

          四、if判斷語句

          (1)User.java實體bean

          package com;

          public class User {

          private String name;

          private String sid;

          public String getName() {

          return name;

          }

          public void setName(String name) {

          this.name=name;

          }

          public String getSid() {

          return sid;

          }

          public void setSid(String sid) {

          this.sid=sid;

          }

          }

          (2)servlet

          package com;

          import java.io.IOException;

          import java.util.ArrayList;

          import java.util.List;

          import javax.servlet.ServletException;

          import javax.servlet.http.HttpServlet;

          import javax.servlet.http.HttpServletRequest;

          import javax.servlet.http.HttpServletResponse;

          public class DemoServlet extends HttpServlet {

          public void doGet(HttpServletRequest request, HttpServletResponse response)

          throws ServletException, IOException {

          List list=new ArrayList();

          User user1=new User();

          user1.setName("zhaoyan1");

          User user2=new User();

          user2.setName("zhaoyan2");

          User user3=new User();

          user3.setName("zhaoyan3");

          list.add(user1);

          list.add(user2);

          list.add(user3);

          request.setAttribute("list", list);

          request.getRequestDispatcher("/test.jsp").forward(request, response);

          }

          }

          (3)test.jsp文件

          <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

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

          <c:forEach items="${list}" var="data" varStatus="id" begin="0">

          ${id.index } <c:if test="${data.name=='zhaoyan2'}">趙燕222!! </c:if><br/>

          </c:forEach>


          《大數據和人工智能交流》的宗旨

          1、將大數據和人工智能的專業數學:概率數理統計、線性代數、決策論、優化論、博弈論等數學模型變得通俗易懂。

          2、將大數據和人工智能的專業涉及到的數據結構和算法:分類、聚類 、回歸算法、概率等算法變得通俗易懂。

          3、最新的高科技動態:數據采集方面的智能傳感器技術;醫療大數據智能決策分析;物聯網智慧城市等等。

          根據初學者需要會有C語言、Java語言、Python語言、Scala函數式等目前主流計算機語言。

          根據讀者的需要有和人工智能相關的計算機科學與技術、電子技術、芯片技術等基礎學科通俗易懂的文章。


          主站蜘蛛池模板: 国内精品一区二区三区东京| 无码国产精成人午夜视频一区二区| 国产午夜毛片一区二区三区| 久久久久人妻精品一区三寸| 亚洲色无码一区二区三区| 国产精品第一区揄拍无码| 一区二区传媒有限公司| 一区二区三区观看免费中文视频在线播放 | 亚洲AV无码一区二区二三区入口| 国产福利一区二区精品秒拍| 亚洲精品伦理熟女国产一区二区| 3d动漫精品啪啪一区二区中文| 国产在线精品一区二区在线观看| 久久国产高清一区二区三区| 精品成人一区二区三区四区| 欧洲精品码一区二区三区免费看| 精品人妻一区二区三区四区在线| 韩国女主播一区二区| 国产凸凹视频一区二区| 精品国产日韩亚洲一区91| 精品人妻无码一区二区色欲产成人| 99精品一区二区三区无码吞精| 日本激情一区二区三区| 无码人妻啪啪一区二区| 日韩精品一区二区三区中文3d| 一区一区三区产品乱码| 精品国产AV一区二区三区| 国内精品一区二区三区在线观看| 亚洲福利视频一区| 国产一区二区免费视频| 无码一区二区三区AV免费| 亚洲AV成人一区二区三区观看| 无码日韩精品一区二区三区免费| 香蕉视频一区二区| 中文字幕一区二区三区四区 | 亚洲色无码一区二区三区| 日本一区二区高清不卡| 日本人的色道www免费一区| 一区一区三区产品乱码| 在线播放偷拍一区精品| 亚洲一区在线观看视频|