JSP內(nèi)置對象
JSP內(nèi)置對象是Web容器創(chuàng)建的一組對象,不使用new關(guān)鍵字就可以使用的內(nèi)置對象,一共有9種內(nèi)置對象,
分別為:out 亮曹、 request 、 response 秘症、 session 照卦、 applicationPage 、 pageContext 乡摹、 exception 役耕、 config
其中常用的有:out 、 request 聪廉、 response 瞬痘、 session 故慈、 application
不太常用的對象:Page 、 pageContext 框全、 exception 察绷、 config
1.out對象
out對象是JspWriter類的實例,是向客戶端(這里指瀏覽器)輸出內(nèi)容的常用對象津辩。
常用方法
· void println()向客戶端打印字符
· void clear()清除緩沖區(qū)的內(nèi)容拆撼。如果在flush之后調(diào)用,會拋出異常
· void clearBuffer() 也是清除緩沖區(qū)內(nèi)容喘沿,但在flush之后不會拋出異常
· void flush()將緩沖區(qū)內(nèi)容輸出到客戶端
· int getRemaining()返回緩沖區(qū)還剩余多少可用
· int getBufferSize()返回緩沖區(qū)的大姓⒍取(字節(jié)數(shù)),如不設(shè)緩沖區(qū)則為0
· boolean isAutoFlush()返回緩沖區(qū)滿時摹恨,是否自動清空緩沖區(qū)
· void close()關(guān)閉輸出流
2.request對象
request對象表示客戶端的請求,客戶端的請求信息被封裝在request對象中,通過他才能了解到客戶的需求,然后做出響應(yīng),他是HttpServletRequest類的實例,request對象具有請求域,即完成客戶端的請求之前,該對象一直有效.
常用方法
- String getParameter(String name)返回name指定參數(shù)的參數(shù)值(用戶名,密碼)
- Stringp[] getParameterValues(String name)返回包含參數(shù)name的所有值數(shù)組(復(fù)選框)
- void setAttribute(String,Object):存儲此請求中的屬性
- object getAttribute(String name)返回指定屬性的屬性值
- String getContentType():得到請求體的MIME類型
- String getProtocol()返回請求用的協(xié)議類型以版本號
- String getServerName():返回接受請求的服務(wù)器主機(jī)名
8.int getServerPort():返回服務(wù)器接受此請求所用的端口號
9.String getCharacterEncoding():返回字符編碼方式
10.void setCharacterEncodign():設(shè)置請求的字符編碼方式在server.xml的<connector></connector>內(nèi)添加 URIEncoding="UTF-8"
11.int getContentLength():返回請求體的長度(以字節(jié)數(shù))
12.String getRemoteAddr():返回發(fā)送此請求的客戶端IP地址
13.String getRealPath(String path):返回虛擬路徑的真實路徑
下面通過一個小例子.看一下實現(xiàn)結(jié)果:
首先在項目中新建一個jsp文件,命名為reg.jsp,用于創(chuàng)建一個注冊界面,把輸出字符編碼更改為utf-8,如下圖:
使用表單方式創(chuàng)建界面結(jié)構(gòu),程序如下圖:
新建一個request.jsp文件,用于接收表單傳輸?shù)膬?nèi)容并測試request對象方法,程序代碼如下:
實現(xiàn)結(jié)果如下:
點擊登錄之后,運行結(jié)果如下圖:
response對象
respones對象包含了響應(yīng)客戶請求的有關(guān)信息,但在JSP中很少直接到它,它是HttpServletResponse類的實例,response對象具有頁面的作用域,即訪問一個頁面時,該頁面的response對象只能對這次訪問有效,其他的頁面response對象對當(dāng)前頁面無效
常用方法:
String getCharacterEncoding( ) 返回響應(yīng)用的是何種字符編碼
void setContentType (String type) 設(shè)置響應(yīng)的MIME類型
PrintWriter getWriter( ) 返回可以向客戶端輸出字符的一個對象(注意比較:PrintWriter 與內(nèi)置out對象的區(qū)別)
sendRedirect(java.lang.String location) 重新定向客戶端的請求
測試代碼如下所示:
有圖可見,雖然out對象的輸出程序代碼寫在前面,但是顯示在由PrintWriter getWriter( )定義的outer對象后面.可見其兩者的優(yōu)先關(guān)系.
請求轉(zhuǎn)發(fā)與請求重定向
1.請求重定向:
客戶端行為筋岛,response.sendRedirect(),從本質(zhì)上講等同于兩次請求,前一次的請求對象不會保存晒哄,地址欄的URL地址會發(fā)成改變睁宰!
2.請求轉(zhuǎn)發(fā):
服務(wù)器行為,request.getRequestDispatcher().forward(request,response);是一次請求寝凌,轉(zhuǎn)發(fā)后請求對象會保存柒傻,地址欄的URL地址不會發(fā)成改變!
session對象
session介紹
1.1 session表示客戶端與服務(wù)端的一次會話
1.2 Web中的session指的是用戶在瀏覽某個網(wǎng)站的時候,從進(jìn)入網(wǎng)站到瀏覽器關(guān)閉所經(jīng)過的這段時間,也就是用戶瀏覽這個網(wǎng)站所花費的時間
1.3 從上述定義中可以看到,session實際上是一個特定的時間概念
session保存在服務(wù)器內(nèi)存中较木,并未不同用戶保存不同session
session對象
session對象是一個JSP內(nèi)置對象
session對象在第一個JSP頁面被裝載時自動創(chuàng)建,完成會話期管理
從一個客戶打開瀏覽器并連接服務(wù)器開始,到客戶關(guān)閉瀏覽器離開這個服務(wù)器結(jié)束,被稱為一個會話
當(dāng)一個客戶訪問一個服務(wù)器時,可能會在服務(wù)器的幾個頁面之間切換,服務(wù)器應(yīng)當(dāng)通過某種方法知道這是個客戶,就需要session對象
session對象是HttpSession類的實例
常用方法
session對象常用方法
long getCreationTime():返回創(chuàng)建SESSION創(chuàng)建時間
public String getId():返回SESSION創(chuàng)建時JSP引擎為他設(shè)的唯一ID號
public Object setAttribute(String name,Object value):使用指定名稱將對象綁定到此會話
public Object getAttribute(String name):返回與此會話中的指定名稱綁定在一起的對象,如果沒有對象綁定在改名下,則返回null
String[] getValueNames()"返回一個包含此SESSION中所有可用屬性的數(shù)組
int getMaxInactiveInterval():返回兩次請求間隔多長時間此SESSION被取消(單位秒)
測試程序如下:
頁面結(jié)果如下:
當(dāng)設(shè)置了session最大生存期限為10秒時,點擊跳轉(zhuǎn)到session2,實現(xiàn)如下圖:
可見ID編號變了,說明這是第二次會話.
當(dāng)取消session最大生存期限后,結(jié)果如下圖:
可見ID號相同,用戶名均存在,是同一次會話.
session生命周期
創(chuàng)建->活動->銷毀
- 創(chuàng)建
當(dāng)客戶端第一次訪問某個jsp或者servlet時候,服務(wù)器會為當(dāng)前會話創(chuàng)建一個sessionID,每次客戶端向服務(wù)端發(fā)送請求時,都會將此sessionID攜帶過去,服務(wù)端會對此sessionId進(jìn)行校驗,會判斷是否是同意會話 - 活動
2.1 某次會話當(dāng)中通過超鏈接打開的新頁面屬于同一次會話
2.2 只要當(dāng)前會話頁面沒有全部關(guān)閉,重新打開新的瀏覽器窗口訪問同意項目時屬于同一會話
2.3 除非本次會話的所有頁面都關(guān)閉后在重新訪問某個Jsp或者Servlet將會創(chuàng)建新的會話
注意事項:
注意原有會話還存在,只是這個舊的sessionID任然存在與服務(wù)端,只不過再也沒有客戶端攜帶它然后交與服務(wù)端校驗- 銷毀
session銷毀有三種方式
3.2 調(diào)用了session.invalidate() 3.3 session超時(過期)
3.4 服務(wù)器重新啟動
- 銷毀