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