什么是內(nèi)置對(duì)象?
?????????在jsp開(kāi)發(fā)中,會(huì)頻繁使用到一些對(duì)象。例如:HttpSession、ServletContext、HttpServletRequest。如果每次使用這些對(duì)象都要?jiǎng)?chuàng)建,就顯得非常麻煩。所以Sun公司設(shè)計(jì)jsp時(shí),在jsp頁(yè)面加載完畢后就會(huì)幫開(kāi)發(fā)者創(chuàng)建這些對(duì)象,而開(kāi)發(fā)者只需要直接使用這些對(duì)象調(diào)用方法即可。這些創(chuàng)建好的對(duì)象就叫內(nèi)置對(duì)象。
9大內(nèi)置對(duì)象
?????????jsp中的9個(gè)內(nèi)置對(duì)象將由容器為用戶進(jìn)行實(shí)例化,用戶直接使用即可。

?????????以上內(nèi)置對(duì)象中常用的是
pageContext、request、response、session、application,掌握了這5個(gè),即可進(jìn)行程序開(kāi)發(fā)。
request內(nèi)置對(duì)象
?????????客戶端的請(qǐng)求被封裝在request對(duì)象中,通過(guò)它可以了解客戶端的請(qǐng)求,然后作出響應(yīng),request請(qǐng)求具有request請(qǐng)求域。
常用方法:
getParameter(String name)
getParamterValues(String name)
setAttribute(String name,Onject o)
getAttribute(string name)
getContetType();
getProtocol()
getServerName();```
###response對(duì)象
response對(duì)象包含了響應(yīng)客戶端請(qǐng)求的有關(guān)信息,它具有頁(yè)面作用域,該頁(yè)面的作用域只對(duì)該頁(yè)面有效。
**常用方法:**
getCharacterEncoding()
setContentType();
getWriter();該方法打應(yīng)輸出流總是前于 out.println();
sendRedirect(String location)```
請(qǐng)求重定向和請(qǐng)求轉(zhuǎn)發(fā):
請(qǐng)求重定向:客戶端行為:response.sendDirect();兩次請(qǐng)求,前一次請(qǐng)求的請(qǐng)求對(duì)象不會(huì)保存,地址欄的url地址會(huì)發(fā)生改變
請(qǐng)求轉(zhuǎn)發(fā):服務(wù)器行為,request.getResuestDispatcher().forward();一次請(qǐng)求,轉(zhuǎn)發(fā)后請(qǐng)求對(duì)象會(huì)保存,地址欄url地址不會(huì)變。
session對(duì)象
?????????session表示客戶端與服務(wù)器的一次會(huì)話
?????????web中session指的是用戶在瀏覽某個(gè)網(wǎng)站,是進(jìn)入網(wǎng)站到關(guān)閉瀏覽器這段時(shí)間
?????????它是保存在服務(wù)器的內(nèi)存中,不同用戶有不同的session
?????????它在第一個(gè)jsp頁(yè)面被裝載時(shí)自動(dòng)創(chuàng)建,完成會(huì)話期管理。
常用方法:
getCreationTime();
String getId();
setAttribute(String name,Object o);
getAttribute(String name);
String[] getValueNames();
int getMaxInactivieInterval();單位 秒
setMaxInactiveInterval();```
**session的生命周期:**
創(chuàng)建: 當(dāng)客戶端第一次訪問(wèn)某個(gè)頁(yè)面jsp或者servlet,服務(wù)器會(huì)創(chuàng)建一個(gè) sessionId,每次客戶端向服務(wù)器發(fā)送請(qǐng)求時(shí),都會(huì)將sessionId攜帶過(guò)去,服務(wù)器會(huì)對(duì)sessionId進(jìn)行校驗(yàn)。
活動(dòng): 當(dāng)客戶端通過(guò)超鏈接打開(kāi)新頁(yè)面屬于同一次會(huì)話;當(dāng)瀏覽頁(yè)面全部關(guān)閉,重新打開(kāi)屬于一次新的會(huì)話。
銷毀:調(diào)用sesson.invalidate();session過(guò)期,默認(rèn)是30分鐘;服務(wù)器重啟;
###application對(duì)象
application實(shí)現(xiàn)了用戶數(shù)據(jù)共享,可存放全局變量。
application 開(kāi)始于服務(wù)器的重啟,終止于服務(wù)器的關(guān)閉
application 是ServletContext實(shí)例。
**常用方法:**
setAttribute(String ,Object);
getAttribute(String);
Enumeration getAttributeNames();
getServerInfo();返回Jsp 引擎名和版本號(hào)
###page對(duì)象
page對(duì)象就是指當(dāng)前jsp頁(yè)面本身,有點(diǎn)像this指針,它是java.lang.Object類的實(shí)例。常用的方法就是Object 類的方法。
getClass()
hashCode();
equals();
copy();
clone()
toString();
notify();
notifyAll();
wait();```
Out內(nèi)置對(duì)象
?????????out對(duì)象類型,JspWriter類,相當(dāng)于帶緩沖的PrintWriter
??????????????????PrintWriter:writer(內(nèi)容)直接向?yàn)g覽器寫(xiě)出內(nèi)容。
??????????????????JspWriter:writer(內(nèi)容)向jsp緩沖區(qū)寫(xiě)出內(nèi)容

pageContext內(nèi)置對(duì)象
?????????jsp的上下文對(duì)象可以獲取其他八個(gè)內(nèi)置對(duì)象
作用:保存數(shù)據(jù)和獲取數(shù)據(jù),用于數(shù)據(jù)之間的共享
獲取數(shù)據(jù)
- 默認(rèn)情況下,從page獲取
pageContext.getAttribute("name")```
2. 可以從四個(gè)域中獲取數(shù)據(jù)
pageContext.getAttribute("name",域范圍常量)
域范圍常量:
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.PAGE_APPLICATION_SCOPE
3. 在四個(gè)域中搜索數(shù)據(jù)
```
PageContext.findAttribute("name");
順序:page域 ->request域 ->session域 ->context(application域)```
**常用方法**
getOut()
geSession();
getPage();
getReuest();
getResponse();
setAttribute();
getAttibute();
getAttributeScope();
forward();
include();```
config對(duì)象
?????????它是在一個(gè)servlet初始化時(shí),jsp頁(yè)面用它傳遞信息,比如servlet初始化參數(shù);以及服務(wù)器的有關(guān)信息。
ServletContext getServletContext();
getInitParameter(String);
Enumeration getInitParameterNames();```
####Jsp中的四個(gè)域?qū)ο?#####域?qū)ο笞饔?1. 保存數(shù)據(jù)和獲取數(shù)據(jù),用于數(shù)據(jù)共享
2. 域?qū)ο蠓椒? ```
setAttribute("name",Object);保存數(shù)據(jù)```
```
getAttribute("name")獲取數(shù)據(jù)```
```
removeAttribute("name")清除數(shù)據(jù)```
3. 域?qū)ο蠓秶? page域:只能在當(dāng)前jsp頁(yè)面中使用
request域:只能在同一個(gè)請(qǐng)求中使用
session:只能在同一個(gè)會(huì)話(session對(duì)象)中使用
context域:只能在同一個(gè)web應(yīng)用中使用
###exception對(duì)象
即異常對(duì)象。如果一個(gè)jsp想要用此對(duì)象,就必須把isErrorPage 設(shè)為true.