1. 程式人生 > >Jsp學習總結(二)

Jsp學習總結(二)

font 返回 dir ica 兩種方法 http 形參 狀態信息 string


Jsp腳本中的9大內置對象(都是_jspService()方法中的形參,或者是局部變量):
application:對應javax.servlet.ServletContext實例,代表jsp所屬的web應用本身,用於jsp頁面或者Servlet之間交換信息

config:對應javax.servlet.ServletConfig實例,代表Jsp的配置信息,(這玩意基本用不到)

exception:對應java.lang.Throwable實例,代表其他頁面的錯誤信息和異常,只有page編譯指令中的isErrorPage為true時
該對象才能用



out:對應javax.servlet.jsp.JspWriter實例,代表jsp頁面的輸出流,用於輸出頁面內容,形成HTML頁面

page:代表該頁面本身,沒有什麽雞用(主要就是Servlet中的this)

pageContext:對應javax.servlet.jsp.PageContext實例,代表jsp頁面上下文,可以訪問頁面中的共享內容

request:對應javax.servlet.http.HttpServletRequest實例,該對象封裝了一次請求,客戶端的請求參數都被封裝到這裏
這玩意太重要了,一般獲取客戶端的請求參數都必須使用該對象


response:對應javax.servlet.http.HttpServletResponse實例,代表服務器對客戶端的響應,一般很少使用這個來輸出響應
內容,輸出內容還是out比較好,這個對象一般都用在重定向

session:對應javax.servlet.http.HttpSession實例,代表一次對話。當客戶端瀏覽器與服務器連接時,會話開始
當客戶端關閉瀏覽器的時候,會話結束。


application對象(代表Web應用本身):
在整個Web應用的多個jsp,Servlet之間共享數據
訪問Web應用的配置參數

在web.xml使用context-param配置參數(他有兩個子元素)
param-name:配置Web參數名
param-value:配置Web參數值

config對象:
代表當前jsp配置信息
主要方法:getServletName() 返回的都是jsp

exception對象:
代表jsp標本中產生的錯誤和異常,是jsp頁面異常的一部分。
當然page編譯指令中isErrorPage要為true

pageContext對象:
代表頁面的上下文,主要訪問的jsp之間的共享數據。就是可以訪問那四個範圍內的變量

getAttribute(String name):獲取page範圍內的name屬性
getAttribute(String name,int scope):獲取指定範圍內的name屬性值
PageContext.PAGE_SCOPE:對應page範圍
PageContext.REQUEST_SCOPE:對應request範圍
PageContext.SESSION_SCOPE:對應session範圍
PageContext.APPLICATION_SCOPE:對應application範圍

當然這些範圍對setAttribute()方法同樣適用。

4個生存範圍對應的整型變量:
1:對應page生存範圍
2:對應request生存範圍
3:對應session生存範圍
4:對應application生存範圍


request對象(重點):
獲取請求參數的重要途徑。可代表本次請求範圍,還可用於操作request範圍的屬性

客戶端發送請求參數的兩種情況:
GET方式的請求:也是默認form請求,一般來說創書的數據量較小,而且對於一些重要信息來說,安全性不是很高
POST方式的請求:大多說用於提交表單,數據傳送量比較大,安全性比較高,信息都被封裝起來了。

獲取請求頭信息:
Enumeration<String> headerNames = request.getHeaderNames();

while(headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
//獲取每個請求的值
out.println(headerName + "-->" + request.getHeader(headerName) + "<br/>");
}

操作request範圍的屬性:
setAttribute(String attName,Object attValue):attValue設置為request的範圍
Object getAttribute(String attName):獲取request範圍的屬性

執行forward和include:
request.getRequestDispatcher(String path),path就是希望forward和include的目標路徑
該對象提供兩種方法:
forward(request,response);執行forward
include(request,response);執行include
如:
request.getRequestDispatcher("/a.jsp").include(request,response);
request.getRequestDispatcher("/a.jsp").forward(request,response);
註意:
使用request的getRequestDispatcher(String path)方法時,該path字符串必須以斜線開頭


response對象:
代表客戶端的響應,一般都是輸出一些比較猥瑣的內容,比如位圖,PDF文檔等,還可以使用response來重定向,以及向客戶端增加Cookie

作用:
1、response響應生成非字符響應(getOutputStream()該方法返回響應輸出字節流)
2、重定向
與forward不同的是,重定向會丟失所有的請求參數和request範圍的屬性,因為重定向將生成第二次請求,與前一次的請求不在同一個request範圍內,左移發送一次的請求參數和request範圍內的屬性全部丟失。
重定向會丟失所有的請求參數,使用重定向動作時,地址欄URL會變成重定向目標的URL

語法:response.senRedirect("path");

註意:
重定向會丟失所有的請求參數,使用重定向的效果,與在地址欄裏重新輸入新地址在按回車的效果是一樣的,即發送了第二次請求。


forwrad(轉發)和redirect(重定向)對比:
1、前者執行之後還是上一次請求,後者生成了第二次請求。
2、前者的目標頁面可以訪問原請求的請求參數,因為依然是一次請求,請求參數和request的範圍內的屬性全部都在。後者不能訪問原來的請求參
數,因為這是第二次請求,原請求的請求參數和request範圍內的屬性全部丟失
3、前者請求的URL不會改變,後者變為重定向的目標URL,就是URl會改變。


Cookie和Session強行分析:
Cookie用於網站記錄客戶的某些信息,下一次登錄就可以獲取客戶的相關信息

Cookie和session的不同在於:
前者會跟隨瀏覽器的關閉而失效,後者會一直存放在客戶端機器上,除非超過了Cookie生命期限,或者你手動的清除Cookie記錄

增加Cookie也是使用response內置對象完成(void addCookie(Cookie cookie)來增加Cookie)
步驟如下:
創建Cookie實例對象,Cookie的構造器Cookie(String name,String value)
設置Cookie的生命期限,就是該Cookie在多長時間內有效
向客戶端寫Cookie

註意:
使用Cookie對象必須設置他的生命期限,否則Cookie將會跟隨瀏覽器的關閉而自動關閉。
如果需要Cookie為中文,就要借助java.net.URLEncoder先對中文字符串進項編碼。

Session對象:
代表一次用戶會話(從瀏覽器連接服務器開始,到瀏覽器和服務器斷開為之,這是一次會話)
通常用於跟蹤用戶的會話信息,如判斷用戶是否登錄,購物車跟蹤用戶購買商品等

session對象是HttpSession的實例,下面是兩個常用的方法:
setAttribute(string)

註意:
session機制通常用於保存客戶端的狀態信息,這些信息需要保存在web服務器的硬盤上,所以要求session裏的屬性值
是可序列化的,否則將會引起不可序列化的異常。而且通常只把用戶會話相關的信息放在session範圍內,不要僅僅為了連個頁面交換信息
隨意的把信息放在信息內。這樣不好,這樣有瑕疵,這樣很鐵頭娃。


沒錯,我就是鐵頭娃。



Jsp學習總結(二)