1. 程式人生 > >02.JSP內置對象

02.JSP內置對象

ttr 訪問 是否 http 3-9 eth num 虛擬路徑 path

一、內置對象:不再由用戶進行實例化而可以直接使用的對象,一共九種,一定要清楚的記住每種內置對象的類型,以方便查詢文檔。

技術分享

二、四種屬性保存範圍

1, 屬性保存範圍:指一個設置的對象,可以經過多少個其他的頁面後仍然可以訪問的保存範圍。

2, 四種屬性範圍:

A,page範圍,由pageContext對象完成,只能在一個頁面中保存屬,跳轉之後無效

B,request範圍,只在一次請求中保存,服務器跳轉之後依然有效(客戶端跳轉無效)

C,session範圍,在一次會話範圍中,無論何種跳轉都可以使用,而且從跳轉之後的頁面新開一個頁面也可以使用,但是新開的瀏覽器無法使用訪問跳轉後的頁面無法使用。對於服務器而言,每一個連接到它的客戶端都是一個session

D,application範圍,在整個服務器保存,所有用戶都可以使用。屬性設置後,無論如何跳轉,無論是否是新開的瀏覽器,都可以訪問。

特別註意:A,四種屬性設置優先性,page>request>session>application,範圍越窄,服務器壓力越小

B,可以通過pageContext設置四種屬性範圍

3, 屬性設置方法:每種屬性都有以下三種方法

技術分享

範例:page:只能在本頁面使用設置的屬性

技術分享

request:可以在服務器跳轉之後的頁面訪問設置的屬性,而且具有傳遞性

技術分享

session:在一個頁面設置的屬性,可以被同一會話的其他跳轉頁面使用

application:在一個頁面中設置的屬性,可以在服務器未關閉期間,被其他跳轉頁面,或者新打開的瀏覽器頁面使用

4,通過pageContext設置四種屬性範圍:

pageContext.setAttribute(String name,Object value,int scope),其中scope取四種常量PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE,APPLICATION_SCOPE分別表示設置四種屬性範圍

對應的,取得不同屬性也需要設置scope值:pageContext.setAtttribute(String name,int scope)

三、request對象

1, 作用:主要用來接收客戶端(或其他頁面)發送來的請求消息,如請求的參數,發送的頭信息。

request是javax.servlet.http.HttpServletRequest接口的實例化對象,表示此對象主要應用在http協議上。HttpServletRequest接口的父接口ServletRequset卻只有HttpServletRequest一個子接口,不將其合並成一個接口,是為從長遠考慮,因為現在主要使用的是http協議,說不定以後會出現其他協議,這樣新的協議可以直接繼承ServletRequest接口

2, 參數傳遞

a, request的所有方法都是圍繞如何接收參數及頭信息,接受的參數包括表單提交過來的文本,密碼,單選框,復選框,其中復選框需要以數組的形式接收,public String[] request.getParameters(“***”)

b,地址重寫的方式傳遞參數:在一個jsp頁面的url路徑後面添加 ?param1=value1&param2=value2…..即可向該頁面傳遞參數

技術分享

c, 表單提交時,method的post與get方式的區別:

post方式:提交後的地址欄為目標地址,且只能用於表單提交

get方式:提交後的地址欄變成目標頁面地址,且會以地址重寫的方式顯示,則傳遞時肯定會受到地址欄長度的限制

技術分享

且get方式要求表單數據必須是ASCIll字符

點擊刷新,post會重新提交數據,get無影響;且post方式比get方式安全性高。

總結:get是向服務器索取數據的一種請求,查詢鍵值對是通過請求的URL發送的;post是向服務器提交數據的一種請求,查詢鍵值對是通過請求的HTTP消息主體中發送的

d,獲取所有參數名稱:Enumeration getParameterNames(),返回Enumeration對象,可用nextElement()逐個獲取參數

技術分享

3, 顯示頭信息

頭信息:在請求和回應中包含的其他信息,如客戶端IP,Cookie,語言等。請求頭信息可以用request的Enumeration getHeaderNames()和request.getHeader方法取得頭信息名及內容

技術分享

技術分享

4, 其他操作

通過request對象可以取得客戶端的IP地址,請求方式,訪問的路徑,上下文路徑名稱等

技術分享

直接打開jsp屬於get請求方式

上下文路徑名稱很重要,可以取得項目根路徑,通過它方便的訪問同一項目中其他文件夾中的內容

5, 總結

技術分享

getAttirbute與getParameter的區別:

技術分享

四、response對象

1, 功能:主要用於服務器回應客戶端請求。是HttpServletResponse接口的實例,同request類似,HttpServletResponse的父接口ServletResponse也只有一個子接口

2, 方法:

技術分享

設置頭信息

定時刷新:技術分享

定時跳轉:技術分享

這種跳轉只有在服務器處理後才有效果,當頁面跳轉之後,如果直接後退,沒經過服務器處理,則不會跳轉

html本身有設置頭信息的功能:技術分享

