java程序員第十三課-EL表達式、JSTL標籤庫、EL函數庫、自定義EL函數和自定義標籤

課程回顧:JSP技術、JavaBean技術和EL表達式

JSP的概述

1.JSP的概述
2.JSP的執行的原理
3.JSP的腳本元素
* <%! %>
* <%= %>
* <% %>

4.JSP的註釋
*
* Java
* <%– –%>
JSP的指令

1.作用:設置JSP的屬性,決定JSP執行的。
2.page指令:設置屬性 <%@ page 屬性名稱=屬性值 %>
3.include指令:包含頁面。執行原理:靜態包含:一起翻譯,一起編譯。執行。
4.taglib指令:引入標籤庫
JSP的內置對象

1.9個內置對象。request response session application config out page pageContext exception
2.out對象:輸出內容。和PrintWriter有關係?JspWriter把緩衝區的內容先輸出到response的PrintWriter緩衝區中,由response一起對外響應。
3.pageContext對象
* 域對象 存值和取值
* 一個頂9個 可以獲取其他的8個內置對象 getRequest request response
* 向其他3個域對象中存取值
* findAttribute(“xxx”) 獲取域對象中的值,默認從最小的域中取。
JSP的動作標籤

1.轉發
2.參數
3.動態包含:原理:自己翻譯,自己編譯,自己執行。另外一個的文件翻譯,自己編譯。執行。把執行的結果複製到一起,顯示。
JavaBean的知識

1.JavaBean的規範
* 無參數的構造方法
* 屬性私有
* 提供public 的get或者set方法
* 屬性:由get或者set方法來決定的。
* 作用:封裝數據。
2.JSP中封裝數據
*

3.在Servlet中封裝數據
* 內省的技術來封裝

4.需要使用BeanUtils的工具類來完成數據的封裝。導入jar包。導入2個jar包。
5.使用BeanUtils開發的步驟
* 接收數據
* 創建對象
* 使用BeanUtils.populate(user,map)

6.如果有特殊的數據類型(Date)
* BeanUtils默認不能轉換該類型,需要自己編寫轉換的代碼。
* 編寫一個類實現Converter接口,重寫方法。
* 在封裝數據之前,註冊的代碼編寫。
EL表達式

1.概述和語法
2.獲取域對象中的值。
* 在域對象中存入字符串 msgList {arrs[0]}
* 在域對象中存入Map集合 map.aaaList {uList[0].username}
今天內容:EL表達式、JSTL標籤庫、EL函數庫、自定義EL函數和自定義標籤

EL表達式支持運算

1.EL表達式獲取域對象中的值(重點掌握)
2.EL表達式支持運算(EL提供關鍵字,需要掌握)
* == eq 判斷值是否相等
* != ne 判斷值不相等
* < lt 小於
* > gt 大於
* <= le 小於等於
* >+ ge 大於等於
* && and 與
* || or 或
* ! not 非
* null empty 判斷對象是否爲null或者空
EL表達式獲取WEB常用的對象

1.EL可以獲取哪些WEB常用的對象?
2.這些對象有什麼作用?

3.常見的WEB的對象
* pageScope – 從pageContext域中取值
* requestScope – 從request域中取值
* sessionScope – 從session域中取值
* applicationScope – 從application域中取值
* param – 可以獲取請求的參數的值。相當於request.getParameter(“name”)
* paramValues – 可以獲取請求參數的值。相當於request.getParameterValues(“checkbox”),返回是數組
* header – 獲取請求頭信息(獲取的一個key對應一個value)
* headerValues – 獲取請求頭信息(獲取的一個key對應多個value)
* initParam – 獲取全局的初始化參數
* cookie – 獲取cookie對象的名稱和值
* EL表達式中cookie代表是所有的cookie的對象。想獲取到cookie的名稱爲last的cookie。
* 正確的寫法:cookie.last.namelastcookielast {cookie.last.value} – 或者值

