堆棧(Stack)是一種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),它的特點(diǎn)是后進(jìn)先出(Last In First Out,LIFO)。堆棧類(lèi)似于一個(gè)垂直的堆,數(shù)據(jù)元素只能從堆棧的頂部插入(稱(chēng)為“入棧”),也只能從堆棧的頂部刪除(稱(chēng)為“出棧”)。
堆棧中的插入和刪除操作只能在棧頂進(jìn)行,所以堆棧的插入和刪除操作都是O(1)的時(shí)間復(fù)雜度。堆棧的主要應(yīng)用包括:程序中的函數(shù)調(diào)用棧、表達(dá)式求值、內(nèi)存管理、回溯算法等等。
舉個(gè)例子,假設(shè)有一堆書(shū)需要從地上放到書(shū)架上,為了避免亂放,可以使用一個(gè)箱子作為堆棧,每次只能從箱子的頂部放入一本書(shū),取書(shū)時(shí)也只能從箱子的頂部取書(shū)。這樣,
在 JSP 頁(yè)面中,有一些內(nèi)置對(duì)象可以直接使用,這些內(nèi)置對(duì)象可以為 JSP 開(kāi)發(fā)提供非常有用的功能。以下是 JSP 內(nèi)置對(duì)象的列表:
request:代表客戶(hù)端發(fā)出的請(qǐng)求??梢允褂?request 對(duì)象獲取表單參數(shù)、HTTP 請(qǐng)求頭、客戶(hù)端 IP 等信息。
response:代表服務(wù)器對(duì)客戶(hù)端請(qǐng)求的響應(yīng)??梢允褂?response 對(duì)象設(shè)置響應(yīng)頭、發(fā)送響應(yīng)數(shù)據(jù)等。
session:代表用戶(hù)的會(huì)話(huà),是一種客戶(hù)端狀態(tài)管理機(jī)制??梢允褂?session 對(duì)象存儲(chǔ)和獲取用戶(hù)的數(shù)據(jù)。
application:代表 Web 應(yīng)用程序本身,是一種全局性的狀態(tài)管理機(jī)制。可以使用 application 對(duì)象存儲(chǔ)和獲取應(yīng)用程序的數(shù)據(jù)。
out:代表輸出流對(duì)象,可以使用 out 對(duì)象向客戶(hù)端輸出文本或 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è)面中使用,無(wú)需進(jìn)行初始化或創(chuàng)建??梢酝ㄟ^(guò)在 JSP 頁(yè)面中使用相應(yīng)的名稱(chēng)來(lái)引用這些對(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ì)話(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:代表客戶(hù)端發(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 開(kāi)發(fā),并且提高開(kāi)發(fā)效率。
放入的最后一本書(shū)會(huì)被放在箱子的頂部,取書(shū)時(shí)也會(huì)先取出最后放入的書(shū)。這就是堆棧的基本原理。