servlet 和 jsp 技術(02)
阿新 • • 發佈:2018-11-28
五、AJAX技術
1、ajax的概念和作用
(1)概念:非同步的 xml 和 js;
(2)作用:區域性刷新技術;
(3)原理:
- 通過 xhr 物件傳送請求,響應並不直接給到瀏覽器而是給 xhr 物件,最後通過 js 操作 dom 來動態重新整理區域性;
2、使用
(1)基本流程
- 獲取 xhr 物件(相容問題)
- 獲得連線
- 傳送請求
- 獲得響應並解析
- ajax 狀態碼判斷(0、1、2、3、4)
- 響應狀態碼判斷(200、404、500)
(2)非同步和同步
- 預設非同步(非同步並行,同步等待)
(3)請求方式:get、post
- get:直接在URL 後面拼接請求的引數即可;
- post:
ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
ajax.send('name=jack&age=998');
(4)響應的資料格式
- 字串
- xml:try it
- 一般用於配置檔案,前後端的資料的互動一般通過 jsp 過渡;
- servlet 的響應的型別和 jsp 的型別都要改成 xml;
- 資料的獲取的方法是 ajax.responseXml,xml 中資料獲取實際上就是 dom 操作;
- json:
- 輕量級,可以js 無縫互動,現在的前後端的資料的互動一般都用他;
- servlet 中可以用 Gson 或 fastjson 將java 物件轉成 json 的字串;
- 前端的資料的獲取需要用到js 的eval函式,具體的用法如下;
eval('(' + jsonstr + ')')
(5)ajax 的封裝:程式碼見前端 js ajax 部分
六、EL表示式
1、概述
(1)作用域中取值的普通方法:
- getAttribute------強轉------get;
(2)上面方法存在的問題:
- 多次的 get ;
- 多次的強轉;
- 需要導包;
2、EL 表示式的使用
(1)作用域取值
- jsp 和 servlet 的4個作用域物件:request、session、pageContext、application;
- 作用域中取集合物件:
- list:${鍵名[index]}
- map:${鍵名.map中存的鍵名}
- 預設查詢順序:pageContext-----request------session--------application(小到大)
- 指定查詢:pageScope | requestScope | sessionScope | applicationScope.鍵名
(2)請求資料獲取(請求引數、頭和cookie)
- param.keyname(返回值);
- paramvalues.keyname(返回一個數組);
- ###請求頭和 cookie 資料獲取###
(3)做運算
- 算術運算:加減乘除(注意加號只能做加法不能進行字串的連線);
- 關係運算:大小比較;
- 邏輯運算:與或非;
(4)空值判斷
- 語法:${empty 鍵名}
- 判斷鍵名物件是否有資料;
- User 物件不為空,屬性有預設值;
- 加一個 not 可以做非空的判斷;
七、JSTL標籤庫
1、jstl概述
- 中文 java 標準標籤庫,是一種標籤語言,是對 el 表示式的拓展;
- el 表示式負責從域中取值,jstl 負責做邏輯的處理;
- 二者配合使用能最大限度減少 jsp 中 java 程式碼的書寫;
2、核心標籤庫
(1)前提:
- 匯入相應的 jar 包;
- jsp 檔案開頭用 taglib 指令引入
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
(2)<c:out >標籤
- 結合 el 可從域中取值,值也可以是常量,好處就是能設定預設值
- 語法
<c:out value="el or string" default="default value"></c:out>
(3)<c:set>標籤
- 存值到域中,可以指定域
- 語法
<c:set var="key" value="value" scope="page"></c:set>
(4)<c:remove>
- 刪除域中的值;
- 預設刪除全部域中能匹配上的值;
- 可以指定域中的值刪除
- 語法:
<c:remove var="key" scope="page"/>
(5)<c:if>----單分支判斷
<c:if test="${ aa>3 }"></c:if>
- 其中的 aa 只能是從作用域中取值
(6)<c:choose>----多分枝判斷
<c:choose>
<c:when test="${ aa>3 }"></c:when>
<c:otherwise></c:otherwise>
</c:choose>
(7) <c:foreach>
1、說明:
- vs 變數是存在作用域中的,要用 el 來取;
- vs 變數封裝的是每次迴圈的角標、計數、是否第一次迴圈、是否最後一次迴圈等資訊;
- 動態迴圈類似於 java 中的增強 for;
3、格式化標籤庫
(1)使用的前提:導包加 taglib 引入
(2)常用的格式化標籤
- 格式化日期:<fmt:formatDate>
- 格式化數字:<fmt:formatNumber>
- 將字串解析為日期物件:<fmt:parseDate>
- 編碼設定:<fmt:requestEncoding>
4、練習:資訊管理系統修改
八、過濾器
1、概述
(1)作用:對請求和響應做預處理;對 servlet 進行防護;
2、使用
(1)步驟:
- 寫一個類實現 filter 介面;
- 重寫三個方法:init、dofilter、destroy;
- 配置 web xml ;
(2) 注意:
- url pattern 的3種寫法:
- /* --------攔截所有;
- *.do --------攔截以.do結尾的請求,一般用於模組攔截;
- /ts --------攔截特定的 servlet 的訪問;
- 多個過濾器構成鏈式,執行範圍大的,最後執行範圍小的(具體的執行順序?);
- 三個方法的執行的時機:
- init 方法在伺服器啟動的時候執行;
- destroy關閉的時候執行;
- doFilter 方法在請求和響應的時候執行;
- Filter 的生命週期:伴隨伺服器的啟停;
- 執行過程:request----url----web xml----Filter----Filter----servlet-----Filter-----browser
3、Filter 應用案例
(1)統一編碼設定
(2)session 管理:下面的程式碼在 doFilter 方法中
九、監聽器
1、概述
(1)作用:用於監聽request、session、sevletContext三個作用域物件的建立、銷燬和內容改變
(1)使用:
- 寫一個實現相應的 listener;
- 重寫相應的方法;
- 在 web xml 中進行配置;
2、監聽 request
(1)servletRequestListener:
- 監聽request的建立和銷燬;
- 重寫方法的形參可以獲得 request 物件;
(2)servletRequestAttributeListener:
- 監聽 request 中屬性的新增刪除和替換;
- 重寫方法形參可以獲得相應的鍵和值;
3、監聽 session
(1)httpSessionListener:
- 監聽 session 的建立和銷燬;
- 重寫方法的形參可以獲得 session 物件;
(2)httpSessionAttributeListener:
- 監聽 session 中屬性的新增刪除和替換;
- 重寫方法形參可以獲得相應的鍵和值;
(3)應用:統計網站的線上人數 try it
4、監聽 servletContext
(1)servletContextListener:
- 監聽 servletContext 的建立和銷燬;
- 重寫方法的形參可以獲得 servletContext 物件;
(2)servletContextAttributeListener:
- 監聽 servletContext 中屬性的新增刪除和替換;
- 重寫方法形參可以獲得相應的鍵和值;