概念:內置對象是指在jsp頁面中內置的,不需要定義就可以在網頁中直接使用的對象。jsp規範預定義了內置對象的原因,是爲了提高程序員的開發效率。
認識jsp內置對象:
內置對象的特點:
(1)內置對象是自動載入的,因此它不需要直接實例化。
(2)內置對象是通過web容器來實現和管理的。
(3)在所有的jsp頁面中,直接調用內置對象都是合法的。
jsp規範中定義的9種內置對象:
(1)out對象:負責管理對客戶端的輸出。
(2)request對象:負責得到客戶端的請求信息。
(3)response對象:負責向客戶端發出響應。
(4)session對象:負責保存同一客戶端一次會話過程中的一些信息。
(5)application對象:表示整個應用的環境的信息。
(6)exception對象
(7)page對象
(8)pageContext對象
(9)config對象
out對象
out對象對應的類型是javax.servlet.jsp.JspWriter,作用如下:
(1)用來向客戶端輸出各種數據類型的內容。
(2)對應用服務器上傳輸緩衝區進行管理。
一般情況,out對象都是向瀏覽器輸出文本型的數據,out對象輸出的主要方法有兩個void print()和void println()
out管理管理緩衝區使用的比較少,因爲通常使用服務器端默認的設置,而不需要手動管理,out對象常用的與管理緩衝區有關的函數有void close(),void clearBuffer(),void clear(),int getRemaining(),void flush(),int getBufferSize()
request對象
request代表客戶端的請求信息,主要用來獲取客戶端的參數和流。它對應的類型是javax.servlet.http.HttpServletRequest,其主要的方法如下:
(1)String getMethod():得到提交方式。
(2)String GetRequestURI()
(3)String getProtocol()
(4)String getServletPath()
(5)String getQueryString()
(6)String getServerName()
(7)String getServerPort()
(8)String getRemoteAddr():得到客戶端的ip地址
(9)String getParameter(String name):獲得客戶端傳送給服務器的name參數的值,若沒有則返回null
(10)String[] getParameterValues(String name):以字符串數組形式返回指定參數所有值。
注:直接訪問URL屬於get方式提交;實際上,通過鏈接方式提交也是get方式
獲取客戶端的信息可以完成一些特定功能,比如getRemoteAddr函數獲取客戶端的ip地址,如果該ip在黑名單,系統可以禁止這部分客戶訪問。
response對象
response對應的類(接口)是javax.servlet.http.HttpServletResponse
1.利用response對象進行重定向
2.利用response對象設置HTTP頭
HTTP頭一般用來設置網頁的基本屬性。可以通過response的setHeader方法來進行設置
<%
//表示在客戶端緩存中不保存頁面的拷貝
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
//表示客戶端瀏覽器每隔5s定期刷新一次
response.setHeader("Refresh","5");
%>
Cookie操作
HTTP是無狀態的協議。在頁面之間傳遞值時,必須通過服務器。URL傳值方法,隱藏表單方法都可以實現。但通過URL傳值,傳遞的數據可能被看到;通過隱藏表單傳值,傳遞的值會在客戶端源代碼內被看見。
這個時候介紹另一種方法:cookie
但Cookie也不是絕對安全的。如果將敏感信息保存在cookie內,這些信息容易泄露,因此cookie在保存敏感信息方面具有潛在危險。cookie的危險性來源於cookie的被盜取。盜取的方法有如下幾種:
(1)利用跨站腳本技術
(2)通過某些軟件,竊取硬盤下的cookie。
(3)利用客戶端腳本盜取cookie。
解決cookie安全的方法:
(1)替代cookie。將數據保存在服務器端,可選的是session方案。
(2)及時刪除cookie
(3)禁用cookie
session對象
設置session內容:
在session中,有一個函數void session.setAttribute(String name,Object obj);Object可以爲很多,比如String,ArrayList.....
讀取session中的內容:
Object session.getAttribute(String name);可根據類型將Object進行強制轉換
移除session中的內容:session.removeAttribute(String name);
移除session中的全部內容:void session.invalidate();
利用session可以保存登錄信息
application對象
session中的數據可以被同一個客戶在網站的一次會話過程共享,但對於不同客戶來說session是不同的。
而application對象,對於不同客戶端來說,服務器端的對象是相同的。
很明顯,購物車不能用application來實現,但可以用application來實現統計網站當前在線的用戶名單,因爲所有客戶瀏覽器都應該能夠顯示,或者說,當前在線用戶名單對於所有客戶是共享的,此時當前在線名單就可以存放在服務器端的application中。
對於一個web容器而言,所有的用戶都共同使用一個application對象,服務器啓動後就會自動創建application對象,這個對象會一直保存,直到服務器關閉爲止。
application對應的類(接口)是javax.servlet.ServletContext,其API主要有以下幾個:
1.將內容放入application:void application.setAttribute(String name,Object obj);
2.讀取application中內容:Object application.getAttribute(String name);
3.將內容從application中移除:void application.removeAttribute(String name);
可以用application來統計某個頁面被訪問的次數