堆棧(Stack)是一種常見的數(shù)據(jù)結(jié)構(gòu),它的特點(diǎn)是后進(jìn)先出(Last In First Out,LIFO)。堆棧類似于一個(gè)垂直的堆,數(shù)據(jù)元素只能從堆棧的頂部插入(稱為“入棧”),也只能從堆棧的頂部刪除(稱為“出棧”)。
堆棧中的插入和刪除操作只能在棧頂進(jìn)行,所以堆棧的插入和刪除操作都是O(1)的時(shí)間復(fù)雜度。堆棧的主要應(yīng)用包括:程序中的函數(shù)調(diào)用棧、表達(dá)式求值、內(nèi)存管理、回溯算法等等。
舉個(gè)例子,假設(shè)有一堆書需要從地上放到書架上,為了避免亂放,可以使用一個(gè)箱子作為堆棧,每次只能從箱子的頂部放入一本書,取書時(shí)也只能從箱子的頂部取書。這樣,
在 JSP 頁(yè)面中,有一些內(nèi)置對(duì)象可以直接使用,這些內(nèi)置對(duì)象可以為 JSP 開發(fā)提供非常有用的功能。以下是 JSP 內(nèi)置對(duì)象的列表:
request:代表客戶端發(fā)出的請(qǐng)求??梢允褂?request 對(duì)象獲取表單參數(shù)、HTTP 請(qǐng)求頭、客戶端 IP 等信息。
response:代表服務(wù)器對(duì)客戶端請(qǐng)求的響應(yīng)??梢允褂?response 對(duì)象設(shè)置響應(yīng)頭、發(fā)送響應(yīng)數(shù)據(jù)等。
session:代表用戶的會(huì)話,是一種客戶端狀態(tài)管理機(jī)制。可以使用 session 對(duì)象存儲(chǔ)和獲取用戶的數(shù)據(jù)。
application:代表 Web 應(yīng)用程序本身,是一種全局性的狀態(tài)管理機(jī)制??梢允褂?application 對(duì)象存儲(chǔ)和獲取應(yīng)用程序的數(shù)據(jù)。
out:代表輸出流對(duì)象,可以使用 out 對(duì)象向客戶端輸出文本或 HTML 等格式的數(shù)據(jù)。
pageContext:代表 JSP 頁(yè)面的上下文,是所有內(nèi)置對(duì)象的根對(duì)象,可以使用 pageContext 對(duì)象獲取其他內(nèi)置對(duì)象。
config:代表 Servlet 配置信息,可以使用 config 對(duì)象獲取 Servlet 初始化參數(shù)。
exception:代表 JSP 頁(yè)面的異常對(duì)象,可以使用 exception 對(duì)象獲取 JSP 頁(yè)面拋出的異常信息。
page:代表當(dāng)前 JSP 頁(yè)面本身,可以使用 page 對(duì)象獲取當(dāng)前頁(yè)面的 URL 等信息。
這些內(nèi)置對(duì)象可以直接在 JSP 頁(yè)面中使用,無需進(jìn)行初始化或創(chuàng)建??梢酝ㄟ^在 JSP 頁(yè)面中使用相應(yīng)的名稱來引用這些對(duì)象。例如,使用 request 對(duì)象獲取表單參數(shù)的代碼如下所示:
<%
String username = request.getParameter("username");
%>
還有一些其他的內(nèi)置對(duì)象,例如:
pageScope:代表 JSP 頁(yè)面的 PageContext 域,可以使用 pageScope 對(duì)象存儲(chǔ)和獲取頁(yè)面范圍內(nèi)的數(shù)據(jù)。
requestScope:代表 Request 域,可以使用 requestScope 對(duì)象存儲(chǔ)和獲取請(qǐng)求范圍內(nèi)的數(shù)據(jù)。
sessionScope:代表 Session 域,可以使用 sessionScope 對(duì)象存儲(chǔ)和獲取會(huì)話范圍內(nèi)的數(shù)據(jù)。
applicationScope:代表 Application 域,可以使用 applicationScope 對(duì)象存儲(chǔ)和獲取應(yīng)用程序范圍內(nèi)的數(shù)據(jù)。
param:代表請(qǐng)求參數(shù),可以使用 param 對(duì)象獲取請(qǐng)求參數(shù)的值。
paramValues:代表請(qǐng)求參數(shù)的數(shù)組,可以使用 paramValues 對(duì)象獲取請(qǐng)求參數(shù)的多個(gè)值。
header:代表 HTTP 請(qǐng)求頭,可以使用 header 對(duì)象獲取請(qǐng)求頭的值。
headerValues:代表 HTTP 請(qǐng)求頭的數(shù)組,可以使用 headerValues 對(duì)象獲取請(qǐng)求頭的多個(gè)值。
cookie:代表客戶端發(fā)送的 Cookie,可以使用 cookie 對(duì)象獲取 Cookie 的值。
initParam:代表 Servlet 初始化參數(shù),可以使用 initParam 對(duì)象獲取 Servlet 的初始化參數(shù)。
這些內(nèi)置對(duì)象都是由 JSP 容器自動(dòng)創(chuàng)建和管理的,可以在 JSP 頁(yè)面中直接使用。使用內(nèi)置對(duì)象可以簡(jiǎn)化 JSP 開發(fā),并且提高開發(fā)效率。
放入的最后一本書會(huì)被放在箱子的頂部,取書時(shí)也會(huì)先取出最后放入的書。這就是堆棧的基本原理。