通過設置頭信息的定時跳轉屬於客戶端跳轉,地址欄會改變

頁面跳轉

技術分享 也屬於客戶端跳轉

小結:客戶端跳轉也服務器端跳轉區別

服務器端跳轉:地址欄不變,可以傳遞request屬性,屬於無條件跳轉,跳轉後面的語句不再執行,所以如果有用JDBC連接數據庫的話,必須在服務器跳轉之前關閉。<jsp:forward page=””/>

客戶端跳轉:地址欄改變,不能傳遞request屬性,跳轉後面的語句將繼續執行。

服務器跳轉是客戶端發送一個jsp或Servlet資源請求,這個資源又將請求轉到另一個服務器資源,然後才響應客戶端,即一次請求,一次響應

客戶端跳轉是客戶端發送一個資源請求,服務器響應,客戶端再根據這個響應中URL地址,再發送一次請求,然後服務器再次響應即兩次請求,兩次響應

服務器跳轉:

  1. <jsp:forward page=””/>
  2. pageContext.forward()
  3. request.getRequestDispatcher(“1.jsp”).forward(request,response)

客戶端跳轉:

  1. 鏈接跳轉:<a href=””></a>
  2. 表單提交
  3. 重定向Response.sendRedirect(“”)
  4. 設置頭信息定時跳轉,包括response.setHeader()和html自帶設置頭信息功能

Cookie:瀏覽器提供的一種技術,可以讓一些服務器端程序或者在客戶端進行處理的數據,放在瀏覽器本地計算機中,不需通過網絡傳輸,可以提高網頁處理效率,減少服務器負載

設置並保存Cookie: 一個Cookie是由name跟value組成,setMaxAge()用於設置Cookie保存時間,不設置的話,一 個Cookie默認是暫時保存在瀏覽器上,關閉瀏覽器之後,Cookie消失。運行此jsp,則將c1,c2保存在客戶端。

技術分享

在另外一個頁面取得Cookie:

技術分享

技術分享

註意:通過request對象取得Cookie;Cookie本身是存在安全隱患的

五、session對象

1,session id:對於每一個用戶,其實就表示一個session,服務器靠session id 來區分這些用戶。即每一個通過瀏覽器連接到服務器的用戶都會由服務器分配一個不會重復的編號

技術分享

技術分享通過pageContext操縱對內置對象方法

jsp頁面運行時,會自動的設置一個Cookie,那個Cookie也即用戶的session id

服務器關閉後,會重新分配session id

2,登陸驗證及註銷:驗證是否登陸或是否處於登陸狀態

技術分享

原理:用戶登錄成功,則設置一個標誌session屬性,並跳轉至welcome.jsp,在整個會話期間,這個屬性一直有效,用戶可以在不關閉瀏覽器且不註銷的前提下,重復多次訪問welcome.jsp而不需再次登陸驗證。如果用戶未登錄,或關閉瀏覽器,或註銷登陸,則標誌session屬性無效或會失效,此時如果直接訪問welcome.jsp則會提示未登錄。原理可參照淘寶網登陸註銷及訪問規則。

Login.jsp

技術分享

註意,表單的提交頁面為頁面本身,如果登陸成功,則將loginState設置為標誌屬性有效,表示可以訪問welcome頁。

welcome.jsp:

技術分享

如果登陸成功,則在整個會話期間(不關閉瀏覽器,不註銷)則session屬性loginState一直有效,可以重復多次直接訪問welcome頁而不用再次登陸驗證

logout.jsp:

技術分享

註銷session屬性,並跳轉至登陸頁,此時session屬性失效,無法直接訪問welcome頁

技術分享

3,判斷是否是新用戶

技術分享

一次會話中,如果第一次打開此jsp頁面,則顯示歡迎新用戶光臨,否則顯示你已經是老用戶了

六、application對象

1, application是javax.servlet.ServletContext接口的實例化對象,代表整個Servlet上下文

2, 方法

技術分享

當然,application也有自己setAttribute(),getAttribute(),removeAttribute()等屬性方法

取得虛擬路徑名稱

技術分享

技術分享

技術分享

技術分享

在jsp中,有一個方法的功能可以與之完全對應:getServletContext()方法

String url1= getServletContext().getRealPath(“/”)或者String url2=this. getServletContext().getRealPath(“/”)都能取得虛擬目錄的絕對路徑。現在一般重點使用getServletContext()方法

七、web安全性與config對象

1, 將jsp資源保存在WEB-INF文件夾中是最安全的,但是必須通過映射路徑才可以訪問

2, 通過config對象可以取得初始化的配置參數

八、pageContext對象

1,pageContext對象是javax.servlet.jsp.PageContext類的實例,主要表示一個jsp頁面的上下文,幾乎可以操作所有的的內置對象

2,主要方法

技術分享

跳轉、包含、取得配置對象,和四種屬性範圍對象

跳轉的同時,傳遞參數:

技術分享

操作內置對象對象:

技術分享

技術分享

02.JSP內置對象