1、JSTL標(biāo)簽庫概述
-
JSP標(biāo)準(zhǔn)標(biāo)簽庫尝抖。
* 作用:和EL表達(dá)式一起 取代<% %>
* 版本:1.0 1.1和1.2(區(qū)別不大)
* 【1.0EL表達(dá)式?jīng)]有納入規(guī)范】
* 1.1和1.2EL表達(dá)式納入規(guī)范* 下載jar包毡们,導(dǎo)入到工程中 jstl.jar standard.jar * 標(biāo)簽庫 c.tld 核心的標(biāo)簽庫 fn.tld EL表達(dá)式標(biāo)簽庫
JSTL的快速入門
* 導(dǎo)入相應(yīng)jar包。
* 新建JSP的文件昧辽,引入標(biāo)簽庫
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
* 直接使用標(biāo)簽庫
2衙熔、 JSTL的標(biāo)簽---輸出的內(nèi)容都是已經(jīng)存在于某個域中的。
-
<c:out> 輸出內(nèi)容
value :輸出的內(nèi)容(常量或者變量)
default :默認(rèn)值
escapeXml:默認(rèn)是true奴迅,進(jìn)行轉(zhuǎn)義青责,設(shè)置成false,不轉(zhuǎn)義取具。代碼: <c:out value="Hello"></c:out> <c:out value="${name }"></c:out> <!-- "" --> <c:out value="${ city }" default="北京"></c:out> <c:out value="<a href='#'>超鏈接</a>" escapeXml="false"/>--此時就可正常顯示為一個超鏈接脖隶,而非字符串。
-
<c:set>
* 屬性
var :定義屬性
value :存入的值
scope :域范圍target :修改JavaBean對象 property:修改的屬性 * 向4個web域?qū)ο蟠嫒胫? <c:set var="i" value="10" scope="request" ></c:set> * 修改JavaBean對象屬性的值 <c:set target="${ user }" property="username" value="小鳳"></c:set>
-
<c:remove>
* 屬性
var :刪除的屬性
scope :在域的范圍* 代碼 <c:set var="name" value="小鳳" scope="page"></c:set> ${ name } <c:remove var="name" scope="page"/> ${name }
<c:catch>
* 屬性:var 把異常的信息保存變量中
* 代碼
<c:catch var="e">
<%
int a = 10/0;
%>
</c:catch>
${ e.message }-
<c:if> 沒有<c:else>標(biāo)簽
* 屬性
* test 判斷的條件
* var 計算的結(jié)果保存到變量中
* scope 域的范圍* 代碼 <c:set var="i" value="10" scope="page"></c:set> <c:if test="${ i ge 10 }" var="x" scope="page"> i >= 10 </c:if> <c:if test="${ i lt 10 }"> i < 10 </c:if> ${ x }
-
<c:choose>標(biāo)簽暇检,必須和以下標(biāo)簽同時用产阱。如果當(dāng)。块仆。构蹬。時,否則當(dāng)悔据。庄敛。時。
<c:when>
<c:otherwise>代碼: <c:set var="i" value="10" scope="page"></c:set> <c:choose> <c:when test="${ i ge 10 }"> i >= 10 </c:when> <c:when test="${ i lt 10 }"> i < 10 </c:when> <c:otherwise> 其他 </c:otherwise> </c:choose>
-
<c:forEach>(*****)
* 循環(huán)遍歷數(shù)據(jù)(數(shù)組科汗,集合藻烤,Map集合)
* 屬性
var :遍歷數(shù)據(jù)的類型
items :要遍歷的內(nèi)容begin :從哪開始 end :到哪結(jié)束 step :步長 varStatus:記錄循環(huán)遍歷的信息 * index * count(常用) * first * last * 代碼 <% String [] arrs = {"美美","小鳳","芙蓉","小蒼"}; request.setAttribute("arrs", arrs); %> <!-- for(String s : arrs){ } --> <c:forEach var="s" items="${ arrs }"> ${ s } </c:forEach> <h4>遍歷集合</h4> <% List<String> list = new ArrayList<String>(); list.add("美美"); list.add("小鳳"); list.add("芙蓉"); list.add("小澤"); request.setAttribute("list", list); %> <c:forEach var="s" items="${ list }"> ${ s } </c:forEach> <h4>遍歷Map集合</h4> <% Map<String,String> map = new HashMap<String,String>(); map.put("aa", "美美"); map.put("bb", "小鳳"); map.put("cc", "芙蓉"); request.setAttribute("map", map); %> <c:forEach var="entry" items="${ map }">--entry可以隨意寫。 ${ entry.key } -- ${ entry.value } </c:forEach> <h4>遍歷對象的集合</h4> <% List<User> uList = new ArrayList<User>(); uList.add(new User("美美","123")); uList.add(new User("小風(fēng)","234")); uList.add(new User("芙蓉","345")); request.setAttribute("uList", uList); %> <c:forEach var="user" items="${ uList }"> ${ user.username } -- ${ user.password } </c:forEach> <h4>迭代數(shù)據(jù)</h4> <h4>迭代從1到10</h4> <c:forEach var="i" begin="1" end="10" step="2"> ${ i } </c:forEach> <h4>計算從1加到100的和</h4> <c:set var="sum" value="0" scope="page"></c:set> <c:forEach var="i" begin="1" end="100" step="1"> <c:set var="sum" value="${ sum + i }"></c:set> </c:forEach> ${ sum } <h4>遍歷10到100的偶數(shù),每到第3個數(shù)怖亭,顯示紅色</h4> <c:forEach var="i" begin="10" end="100" step="2" varStatus="status"> <c:choose> <c:when test="${ status.first }"> <font color="blue">${ i }</font> </c:when> <c:when test="${ status.count % 3 eq 0 }"> <font color="red">${ i }</font> </c:when> <c:otherwise> ${ i } </c:otherwise> </c:choose> </c:forEach>
<c:param> 傳遞參數(shù)--與import涎显、redirect等結(jié)合使用,
* 屬性
name :參數(shù)名稱
value :參數(shù)的值-
<c:import> 包含頁面
* url :引入頁面的地址
* context :虛擬路徑
* var :引入頁面保存到屬性中--指的是頁面中的內(nèi)容
* scope :域的范圍* 代碼 <c:import url="/jstl/choose.jsp" context="/day13" var="i" scope="page"> <c:param name="username" value="meimei"></c:param> 可在包含的choose頁面中接收該參數(shù) </c:import> ${ i }
-
<c:url>
<c:url>標(biāo)簽用于在JSP頁面中構(gòu)造一個URL地址兴猩,其主要目的是實現(xiàn)URL重寫期吓。
URL重寫就是將會話標(biāo)識號以參數(shù)形式附加在URL地址后面,如cookie被禁用時的追蹤技術(shù):
http://localhost/day12/demo?jsessionid=xxxxxxxxxxxxxxxxxx;* 屬性 * var :聲明屬性 * value :地址 * scope :域范圍-可選 * context :虛擬路徑-可選 * 代碼 <c:url var="i" value="/jstl/choose.jsp" scope="request" context="/day13"> <c:param name="username" value="xiaofeng"></c:param> </c:url> <a href="${ i }">choose</a>
<c:redirect>重定向
* 屬性
* url :重定向的地址
* context :虛擬路徑
* 代碼
<c:redirect url="/jstl/choose.jsp" context="/day13">
<c:param name="username" value="furong"></c:param>
</c:redirect><c:forTokens>分隔字符串(了解)
<h4>分隔字符串</h4>
<c:set var="i" value="aa,bb,cc" scope="page"></c:set>
<c:forTokens items="${i }" delims="," var="x">
${ x }
</c:forTokens>
3倾芝、* EL函數(shù)(操作字符串的)
-
自定義EL函數(shù)(入門)
* 編寫一個類讨勤,方法必須是【靜態(tài)】方法。
* 在【W(wǎng)EB-INF目錄】下創(chuàng)建tld的文件晨另,配置悬襟。
* 選擇2.0* 完成配置 <!-- 配置自定義的EL函數(shù) --> <function> <!-- 配置方法名稱 --> <name>【sayHi】</name> <!-- 方法所在的類 --> <function-class>cn.itcast.el.ElDemo1</function-class> <!-- 配置方法的簽名 --> <function-signature>java.lang.String sayHello(java.lang.String)</function-signature> 即 返回值的類型 【方法名】(參數(shù)類型) </function>
-
自定義標(biāo)簽
* 實現(xiàn)SimpleTag接口
* 編寫一個類,繼承SimpleTagSupport類拯刁。
* 重寫5個方法
* void setJspContext(JspContext pc)
* void setParent(JspTag parent)
* void setJspBody(JspFragment jspBody)
* void doTag()* JspTag getParent()
快速入門的步驟(自定義沒有標(biāo)簽體的標(biāo)簽)
* 編寫一個類,繼承SimpleTagSupport逝段。
* 選擇重寫的方法垛玻,doTag()必須有的。
* 需要配置
<tag>
<name>print</name>
<tag-class>cn.itcast.tag.TagDemo1</tag-class>
<body-content>empty</body-content>
</tag>
* 在JSP頁面上奶躯,引入標(biāo)簽庫
<%@ taglib uri="http://www.itcast.cn/1110/myc" prefix="myc" %>
* 使用標(biāo)簽了帚桩。-
帶有標(biāo)簽主體的標(biāo)簽
* 編寫類,繼承SimpleTagSupport嘹黔。
* 重寫doTag()
* 獲取標(biāo)簽主體對象
JspFragment jf = getJspBody();
jf.invoke(null);
* 配置
<tag>
<name>out</name>
<tag-class>cn.itcast.tag.TagDemo2</tag-class>
<body-content>scriptless</body-content>
</tag><body-content>元素的可選值有: empty:不能有標(biāo)簽體內(nèi)容账嚎。 JSP:標(biāo)簽體內(nèi)容可以是任何東西:EL、JSTL儡蔓、<%=%>郭蕉、<%%>,以及html喂江;但不建議使用Java代碼段召锈,SimpleTag已經(jīng)不再支持使用<body-content>JSP</body-content>; scriptless:標(biāo)簽體內(nèi)容不能是Java代碼段获询,但可以是EL涨岁、JSTL等; tagdependent:標(biāo)簽體內(nèi)容不做運(yùn)算吉嚣,由標(biāo)簽處理類自行處理梢薪,無論標(biāo)簽體內(nèi)容是EL、JSP尝哆、JSTL秉撇,都不會做運(yùn)算。
帶有屬性的標(biāo)簽
* * 編寫類,繼承SimpleTagSupport畜疾。
* 重寫doTag()
* 編寫一個屬性赴邻,屬性必須和標(biāo)簽中的屬性是相同
* 提供set方法
* 獲取標(biāo)簽主體對象
JspFragment jf = getJspBody();
jf.invoke(null);
* 配置
<tag>
<name>if</name>
<tag-class>cn.itcast.tag.TagDemo3</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>test</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>boolean</type>
</attribute>
</tag>JSP開發(fā)的模式(MVC),一種分層思想
-
完成注冊的需求
* 注冊表單(案例) * 數(shù)據(jù)庫(沒有) * 使用xml來代替啡捶。 * 架構(gòu) Servlet + JSP + JavaBean * 技術(shù) * 解析XML使用DOM4J技術(shù) * Servlet技術(shù) * BeanUtils技術(shù) * JSTL+EL表達(dá)式 * 創(chuàng)建新的項目 * 導(dǎo)入jar包 * 創(chuàng)建包結(jié)構(gòu) * 開發(fā)的步驟 * 編寫注冊的頁面姥敛, 用戶名,密碼瞎暑,確認(rèn)密碼彤敛,別名,郵箱了赌,驗證碼 * 先完成數(shù)據(jù)的校驗 onsubmit() * 都不能為空墨榄,密碼和確認(rèn)密碼一致 * 郵箱格式正確(正則表達(dá)式) * 發(fā)送請求,請求Servlet勿她,接收數(shù)據(jù)袄秩,封裝,處理數(shù)據(jù) * 顯示到JSP上逢并。
- 課程回顧:
完成注冊和登陸的功能之剧。
-
準(zhǔn)備的工作
- 技術(shù)、開源jar包
開發(fā)的功能使用MVC模式
-
C:控制層(接收請求和從客戶端發(fā)送過來的參數(shù))
- 接收參數(shù)(request對象)
- 為了操作方便(封裝數(shù)據(jù)砍聊,內(nèi)省背稼,BeanUtils開源的工具)
- 自己new User(); user.setXXX數(shù)據(jù)
- 完成業(yè)務(wù)邏輯的代碼(不推薦寫在Servlet) new UserService();
- 接收結(jié)果,通過結(jié)果把顯示的數(shù)據(jù)發(fā)送給JSP玻蝌。(把結(jié)果存入域?qū)ο螅?/li>
-
M:模型層(JavaBean封裝數(shù)據(jù)蟹肘,其他JavaBean處理業(yè)務(wù))
- 處理業(yè)務(wù)邏輯根據(jù)注冊的功能。(用戶名不能重名俯树,郵箱不能重名)
- 需要把結(jié)果返回去帘腹。
-
V:視圖層(完成數(shù)據(jù)的顯示)
- 到JSP的頁面,通過EL表達(dá)式取域的值许饿。