-
內置對象簡介
-
四種作用域範圍
-
out
-
request/respone
-
session
-
application
-
其它內置對象
3-1 JSP內置對象簡介
JSP九大內置對象:
out,request,response,session,application(五大常用對象)
Page,pageContext,exception.config(四個不太常用對象)
3-3 web程序的請求與響應模式
用戶發送請求(request),服務器給用戶響應(response)
3-4 out對象
什麼是緩衝區
1、緩衝區:Buffer,所謂緩衝區就是內存的一塊區域,用來保存臨時數據
2、IO輸出最原始的就是一個字節一個字節輸出,效率很低。緩衝區可以先將多個字節讀出來,再一次性的輸出,提高效率
out對象
out對象是JspWriter類的實例,是向客戶端(這裏指瀏覽器)輸出內容的常用對象。
常用方法:
- void println()向客戶端打印字符
- void clear()清除緩衝區的內容。如果在flush之後調用,會拋出異常
- void clearBuffer() 也是清除緩衝區內容,但在flush之後不會拋出異常
- void flush()將緩衝區內容輸出到客戶端
- int getBufferSize()返回緩衝區的大小(字節數),如不設緩衝區則爲0
- int getRemaining()返回緩衝區還剩餘多少可用
- boolean isAutoFlush()返回緩衝區滿時,是否自動清空緩衝區
- void close()關閉輸出流
3-6 get和post提交方式的區別
表單有兩種提交方式:get與post。定義在<form action="dologin.jsp" name="loginForm" method="提交方式***"></form> 動作/名稱等順序無所謂。
1.get:以【明文】方式,通過URL提交數據,數據在URL中【可以看到】。提交數據最多不超過【2KB】。安全性較低,但效率比post方式高。適合提交數據量不大,且安全要求不高的數據:比如:搜索、查詢等功能。
2.post:將用戶提交的信息封裝在HTML HEADER內。適合提交數據量大,安全性高的用戶信息。如:註冊、修改、上傳等功能。
3-7 request對象
內容:
客戶端的請求信息被封裝在request對象中,通過它才能瞭解到客戶的需求,然後做出響應。 它是HttpServletRequest類的實例。request對象具有請求域,即完成客戶端的請求之前,該對象一直有效。
方法:
- object getAttribute(String name) 返回指定屬性的屬性值
- Enumeration getAttributeNames() 返回所有可用屬性名的枚舉
- String getCharacterEncoding() 返回字符編碼方式
- int getContentLength() 返回請求體的長度(以字節數)
- String getContentType() 得到請求體的MIME類型
- ServletInputStream getInputStream() 得到請求體中一行的二進制流
- String getParameter(String name) 返回name指定參數的參數值
- Enumeration getParameterNames() 返回可用參數名的枚舉
- String[] getParameterValues(String name) 返回包含參數name的所有值的數組
- String getProtocol() 返回請求用的協議類型及版本號
- String getScheme() 返回請求用的計劃名,如:http.https及ftp等
- String getServerName() 返回接受請求的服務器主機名
- int getServerPort() 返回服務器接受此請求所用的端口號
- BufferedReader getReader() 返回解碼過了的請求體
- String getRemoteAddr() 返回發送此請求的客戶端IP地址
特別注意:在通過url傳遞參數時會出現中文亂碼問題,這時request.setCharacterEncoding("utf-8")是不能解決的,需要修改配置文件,在Tomcat目錄的confi下的web.xml的<connect ></connect>標籤內追加URIEncoding="utf-8",然後重啓服務器生效
3-10 respone對象
設置響應的MIMI類型 response.setContentType("text/html;charset=utf-8")
向客戶端輸出字符串對象, 而且先於jspWriter,使用out.flush()來避免 RrintWriter response.getWriter()
請求重定向 response.sendRedirect("index.jsp");
3-11 請求重定向與請求轉發的區別
請求重定向:服務端responce.sendRedirect("xx.jsp")重定向。【客戶端行爲】:即客戶端會訪問兩次,第一次訪問後會立即跳轉到第二個重定向頁面上,【從本質上講等於兩次請求】,而前一次的請求封裝的request對象不會保存,地址欄的URL地址會改變。
請求轉發:服務端request.getRequestDispatcher("xx.jsp").forward(request,response)請求轉發。forward(request,response)用於保存內置對象request和response。【服務器行爲】:服務器會代替客戶端去訪問轉發頁面,【從本質是一次請求】,轉發後請求對象會保存,地址欄的URL地址不會改變。
4-1 什麼是session
1、session表示客戶端與服務器的一次會話
2、Web中的session指:用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏覽網站所花費的時間。
3、在服務器的內存中保存着不同用戶的session,一個用戶對應一個session
4、從上述定義中可以看到,session實際是一個【特定的時間概念】
4-2 session對象
- ession是JSP的一個內置對象,是HttpSession類的實例。
- 從客戶打開瀏覽器並連接到服務器開始,到客戶關閉瀏覽器窗口斷開與服務器的連接,這一過程成爲一個會話。
- 當客戶在同一個網站的不同頁面之間進行切換並訪問時,服務器是通過session來判斷這些請求是否來自同一個客戶。
- session一般有時間限制,長時間不操作可能會導致session失效。session失效後原session中保存的屬性值會全部丟失。
- setMaxInactiveInterval(int i) 該方法可直接設定session的生存時間,超過該時間session會重新創建。(單位:秒)
session對象的常用方法有:
- long getCreationTime() : 返回session的創建時間;
- public String getId() : 返回session的唯一ID號(該ID在session生成時,由JSP引擎創建)
- public Object setAttribute(String name,Object value) : 按照鍵值對的方式在該session會話中保存一個屬性(該屬性是一個對象類型)
- public Object getAttribute(String name) : 返回指定名稱的屬性的值(如果該名稱的屬性不存在,則返回null)
- String[] getValueNames() : 返回一個(包含在此session中所有可用屬性)的數組。
- int getMaxInactiveInterval() : 返回一個時間,該時間表示當前session間隔多少時間之後會失效(單位:秒)。
4-3 session的生命週期
1.創建:
當客戶端第一次訪問某個jsp或者servlet時候,服務器會爲當前會話創建一個SessionId,每次客戶端向服務器發送請求時,都會將此SessionId攜帶過去,服務端會對此SessionId進行校驗
2.活動:
①某次會話當中通過超鏈接打開的新頁面屬於同一次會話
②只要當前會話頁面沒有全部關閉,重新打開的瀏覽器窗口訪問同一個項目資源時屬於同一次會話
③除非本次會話的所有頁面都關閉後在重新訪問某個JSP或者servlet將會創建新的會話
注意:注意原有會話還存在,只是這個舊的Session仍然存在於服務端,只不過再也沒有客戶端會攜帶它然後交予服務端校驗
3.銷燬:三種方式
①調用了session.invalidate()方法
②Session過期(超時)
③服務器重新啓動
設置session超時的兩種方式: tomcat默認session超時時間爲30分鐘
1:session.setMaxInactiveInterval(時間);//單位是秒
2:在web.xml配置 <session-config> <session-timeout> 10 <session-timeout> <session-config> //單位是分鐘
4-6 application對象
application介紹
1、實現了用戶間數據的共享,可存放全局變量。(類似靜態對象)
2、開始於服務器啓動,終止於服務器的關閉(生命週期)
3、在用戶的前後連接或不同用戶之間的連接中,可以對application對象的同一屬性進行操作
4、在任何地方對application對象屬性進行操作,都將影響到其他用戶對此的訪問
5、application對象是ServletContext類的實例
常用方法:
- public void setAttribute(String name,Object value)使用指定名稱將對象綁定到此會話。
- public Object getAttribute(String name)返回於此會話中指定名稱綁定在一起的對象,如果沒有對象綁定在該名稱下,則返回null。
- Enumeration getAttributeName()返回所有可用屬性名的枚舉。
- String getServerInfo()返回jsp(servlet)引擎名及版本號。
4-8 page對象
page對象:
是指指向當前JSP頁面本身,有點像類中的this指針,它是java.long.Object類的實例。
常用方法如下:
- class getClass()返回此Object的類。
- int hashCode()返回Object的hash碼。
- Boolean equals(Object obj)判斷此Object是否與指定的Object對象相等。
- void copy(Object obj)把此Object拷貝到指定的Object對象中。
- Object clone()克隆此object對象。
- String toString()把Object對象轉換成String類的對象。
- void notify()喚醒一個等待的線程。
- void notifyAll()喚醒所有等待的線程。
- void wait(int timeout)使一個線程處於等待直到timeout結束或被喚醒。
- void wait()使一個線程處於等待直到被喚醒。
4-9 pageContext對象和config對象
pageContext對象
- ageContext對象提供了對jsp頁面內所有的對象及名字空間的訪問。
- pageContext對象可以訪問到本頁所有的Session,也可以區本頁面所在的application的某一屬性值。
- pageContext對象相當於頁面中所有功能的集大成者。
- pageContext對象的本類名也叫pageContext。
pageContext對象的常用方法:
- jspWriter getOut()返回當前客戶端響應被使用的jspWriter流(out)。
- HttpSession getSession()返回當前頁中的HttpSession對象(Session)。
- Object getPage()返回當前頁的Object對象(page)。
- ServletRequest getRequest()返回當前頁的ServletRequest對象(Request)。
- ServletResponse getResponse()返回當前頁的ServletResponse對像(Response)。
- void setAttribute(String name,Object Attribute)設置屬性及屬性值
- Object getAttribute(String name,int scope)在指定範圍內去屬性的值。
- int getAttribute(String name)返回某屬性的作用範圍。
- void forward(String relativeURLPath)是當前頁重導到另一頁面。
- void include(String relativeURLPath)在當前位置包含另一文件。
config對象 常用方法:
- ServletContext getServletContext()返回含有服務器相關信息的ServletContext對象
- String getInitParameter(String name)返回初始化參數的值
- Enumeration getInitParameterNames()返回Servlet初始化所需所有參數的枚舉
4-10 exception對象
1.需要捕獲異常的頁面,在page指令中寫屬性errorpage=“出錯跳轉到的頁面”
2.在跳轉到的錯誤處理頁面page指令中輸入屬性isErrorPage=“true”
JSP內置對象 - Exception
- Exception是java.lang.Throwable類的實例
- 當一個頁面運行發生了異常,就產生了該Exception對象。
- 若一個JSP頁面要使用該Exception對象,需要將isErrorPage的值設爲true
Exception對象常用方法:
- String getMessage() 返回描述異常的信息
- String toString() 返回關於異常的簡短描述信息
- void printStackTrace() 顯示異常及其棧軌跡
- Throwable FillInStackTrace() 重寫異常的執行棧軌跡