* pageContext           -- 獲取的是JSP頁面上pageContext對象的引用。
    * <a href="${ pageContext.request.contextPath }/cookie1">cookie1</a>

JSTL的標籤庫(重點)

1.概述:在JSP中可以直接使用的JSTL的標籤。
2.HTML的標籤和JSTL的標籤,HTML的標籤使用瀏覽器打開。JSP的JSTL的標籤必須先翻譯,再編譯,再執行。
3.目的:把JSP頁面上的Java代碼替代。
4.JSTL標籤庫的版本
* JSTL1.0的版本(不用),因爲它不支持EL表達式。
* JSTL1.1和JSTL1.2版本,這兩個版本沒什麼區別。支持EL表達式。\

5.下載響應的jar包,導入jar包。
* jstl.jar
* standard.jar

6.JSTL標籤庫的快速入門
* 導入jar包。
* 編寫JSP文件,但是需要在JSP的文件中先引入標籤庫。
* 使用<%@ taglib %>指令引入標籤庫。
out標籤(重點)

1.作用:輸出常量或者輸出域對象中值。
2.語法:
3.屬性:
* value – 輸出的內容(常量或者域對象中值)。
* default – 如果輸出域對象中的屬性不存在,輸出默認值。
* escapeXml – 決定輸出的內容是否轉義。設置成false,不進行轉義。
set標籤(重點)

1.作用:向域對象中存入值。
2.語法:
3.屬性:
* var – 域對象的key值
* value – 域對象中的value值
* scope – 域對象的範圍(值:page request session application)
* target – 目標(規定只能是JavaBean或者Map集合),可以修改JavaBean或者Map集合中的值
* property – 屬性

4.代碼

${ msg }

<h3>修改JavaBean的屬性的值</h3>
${ user.username }
<c:set target="${ user }" property="username" value="小鳳"></c:set>
${ user.username }

remove標籤

1.作用:刪除域對象的屬性和值。
2.語法:
3.屬性:
* var – 要刪除屬性的名稱
* scope – 域的範圍
4.代碼

${ username }

<h3>刪除該屬性</h3>
<c:remove var="username" scope="page" />
<!-- 顯示的是""     傳統方式:null -->
${ username }

catch標籤

1.作用:捕獲異常的信息
2.語法:
3.屬性:
* var – 如果發生了異常,把異常的信息保存到該變量中。
4.代碼:

<%
int a = 10 / 0;
%>

${ e.message }
if標籤(重點)

1.作用:判斷的作用。
2.語法:
3.屬性:
* test – 必須出現的。作用if標籤執行的時候的判斷條件
* var – test執行的結果會保存到該變量中(test執行true或者false)
* scope – 域的範圍
4.代碼:


num=10


flag = true

choose標籤(複合標籤)(重點)

1.作用:進行判斷的作用
2.語法:




3.屬性
* test – 進行判斷使用,返回值是true或者false
4.代碼:



num >10


num <= 10


num是啥?


foreach標籤(重點)

1.作用:用來迭代數據。
2.語法:
3.屬性: 增強for循環 for(String str : list){ } for(User user : list){ }
* var – 相當於str(變量)
* items – 相當於list(要遍歷的集合)

* for(int i=0;i<=10;i++){  }
* var       -- 定義int i
* begin     -- 從哪開始(0,從0開始)
* end       -- 到哪結束(10,到10結束)
* step      -- 步長(i++   step=1)
* varStatus -- 記載迭代產生的信息
    * index     -- 小標值
    * count     -- 計數
    * first     -- 判斷第一個位置是否有元素
    * last      -- 判斷最後的位置是否有元素

4.代碼一

<h3>遍歷數組或者List和Set集合</h3>
<% 
    List<String> sList = new ArrayList<String>();
    sList.add("美美");
    sList.add("尹相傑");
    sList.add("王學兵");
    pageContext.setAttribute("sList", sList);
