在jsp開發中會頻繁使用到一些對象,如ServletContext HttpSession PageContext等.若是每次咱們在jsp頁面中須要使用這些對象都要本身親自動手建立就會特別的繁瑣.SUN公司所以在設計jsp時,在jsp頁面加載完畢以後自動幫開發者建立好了這些對象,開發者只須要使用相應的對象調用相應的方法便可.這些系統建立好的對象就叫作內置對象.html
在servlet程序中,若是開發者但願使用session對象,必須經過request.getSession()來獲得session對象;而在jsp程序中,開發中可直接使用session(系統幫咱們建立好的session對象的名字就叫session)調用相應的方法便可,如:session.getId().java
JSP全名爲Java Server Pages,中文名叫java服務器頁面。web
JSP中一共預先定義了9個這樣的對象,分別爲:request、response、session、application、out、pagecontext、config、page、exception數據庫
內置對象(又叫隱含對象)特色:
1. 由JSP規範提供,不用編寫者實例化。
2. 經過Web容器實現和管理
3. 全部JSP頁面都可使用
4. 只有在腳本元素的表達式或代碼段中才可以使用(<%=使用內置對象%>或<%使用內置對象%>)編程
詳文一:數組
request 對象是 javax.servlet.httpServletRequest類型的對象。 該對象表明了客戶端的請求信息,主要用於接受經過HTTP協議傳送到服務器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對象的做用域爲一次請求。瀏覽器
response 表明的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具備做用域,它只在JSP頁面內有效。緩存
session 對象是由服務器自動建立的與用戶請求相關的對象。服務器爲每一個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操做狀態。session對象內部使用Map類來保存數據,所以保存數據的格式爲 「Key/value」。 session對象的value可使複雜的對象類型,而不只僅侷限於字符串類型。服務器
application 對象可將信息保存在服務器中,直到服務器關閉,不然application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命週期更長,相似於系統的「全局變量」。cookie
out 對象用於在Web瀏覽器內輸出信息,而且管理應用服務器上的輸出緩衝區。在使用 out 對象輸出數據時,能夠對數據緩衝區進行操做,及時清除緩衝區中的殘餘數據,爲其餘的輸出讓出緩衝空間。待數據輸出完畢後,要及時關閉輸出流。
pageContext 對象的做用是取得任何範圍的參數,經過它能夠獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的建立和初始化都是由容器來完成的,在JSP頁面中能夠直接使用 pageContext對象。
config 對象的主要做用是取得服務器的配置信息。經過 pageConext對象的 getServletConfig() 方法能夠獲取一個config對象。當一個Servlet 初始化時,容器把某些信息經過 config對象傳遞給這個 Servlet。 開發者能夠在web.xml 文件中爲應用程序環境中的Servlet程序和JSP頁面提供初始化參數。
page 對象表明JSP自己,只有在JSP頁面內纔是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,相似於Java編程中的 this 指針。
exception 對象的做用是顯示異常信息,只有在包含 isErrorPage="true" 的頁面中才能夠被使用,在通常的JSP頁面中使用該對象將沒法編譯JSP文件。excepation對象和Java的全部對象同樣,都具備系統提供的繼承結構。exception 對象幾乎定義了全部異常狀況。在Java程序中,可使用try/catch關鍵字來處理異常狀況; 若是在JSP頁面中出現沒有捕獲到的異常,就會生成 exception 對象,並把 exception 對象傳送到在page指令中設定的錯誤頁面中,而後在錯誤頁面中處理相應的 exception 對象。
詳文二:
一、request對象javax.servlet.http.HttpServletRequest
request對象表明了客戶端的請求信息,主要用於接受經過HTTP協議傳送到服務器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對 象的做用域爲一次請求。
當Request對象獲取客戶提交的漢字字符時,會出現亂碼問題,必須進行特殊處理。首先,將獲取的字符串用ISO-8859-1進行編碼,並將編碼存發島一個字節數組中,而後再將這個數組轉化爲字符串對象以下
Request經常使用的方法:getParameter(String strTextName) 獲取表單提交的信息.
getProtocol() 獲取客戶使用的協議。
String strProtocol=request.getProtocol();
getServletPath() 獲取客戶提交信息的頁面。String strServlet=request.getServletPath();
getMethod() 獲取客戶提交信息的方式 String strMethod=request.getMethod();
getHeader() 獲取HTTP頭文件中的accept,accept-encoding和Host的值,String strHeader=request.getHeader();
getRermoteAddr() 獲取客戶的IP地址。String strIP=request.getRemoteAddr();
getRemoteHost() 獲取客戶機的名稱。String clientName=request.getRemoteHost();
getServerName() 獲取服務器名稱。 String serverName=request.getServerName();
getServerPort() 獲取服務器的端口號。 int serverPort=request.getServerPort();
getParameterNames() 獲取客戶端提交的全部參數的名字。
Enumeration enum = request.getParameterNames();while(enum.hasMoreElements()) { Strings(String)enum.nextElement(); out.println(s); }123456
二、response對象 javax.servlet.http.HttpServletResponse
response 表明的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具備做用域,它只在JSP頁面內有效。
具備動態響應contentType屬性,當一個用戶訪問一個JSP頁面時,若是該頁面用page指令設置頁面的contentType屬性是text/html,那麼JSP引擎將按照這個屬性值作出反應。
若是要動態改變這換個屬性值來響應客戶,就須要使用Response對象的setContentType(String s)方法來改變contentType的屬性值。
response.setContentType(String s); 參數s可取text/html,application/x-msexcel,application/msword等。
在某些狀況下,當響應客戶時,須要將客戶從新引導至另外一個頁面,可使用Response的sendRedirect(URL)方法實現客戶的重定向。
例如response.sendRedirect(index.jsp);
三、session對象 javax.servlet.http.HttpSession
Session對象是一個JSP內置對象,它在第一個JSP頁面被裝載時自動建立,完成會話期管理。從一個客戶打開瀏覽器並鏈接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱爲一個會話。當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間切換,服務器應當經過某種辦法知道這是一個客戶,就須要Session對象。
當一個客戶首次訪問服務器上的一個JSP頁面時,JSP引擎產生一個Session對象,同時分配一個String類型的ID號,JSP引擎同時將這換個ID號發送到客戶端,存放在Cookie中,這樣Session對象,直到客戶關閉瀏覽器後,服務器端該客戶的Session對象才取消,而且和客戶的會話對應關係消失。當客戶從新打開瀏覽器再鏈接到該服務器時,服務器爲該客戶再建立一個新的Session對象。
session 對象是由服務器自動建立的與用戶請求相關的對象。服務器爲每一個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操做狀態。
session對象內部使用Map類來保存數據,所以保存數據的格式爲 「Key/value」。 session對象的value可使複雜的對象類型,而不只僅侷限於字符串類型。
public String getId():獲取Session對象編號。
public void setAttribute(String key,Object obj):將參數Object指定的對象obj添加到Session對象中,併爲添加的對象指定一個索引關鍵字。
public Object getAttribute(String key):獲取Session對象中含有關鍵字的對象。
public Boolean isNew():判斷是不是一個新的客戶。
四、application對象javax.servlet.ServletContext
application 對象可將信息保存在服務器中,直到服務器關閉,不然application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命週期更長,相似於系統的「全局變量」。
服務器啓動後就產生了這個Application對象,當客戶再所訪問的網站的各個頁面之間瀏覽時,這個Application對象都是同一個,直到服務器關閉。可是與Session對象不一樣的時,全部客戶的Application對象都時同一個,即全部客戶共享這個內置的Application對象。
setAttribute(String key,Object obj):將參數Object指定的對象obj添加到Application對象中,併爲添加的對象指定一個索引關鍵字。
getAttribute(String key):獲取Application對象中含有關鍵字的對象。
五、out 對象javax.servlet.jsp.jspWriter
out 對象用於在Web瀏覽器內輸出信息,而且管理應用服務器上的輸出緩衝區。在使用 out 對象輸出數據時,能夠對數據緩衝區進行操做,及時清除緩衝區中的殘餘數據,爲其餘的輸出讓出緩衝空間。待數據輸出完畢後,要及時關閉輸出流。
Out對象時一個輸出流,用來向客戶端輸出數據。Out對象用於各類數據的輸出。其經常使用方法以下。
out.print():輸出各類類型數據。
out.newLine():輸出一個換行符。
out.close():關閉流。
六、pageContext 對象javax.servlet.jsp.PageContext
pageContext 對象的做用是取得任何範圍的參數,經過它能夠獲取 JSP頁面的out、request、reponse、session、application 等對象。
pageContext對象的建立和初始化都是由容器來完成的,在JSP頁面中能夠直接使用 pageContext對象。
page 對象表明JSP自己,只有在JSP頁面內纔是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,相似於Java編程中的 this 指針。
七、config 對象javax.servlet.ServletConfig
config 對象的主要做用是取得服務器的配置信息。經過 pageConext對象的 getServletConfig() 方法能夠獲取一個config對象。當一個Servlet 初始化時,容器把某些信息經過 config對象傳遞給這個 Servlet。開發者能夠在web.xml 文件中爲應用程序環境中的Servlet程序和JSP頁面提供初始化參數。
8 cookie 對象
Cookie是Web服務器保存在用戶硬盤上的一段文本。Cookie容許一個Web站點在用戶電腦上保存信息而且隨後再取回它。舉例來講,一個Web站點可能會爲每個訪問者產生一個惟一的ID,而後以Cookie文件的形式保存在每一個用戶的機器上。
建立一個Cookie對象 調用Cookie對象的構造函數就能夠建立Cookie對象。Cookie對象的構造函數有兩個字符串參數:Cookie名字和Cookie值。
例如:Cookie c = new Cookie(username」,john」); 將Cookie對象傳送到客戶端。
JSP中,若是要將封裝好的Cookie對象傳送到客戶端,可以使用Response對象的addCookie()方法。
例如:response.addCookie(c),讀取保存到客戶端的Cookie。
使用Request對象的getCookie()方法,執行時將全部客戶端傳來的Cookie對象以數組的形式排列,若是要取出符合須要的Cookie對象,就須要循環比較數組內每一個對象的關鍵字。設置Cookie對象的有效時間,用Cookie對象的setMaxAge()方法即可以設置Cookie對象的有效時間,
例如:Cookie c = newCookie(username」,」john」);c.setMaxAge(3600);
Cookie對象的典型應用時用來統計網站的訪問人數。因爲代理服務器、緩存等的使用,惟一能幫助網站精確統計來訪人數的方法就是爲每一個訪問者創建一個惟一ID。使用Cookie,網站能夠完成如下工做:
測定多少人訪問過。測定訪問者有多少是新用戶(即第一次來訪),多少是老用戶。
測定一個用戶多久訪問一次網站。當一個用戶第一次訪問時,網站在數據庫中創建一個新的ID,並把ID經過Cookie傳送給用戶。用戶再次來訪時,網站把該用戶ID對應的計數器加1,獲得用戶的來訪次數。
九、exception 對象java.lang.Throwable
exception 對象的做用是顯示異常信息,只有在包含 isErrorPage=」true」 的頁面中才能夠被使用,在通常的JSP頁面中使用該對象將沒法編譯JSP文件。
excepation對象和Java的全部對象同樣,都具備系統提供的繼承 結構。
exception 對象幾乎定義了全部異常狀況。在Java程序中,可使用try/catch關鍵字來處理異常狀況; 若是在JSP頁面中出現沒有捕獲到的異常,就會生成 exception 對象,並把 exception 對象傳送到在page指令中設定的錯誤頁面中,而後在錯誤頁面中處理相應的 exception 對象。
對象名 | 功能 | 類型 | 做用域 |
---|---|---|---|
request | 向客戶端請求數據 | javax.servlet.ServletRequest | Request |
response | 封裝了jsp產生的響應,而後被髮送到客戶端以響應客戶的請求 | javax.servlet.SrvletResponse | Page |
pageContext | 爲JSP頁面包裝頁面的上下文。管理對屬於JSP中特殊可見部分中己經命名對象的該問 | javax.servlet.jsp.PageContext | Page |
session | 用來保存每一個用戶的信息,以便跟蹤每一個用戶的操做狀態 | javax.servlet.http.HttpSession | Session |
application | 應用程序對象 | javax.servlet.ServletContext | Application |
out | 向客戶端輸出數據 | javax.servlet.jsp.JspWriter | Page |
config | 表示Servlet的配置,當一個Servlet初始化時,容器把某些信息經過此對象傳遞給這個Servlet | javax.servlet.ServletConfig | Page |
page | Jsp實現類的實例,它是jsp自己,經過這個能夠對它進行訪問 | javax.lang.Object | Page |
exception | 反映運行的異常 | javax.lang.Throwable | Page |
PrintWriter:write("內容") 直接向瀏覽器輸出內容
JspWriter:writer("內容") 向jsp緩衝區寫出內容
JspWriter當知足如下條件時之一時,緩衝區的內容寫出:
a,緩衝區滿了
b,刷新緩衝區
c,關閉緩衝區
d,jsp頁面執行完畢
pageContext的對象類型是PageContext,叫jsp的上下文對象.
pageContext做用:能夠獲取其餘八個內置對象
//示例:
pageContext.getOut();
pageContext.getServletConfig()
使用場景:在自定義標籤時會頻繁使用到PageContext對象;或者是定義一個方法須要用到多個對象時,傳一個pageContext對象就能解決問題.
pageContext對象 這個對象表明頁面上下文,該對象主要用於訪問JSP之間的共享數據。
pageContext是PageContext類的實例,使用pageContext能夠訪問page、request、session、application範圍的變量。
getAttribute(String name):取得page範圍內的name屬性。
setAttribute(String name,值,int scope):若是沒有指定scope,該屬性默認在page範圍內,如:pageContext.setAttribute("page","hello");
使用pageContext將屬性設置在request範圍中pageContext.setAttribute("request2","hello" , pageContext.REQUEST_SCOPE);
使用pageContext將屬性設置在session範圍中pageContext.setAttribute("session2","hello" , pageContext.SESSION_SCOPE);
使用pageContext將屬性設置在application範圍中pageContext.setAttribute("app2","hello" , pageContext.APPLICATION_SCOPE);
getAttribute(String name,int scope):取得指定範圍內的name屬性,
其中scope能夠是以下4個值:
PageContext.PAGE_SCOPE:對應於page範圍。
PageContext.REQUEST_SCOPE:對應於request範圍。
PageContext.SESSION_SCOPE:對應於session範圍。
PageContext.APPLICATION_SCOPE:對應於application範圍。
ServletContext context域
HttpServletRequet request域
HttpSession session域 --前三種在學習Servlet時就能接觸到
PageContext page域 --jsp學習的
域對象的做用:保存數據,獲取數據,共享數據.
pageContext.setAttribute("內容",域範圍常量);//保存到指定域中
//四個域常量
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext..SESSION_SCOPE
PageContext.APPLICATION_SCOPE
pageContext.getAttribute("內容");
pageContext.getAttribute("name",域範圍常量);
//自動在四個域中搜索數據 pageContext.findAttribute("內容");//在四個域中自動搜索數據,順序:page域->request域->session域->application域(context域)
page域: 只能在當前jsp頁面使用 (當前頁面)
request域: 只能在同一個請求中使用 (轉發)
session域: 只能在同一個會話(session對象)中使用 (私有的)
context域: 只能在同一個web應用中使用 (全局的)