JSP九大內置對象詳解
JSP內置對象(9個內置對象):
1.PageContext javax.servlet.jsp.PageContext JSP的頁面容器
2.request javax.servlet.http.HttpServletrequest 獲取用戶的請求信息
3.response javax.servlet.http.HttpServletResponse 服務器向客戶端的回應信息
4.session javax.servlet.http.HttpSession 用來保存每一個用戶的信息
5.application javax.servlet.ServletContext 表示所有用戶的共享信息
6.config javax.servlet.ServletConfig 服務器配置信息,可以取得初始化參數
7.out javax.servlet.jsp.jspWriter 頁面輸出
8.page java.lang.object)
9.exception java.lang.Throwable
四種屬性范圍:
page(pageContext):只在一個頁面中保存屬性。 跳轉之后無效。
request:只在一次請求中有效,服務器跳轉之后有效。 客戶端跳無效
session:再一次會話中有效。服務器跳轉、客戶端跳轉都有效。 網頁關閉重新打開無效
application:在整個服務器上保存,所有用戶都可使用。 重啟服務器后無效
注意:如果設置過多的application屬性范圍會影響服務器性能。
pageContext.PAGE_SCOPE
pageContext.REQUEST_SCOPE
pageContext.SESSION_SCOPE
pageContext.APPLICATION_SCOPE
pageContext.setAttribute("name", "liuyang", pageContext.APPLICATION_SCOPE);
- Request常用的方法:
1.01 getParameter(String strTextName) 獲取表單提交的信息。
|
1.02 getProtocol() 獲取客戶使用的協議。
|
1.03 getServletPath() 獲取客戶提交信息的頁面。
|
1.04 getMethod() 獲取客戶提交信息的方式,get|post。
|
1.05 getHeade() 獲取HTTP頭文件中的accept、accept-encoding和Host的值。
|
1.06 getRermoteAddr() 獲取客戶的IP地址。
|
1.07 getRemoteHost() 獲取客戶機的名稱。
|
1.08 getServerName() 獲取服務器名稱。
|
1.09 getServerPort() 獲取服務器的端口號。
|
1.10 getParameterNames() 獲取客戶端提交的所有參數的名字。
|
1.11 getHeaderNames() 取出全部頭信息。
<% Enumeration enu = request.getHeaderNames();//取出全部頭信息 while(enu.hasMoreElements()){ String name = (String)enu.nextElement(); String value = request.getHeader(name); %> <h1><%=name %>--<%=value %></h1> <% } %>
1、request對象
request 對象是 javax.servlet.httpServletRequest類型的對象。 該對象代表了客戶端的請求信息,主要用於接受通過HTTP協議傳送到服務器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對象的作用域為一次請求。
2、response對象
response 代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內有效。
3、session對象
session 對象是由服務器自動創建的與用戶請求相關的對象。服務器為每個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操作狀態。session對象內部使用Map類來保存數據,因此保存數據的格式為 “Key/value”。 session對象的value可以使復雜的對象類型,而不僅僅局限於字符串類型。
4、application對象
application 對象可將信息保存在服務器中,直到服務器關閉,否則application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命周期更長,類似於系統的“全局變量”。
5、out 對象
out 對象用於在Web瀏覽器內輸出信息,並且管理應用服務器上的輸出緩沖區。在使用 out 對象輸出數據時,可以對數據緩沖區進行操作,及時清除緩沖區中的殘余數據,為其他的輸出讓出緩沖空間。待數據輸出完畢后,要及時關閉輸出流。
6、pageContext 對象
pageContext 對象的作用是取得任何范圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的創建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。
7、config 對象
config 對象的主要作用是取得服務器的配置信息。通過 pageConext對象的 getServletConfig() 方法可以獲取一個config對象。當一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。 開發者可以在web.xml 文件中為應用程序環境中的Servlet程序和JSP頁面提供初始化參數。
8、page 對象
page 對象代表JSP本身,只有在JSP頁面內才是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,類似於Java編程中的 this 指針。
9、exception 對象
exception 對象的作用是顯示異常信息,只有在包含 isErrorPage="true" 的頁面中才可以被使用,在一般的JSP頁面中使用該對象將無法編譯JSP文件。excepation對象和Java的所有對象一樣,都具有系統提供的繼承結構。exception 對象幾乎定義了所有異常情況。在Java程序中,可以使用try/catch關鍵字來處理異常情況; 如果在JSP頁面中出現沒有捕獲到的異常,就會生成 exception 對象,並把 exception 對象傳送到在page指令中設定的錯誤頁面中,然后在錯誤頁面中處理相應的 exception 對象。
JSP有九個內置對象(又叫隱含對象),不需要預先聲明就可以在腳本代碼和表達式中隨意使用
JSP九大內置對象分為四類:
- 輸入輸出對象:out對象、response對象、request對象
- 通信控制對象:pageContext對象、session對象、application對象
- Servlet對象:page對象、config對象
- 錯誤處理對象:exception對象
九種對象簡介:
- out對象:用於向客戶端、瀏覽器輸出數據。
- request對象:封裝了來自客戶端、瀏覽器的各種信息。
- response對象:封裝了服務器的響應信息。
- exception對象:封裝了jsp程序執行過程中發生的異常和錯誤信息。
- config對象:封裝了應用程序的配置信息。
- page對象:指向了當前jsp程序本身。
- session對象:用來保存會話信息。也就是說,可以實現在同一用戶的不同請求之間共享數
- application對象:代表了當前應用程序的上下文。可以在不同的用戶之間共享信息。
- pageContext對象:提供了對jsp頁面所有對象以及命名空間的訪問。
一.out對象
out對象是一個輸出流,用來向瀏覽器輸出信息,除了輸出各種信息外還負責對緩沖區進行管理。
out對象方法介紹:
方法名 |
說明 |
print或println |
輸出數據 |
newLine |
輸出換行字符 |
flush |
輸出緩沖區數據 |
close |
關閉輸出流 |
clear |
清除緩沖區中數據,但不輸出到客戶端 |
clearBuffer |
清除緩沖區中數據,輸出到客戶端 |
getBufferSize |
獲得緩沖區大小 |
getRemaining |
獲得緩沖區中沒有被占用的空間 |
isAutoFlush |
是否為自動輸出 |
二.request對象
request對象封裝了從客戶端到服務器發出的請求信息。
request對象方法介紹:
方法名 |
說明 |
isUserInRole |
判斷認證后的用戶是否屬於某一成員組 |
getAttribute |
獲取指定屬性的值,如該屬性值不存在返回Null |
getAttributeNames |
獲取所有屬性名的集合 |
getCookies |
獲取所有Cookie對象 |
getCharacterEncoding |
獲取請求的字符編碼方式 |
getContentLength |
返回請求正文的長度,如不確定返回-1 |
getHeader |
獲取指定名字報頭值 |
getHeaders |
獲取指定名字報頭的所有值,一個枚舉 |
getHeaderNames |
獲取所有報頭的名字,一個枚舉 |
getInputStream |
返回請求輸入流,獲取請求中的數據 |
getMethod |
獲取客戶端向服務器端傳送數據的方法 |
getParameter |
獲取指定名字參數值 |
getParameterNames |
獲取所有參數的名字,一個枚舉 |
getParameterValues |
獲取指定名字參數的所有值 |
getProtocol |
獲取客戶端向服務器端傳送數據的協議名稱 |
getQueryString |
獲取以get方法向服務器傳送的查詢字符串 |
getRequestURI |
獲取發出請求字符串的客戶端地址 |
getRemoteAddr |
獲取客戶端的IP地址 |
getRemoteHost |
獲取客戶端的名字 |
getSession |
獲取和請求相關的會話 |
getServerName |
獲取服務器的名字 |
getServerPath |
獲取客戶端請求文件的路徑 |
getServerPort |
獲取服務器的端口號 |
removeAttribute |
刪除請求中的一個屬性 |
setAttribute |
設置指定名字參數值 |
request對象演示:
完成一個簡單的用戶注冊信息界面,將注冊信息發送到歡迎界面上。
用戶注冊界面表單設置:
<form action="do_register.jsp" method="post"> 用戶名: <input type="text" name="userName"><br> 技能: <input type="checkbox" name="skills" value="java">java <input type="checkbox" name="skills" value="python">python <input type="checkbox" name="skills" value="ruby">ruby <input type="checkbox" name="skills" value="golang">golang <br> <input type="submit" value="提交"> <input type="reset" value="重置"> </form>
用戶注冊信息處理界面使用getParameter方法將用戶的表單信息提取出來
String name=request.getParameter("userName"); String[] skillArr=request.getParameterValues("skills");
將skillArr數組轉換成字符串:
String skills=""; if (skillArr!=null&&skillArr.length>0){ for (String skill:skillArr ) { skills=skills+skill+" "; } }
將數據使用setAttribute保存起來
request.setAttribute("userName",name); request.setAttribute("skills",skills);
使用jsp的forword指令將頁面跳轉到welcome.jsp
<jsp:forward page="welcome.jsp"></jsp:forward>
setAttribute和getAttribute用於在web組件之間共享信息
getparameter方法用於接收服務器通過set和post方法傳輸的數據
注意沒有setparameter方法
welcome.jsp頁面配置:
<html> <head> <title>技能展示界面</title> </head> <body> 信息展示界面:<br><br> <%--<%=%>這是表達式<%%>這是jsp程序處理--%> 姓名:<%=request.getAttribute("userName")%><br> 技能:<%=request.getAttribute("skills")%> </body> </html>
三.response對象
response對象主要用於對客戶端的請求進行回應。
以及處理http的連接信息,例如設置http文件頭,設置cookie對象等。
response對象方法:
方法名 |
說明 |
addCookie |
添加一個Cookie對象 |
addHeader |
添加Http文件指定名字頭信息 |
containsHeader |
判斷指定名字Http文件頭信息是否存在 |
encodeURL |
使用sessionid封裝URL |
flushBuffer |
強制把當前緩沖區內容發送到客戶端 |
getBufferSize |
返回緩沖區大小 |
getOutputStream |
返回到客戶端的輸出流對象 |
sendError |
向客戶端發送錯誤信息 |
sendRedirect |
把響應發送到另一個位置進行處理 |
setContentType |
設置響應的MIME類型 |
setHeader |
設置指定名字的Http文件頭信息 |
四.session對象
session對象:是一個jsp內置對象,它在第一個jsp被裝載時自動創建,完成會話期管理。從一個客戶打開瀏覽器並連接到服務器開始,到客戶關閉瀏覽器離 開這個服務器結束(或者超時),被稱為一個會話。當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間切換,服務器應當通過某種辦法知道這是一個客戶,就需要創建session對象。
http是無狀態的連接協議,需要使用session來存放用戶每次的登陸信息
session對象方法:
方法名 |
說明 |
getAttribute |
獲取指定名字的屬性 |
getAttributeNames |
獲取session中全部屬性名字,一個枚舉 |
getCreationTime |
返回session的創建時間 |
getId |
獲取會話標識符 |
getLastAccessedTime |
返回最后發送請求的時間 |
getMaxInactiveInterval |
返回session對象的生存時間單位千分之一秒 |
invalidate |
銷毀session對象 |
isNew |
每個請求是否會產生新的session對象 |
removeAttribute |
刪除指定名字的屬性 |
setAttribute |
設定指定名字的屬性值 |
接下來通過一個登陸的小例子來演示下session對象的應用:
登陸表單設置:
<form action="do_login.jsp" method="post"> userName:<input type="text" name="userName"><br/> password:<input type="password" name="password"><br/> <input type="submit" value="submit"> <input type="reset" value="reset"> </form>
登陸邏輯處理界面,使用getParameter獲取到用戶名和密碼:
String userName=request.getParameter("userName"); String password=request.getParameter("password");
對用戶名和密碼進行判斷:
if (userName!=null&&password!=null){ session.setAttribute("userName",userName); response.setHeader("refresh","2;URL=welcome.jsp"); }
在歡迎界面使用getAttribute獲取當前的用戶名:
<%if(session.getAttribute("userName")!=null){%> <%--getAttribute方法是使用指定的key獲取session中的value值。獲取到的是一個object對象 在使用的時候需要根據具體的類型進行類型轉換。 這里取出的是一個字符串,直接調用會使用他的toString方法,因此不用進行轉換--%> 歡迎 <%=session.getAttribute("userName")%> <a href="logout.jsp">注銷</a> <%}else{%> 請先登陸 <a href="login.jsp">登陸</a> <%}%>
判斷session對象是否是新創建
<%if (session.isNew()){%> <br/> <br/> 歡迎新用戶 <%}else{%> <br/> <br/> 歡迎老用戶 <%}%>
在登出界面里清除session對象信息,並跳轉到歡迎界面中去:
session.invalidate();//清除掉session對象 response.setHeader("refresh","2;URL=welcome.jsp");
五.application對象
application對象代表當前的應用程序。存在於服務器的內存空間中。
應用一旦啟動便會自動生成一個application對象。如果應用沒有被關閉,
此application對象便一直會存在。直到應用被關閉
application的生命周期比session更長。
應用:
為多個用戶共享全局信息。比如當前的在線人數等。
application對象方法:
方法名 |
說明 |
getAttribute |
獲取應用對象中指定名字的屬性值 |
getAttributeNames |
獲取應用對象中所有屬性的名字,一個枚舉 |
getInitParameter |
返回應用對象中指定名字的初始參數值 |
getServletInfo |
返回Servlet編譯器中當前版本信息 |
setAttribute |
設置應用對象中指定名字的屬性值 |
可以使用application對象來實現頁面訪問次數記錄的功能:
<% Object obj=application.getAttribute("counter"); if (obj==null){ application.setAttribute("counter",new Integer(1)); out.println("該頁面被訪問了1次<br/>"); }else { int countValue=new Integer(obj.toString()); countValue++; out.println("該頁面被訪問了"+countValue+"次<br/>"); application.setAttribute("counter",countValue);//java會自動裝箱 } %>
六.config對象
config對象表示當前jsp程序的配置信息
一般項目中,jsp被用作模版技術,也就是位於表示層
而位於表示層的jsp文件一般是不需要配置信息的
所以此對象在jsp程序中其實很少使用
config對象是servletConfig類的一個實例。
config對象方法:
方法名 |
說明 |
getServletContext |
返回所執行的Servlet的環境對象 |
getServletName |
返回所執行的Servlet的名字 |
getInitParameter |
返回指定名字的初始參數值 |
getInitParameterNames |
返回該JSP中所有的初始參數名,一個枚舉
|
七.page對象
page對象有點類似與java編程中的this指針,他指向了當前jsp頁面本身。
page對象是java.lang.object類的一個實例
page對象擁有一個toString方法,下面是官方定義的方法介紹:
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 包名+類名+@+hashcode值
page對象的方法:
方法名 |
說明 |
toString |
將當前項目的信息打印出來 |
getClass |
返回當前的object類 |
hashCode |
返回page對象的hashCode值 |
equals |
用於比較對象是否與當前對象相同 |
八.exception對象
exception對象表示jsp引擎在執行代碼時拋出的異常
如果想要使用exception對象,那么需要配置編譯指令的isErrorPage屬性為true
即在頁面指令中設置:<%@page isErrorPage=“true”%>
九:pageContext對象
pageContetx對象是jsp頁面中所有對象功能的最大集成着。
使用他可以訪問所有的jsp內置對象。
pageContext對象方法:
方法名 |
說明 |
forward |
重定向到另一頁面或Servlet組件 |
getAttribute |
獲取某范圍中指定名字的屬性值 |
findAttribute |
按范圍搜索指定名字的屬性 |
removeAttribute |
刪除某范圍中指定名字的屬性 |
setAttribute |
設定某范圍中指定名字的屬性值 |
getException |
返回當前異常對象 |
getRequest |
返回當前請求對象 |
getResponse |
返回當前響應對象 |
getServletConfig |
返回當前頁面的ServletConfig對象 |
getServletContext |
返回所有頁面共享的ServletContext對象 |
getSession |
返回當前頁面的會話對象 |