%>
<c:forEach var="str" items="${ sList }">
    ${ str }
</c:forEach>


<h4>遍歷Map集合</h4>
<%
    Map<String,String> map = new HashMap<String,String>();
    map.put("aaa", "美美");
    map.put("bbb", "小鳳");
    map.put("ccc", "如花");
    pageContext.setAttribute("map", map);
%>
<c:forEach var="entry" items="${ map }">
    ${ entry.key }  -- ${ entry.value }
</c:forEach>


<h4>使用table迭代數據</h4>
<table border="1" width="50%" cellpadding="10">
    <tr>
        <th>序號</th>
        <th>姓名</th>
        <th>密碼</th>
        <th>操作</th>
    </tr>
    <c:forEach var="user" items="${ requestScope.uList }" varStatus="status">
        <tr align="center">
            <td>${ status.count }</td>
            <td>${ user.username }</td>
            <td>${ user.password }</td>
            <td><a href="${ pageContext.request.contextPath }/deleteUser?username=${user.username}">刪除</a></td>
        </tr>
    </c:forEach>
</table>


<h4>從1遍歷到10</h4>
<c:forEach var="i" begin="1" end="10" step="1">
    ${ i }
</c:forEach>


<h4>計算從1加到10的和</h4>
<c:set var="sum" value="0"></c:set>
<c:forEach var="i" begin="1" end="10" step="1">
    <c:set var="sum" value="${ sum + i }" ></c:set>
</c:forEach>
${ sum }


<h4>測試varStatus屬性</h4>
<c:forEach var="i" begin="1" end="10" step="2" varStatus="s">
    ${ i }  --  ${ s.count }
</c:forEach>


<h4>遍歷10到100的偶數,每到第3個數,顯示紅色</h4>
<c:forEach var="i" begin="10" end="100" step="2" varStatus="s">
    <c:choose>
        <c:when test="${ s.first }">
            <font size="5">${ i }</font>
        </c:when>
        <c:when test="${ s.count % 3 eq 0 }">
            <font color="red">${ i }</font>
        </c:when>
        <c:otherwise>
            ${ i }
        </c:otherwise>
    </c:choose>
</c:forEach>

url標籤(重點)

1.作用:前臺頁面編寫超鏈接,或者表單.img的src屬性,可以使用c:url 標籤來編寫地址鏈接。好處:可以省略項目名稱不寫。
2.好處:學session的追蹤。如果使用從標籤,默認幫你進行重寫jsessionid
import標籤

1.作用:使用import標籤可以包含頁面。
redirect標籤

1.作用:重定向的功能
param標籤

1.作用:傳遞參數
forTokens標籤(循環標籤)

1.作用:按着指定的符號切割。
EL函數庫

1.也是JSTL標籤庫提供了一組函數,EL函數庫。使用EL函數可以很方便操作字符串。
2.使用EL函數
* 先導入EL函數庫<%@ taglib prefix=”fn” uri=”http://java.sun.com/jsp/jstl/functions” %>
* 使用EL函數,語法:${fn:xxx}
自定義EL函數

1.需求:傳入字符串,輸出hello xxx
2.開發EL函數的步驟:
* 編寫Java類,提供一個方法,必須是靜態的。必須要有返回值。
package cn.itcast.el;
public class Eldemo {
/**
* sayHello
* @param str
* @return
*/
public static String sayHello(String str){
// 編碼的問題
return “hello “+str;
}
}

* 需要提供配置文件(以.tld結尾的XML的文件)
    * 注意:不能在lib和classes目錄下編寫配置文件
    * 注意:創建配置文件的時候,最低選擇2.0以上版本。
    * xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">

     <!-- 配置自定義的EL函數 -->
     <function>
        <!-- 配置JSP頁面上使用函數的名稱 -->
        <name>sayHi</name>
        <!-- 配置Eldemo的全路徑 -->
        <function-class>cn.itcast.el.Eldemo</function-class>
        <!-- 配置方法的簽名 -->
        <function-signature>java.lang.String sayHello(java.lang.String)</function-signature>
     </function>

