1. 程式人生 > >servlet 和 jsp 技術(02)

servlet 和 jsp 技術(02)

五、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)常用的格式化標籤

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 中屬性的新增刪除和替換;
  • 重寫方法形參可以獲得相應的鍵和值;