* 在JSP的頁面上引入自己編寫的EL函數。<%@ taglib  prefix="myfn" uri="" %>
    ${ myfn:sayHi("小鳳") }

自定義標籤

1.自定義標籤:把邏輯編寫後臺的Java代碼中,給客戶提供的標籤。
2.自定義標籤的執行順序。看圖。
自定義標籤的入門(沒有標籤主體)

1.開發的步驟:
* 編寫Java的類,實現SimpleTag接口,重寫5個方法。SUN公司提供了實現類,繼承該實現類。重寫需要方法。
* 在.tld的文件上編寫配置文件。



print

cn.itcast.jstl.JstlDemo1

empty

3.在JSP頁面上,引入自定義標籤。
<%@ taglib prefix=”myc” uri=”http://www.itcast.cn/0302/myc” %>

2.代碼:
public class JstlDemo1 extends SimpleTagSupport{
private PageContext pc;
private JspFragment jspBody;
/**
* 服務器會默認調用該方法,把PageContext對象傳入進來
*/
public void setJspContext(JspContext pc) {
this.pc = (PageContext) pc;
}
/**
* 把標籤的主體傳入進來
*/
public void setJspBody(JspFragment jspBody) {
this.jspBody = jspBody;
}
/**
* 必須執行該方法
*/
public void doTag() throws JspException, IOException {
pc.getOut().print(“hello”);
}
}
自定義標籤(包含標籤主體)

1.需求:哈哈,把哈哈輸出到客戶端。
2.編寫代碼(注意:輸出標籤主體)
public class JstlDemo2 extends SimpleTagSupport{
private PageContext pc;
private JspFragment jspBody;
/**
* 最終執行
*/
public void doTag() throws JspException, IOException {
// 輸出標籤主體內容
jspBody.invoke(pc.getOut());
}
/**
* JspFragment對象傳入來(JspFragment對象代表就是標籤主體對象)
*/
public void setJspBody(JspFragment jspBody) {
this.jspBody = jspBody;
}
/**
* 把PageContext對象傳入來
*/
public void setJspContext(JspContext pc) {
this.pc = (PageContext)pc;
}
}

3.配置文件

out
cn.itcast.jstl.JstlDemo2
scriptless

4.在JSP頁面使用
自定義標籤(帶有標籤主體和屬性)

1.需求:模擬
2.編寫代碼:
public class JstlDemo3 extends SimpleTagSupport{
private PageContext pc;
private JspFragment jspBody;
// 必須和頁面上屬性test的名稱必須相同
// 必須該屬性的set方法
private boolean test;
public void setTest(boolean test) {
this.test = test;
}
/**
* 輸出標籤主體是有條件的?
*/
public void doTag() throws JspException, IOException {
if(test){
// 輸出標籤主體
jspBody.invoke(pc.getOut());
}
}
public void setJspBody(JspFragment jspBody) {
this.jspBody = jspBody;
}
public void setJspContext(JspContext pc) {
this.pc = (PageContext)pc;
}
}

******* 注意事項:編寫屬性(和頁面標籤的屬性名稱必須相同),提供該屬性的set方法。

3.編寫配置文件

if
cn.itcast.jstl.JstlDemo3
scriptless



test

true

true

boolean

4.在JSP的頁面上使用標籤
<%
request.setAttribute(“num”, 10);
%>

num=10

明天的內容

1.JSP的開發的模式
2.完成註冊和登陸功能。
* 沒有數據庫,使用XML (Dom4j技術)
* 表單的校驗 onsubmit事件(講) ,表單的校驗。
* JSP (EL + JSTL)
* Servlet(request response session cookie(記住用戶名))
* BeanUtils工具類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章