jsp的九大内置对象和四大作用域
看到網(wǎng)上一些Jsp內(nèi)置對象介紹的都不是很全,今天我把各位大神的整理了一下。
JSP九大對象:內(nèi)置對象(又叫隱含對象,有9個內(nèi)置對象):不需要預(yù)先聲明就可以在腳本代碼和表達式中隨意使用。
一、request對象:代表的是來自客戶端的請求,例如我們在FORM表單中填寫的信息等,是最常用的對象。客戶端的請求信息被封裝在request對象中,通過它才能了解到客戶的需求,然后做出響應(yīng)。它是HttpServletRequest類的實例。作用域為request(用戶請求期)。
常用方法:
? ?1?object?getAttribute(String?name)?返回指定屬性的屬性值?
2?Enumeration?getAttributeNames()?返回所有可用屬性名的枚舉?
3?String?getCharacterEncoding()?返回字符編碼方式?
4?int?getContentLength()?返回請求體的長度(以字節(jié)數(shù))?
5?String?getContentType()?得到請求體的MIME類型?
6?ServletInputStream?getInputStream()?得到請求體中一行的二進制流?
7?String?getParameter(String?name)?返回name指定參數(shù)的參數(shù)值?
8?Enumeration?getParameterNames()?返回可用參數(shù)名的枚舉?
9?String[]?getParameterValues(String?name)?返回包含參數(shù)name的所有值的數(shù)組?
10?String?getProtocol()?返回請求用的協(xié)議類型及版本號?
11?String?getScheme()?返回請求用的計劃名,如:http.https及ftp等?
12?String?getServerName()?返回接受請求的服務(wù)器主機名?
13?int?getServerPort()?返回服務(wù)器接受此請求所用的端口號?
14?BufferedReader?getReader()?返回解碼過了的請求體?
15?String?getRemoteAddr()?返回發(fā)送此請求的客戶端IP地址?
16?String?getRemoteHost()?返回發(fā)送此請求的客戶端主機名?
17?void?setAttribute(String?key,Object?obj)?設(shè)置屬性的屬性值?
18?String?getRealPath(String?path)?返回一虛擬路徑的真實路徑
二、response對象:對象代表的是對客戶端的響應(yīng),也就是說可以通過response 對象來組織發(fā)送到客戶端的數(shù)據(jù)。但是由于組織方式比較底層,所以不建議普通讀者使用,需要向客戶端發(fā)送文字時直接使用。它是HttpServletResponse類的實例。作用域為page(頁面執(zhí)行期)。常用方法:
? ?1?String?getCharacterEncoding()?返回響應(yīng)用的是何種字符編碼?
2?ServletOutputStream?getOutputStream()?返回響應(yīng)的一個二進制輸出流?
3?PrintWriter?getWriter()?返回可以向客戶端輸出字符的一個對象?
4?void?setContentLength(int?len)?設(shè)置響應(yīng)頭長度?
5?void?setContentType(String?type)?設(shè)置響應(yīng)的MIME類型?
6?sendRedirect(java.lang.String?location)?重新定向客戶端的請求?
三、session對象:指的是客戶端與服務(wù)器的一次會話,從客戶連到服務(wù)器的一個WebApplication開始,直到客戶端與服務(wù)器斷開連接為止。它是HttpSession類的實例。作用域session(會話期—)。常用方法:
? ? 1?long?getCreationTime()?返回SESSION創(chuàng)建時間?
2?public?String?getId()?返回SESSION創(chuàng)建時JSP引擎為它設(shè)的惟一ID號?
3?long?getLastAccessedTime()?返回此SESSION里客戶端最近一次請求時間?
4?int?getMaxInactiveInterval()?返回兩次請求間隔多長時間此SESSION被取消(ms)?
5?String[]?getValueNames()?返回一個包含此SESSION中所有可用屬性的數(shù)組?
6?void?invalidate()?取消SESSION,使SESSION不可用?
7?boolean?isNew()?返回服務(wù)器創(chuàng)建的一個SESSION,客戶端是否已經(jīng)加入?
8?void?removeValue(String?name)?刪除SESSION中指定的屬性?
9?void?setMaxInactiveInterval()?設(shè)置兩次請求間隔多長時間此SESSION被取消(ms)
四、out對象 :out對象是JspWriter類的實例,是向客戶端輸出內(nèi)容常用的對象 。作用域為page(頁面執(zhí)行期)常用方法:
? ? 1?void?clear()?清除緩沖區(qū)的內(nèi)容?
2?void?clearBuffer()?清除緩沖區(qū)的當(dāng)前內(nèi)容?
3?void?flush()?清空流?
4?int?getBufferSize()?返回緩沖區(qū)以字節(jié)數(shù)的大小,如不設(shè)緩沖區(qū)則為0?
5?int?getRemaining()?返回緩沖區(qū)還剩余多少可用?
6?boolean?isAutoFlush()?返回緩沖區(qū)滿時,是自動清空還是拋出異常?
7?void?close()?關(guān)閉輸出流?
五、page對象:page對象就是指向當(dāng)前JSP頁面本身,有點象類中的this指針,它是java.lang.Object類的實例 。“page” 對象代表了正在運行的由JSP文件產(chǎn)生的類對象,不建議一般讀者使用。?作用域 ? ?page常用方法:
? ? 1?class?getClass?返回此Object的類?
2?int?hashCode()?返回此Object的hash碼?
3?boolean?equals(Object?obj)?判斷此Object是否與指定的Object對象相等?
4?void?copy(Object?obj)?把此Object拷貝到指定的Object對象中?
5?Object?clone()?克隆此Object對象?
6?String?toString()?把此Object對象轉(zhuǎn)換成String類的對象?
7?void?notify()?喚醒一個等待的線程?
8?void?notifyAll()?喚醒所有等待的線程?
9?void?wait(int?timeout)?使一個線程處于等待直到timeout結(jié)束或被喚醒?
10?void?wait()?使一個線程處于等待直到被喚醒?
11?void?enterMonitor()?對Object加鎖?
12?void?exitMonitor()?對Object開鎖
六、application對象:實現(xiàn)了用戶間數(shù)據(jù)的共享,可存放全局變量。它開始于服務(wù)器的啟動,直到服務(wù)器的關(guān)閉,在此期間,此對象將一直存在;這樣在用戶的前后連接或不同用戶之間的連接中,可以對此對象的同一屬性進行操作;在任何地方對此對象屬性的操作,都將影響到其他用戶對此的訪問。服務(wù)器的啟動和關(guān)閉決定了application對象的生命。它是ServletContext類的實例。作用域application常用方法:
? ?1?Object?getAttribute(String?name)?返回給定名的屬性值?
2?Enumeration?getAttributeNames()?返回所有可用屬性名的枚舉?
3?void?setAttribute(String?name,Object?obj)?設(shè)定屬性的屬性值?
4?void?removeAttribute(String?name)?刪除一屬性及其屬性值?
5?String?getServerInfo()?返回JSP(SERVLET)引擎名及版本號?
6?String?getRealPath(String?path)?返回一虛擬路徑的真實路徑?
7?ServletContext?getContext(String?uripath)?返回指定WebApplication的application對象?
8?int?getMajorVersion()?返回服務(wù)器支持的Servlet?API的最大版本號?
9?int?getMinorVersion()?返回服務(wù)器支持的Servlet?API的最大版本號?
10?String?getMimeType(String?file)?返回指定文件的MIME類型?
11?URL?getResource(String?path)?返回指定資源(文件及目錄)的URL路徑?
12?InputStream?getResourceAsStream(String?path)?返回指定資源的輸入流?
13?RequestDispatcher?getRequestDispatcher(String?uripath)?返回指定資源的RequestDispatcher對象?
14?Servlet?getServlet(String?name)?返回指定名的Servlet?
15?Enumeration?getServlets()?返回所有Servlet的枚舉?
16?Enumeration?getServletNames()?返回所有Servlet名的枚舉?
17?void?log(String?msg)?把指定消息寫入Servlet的日志文件?
18?void?log(Exception?exception,String?msg)?把指定異常的棧軌跡及錯誤消息寫入Servlet的日志文件?
19?void?log(String?msg,Throwable?throwable)?把棧軌跡及給出的Throwable異常的說明信息?寫入Servlet的日志文件?
七、pageContext對象提供了對JSP頁面內(nèi)所有的對象及名字空間的訪問,也就是說他可以訪問到本頁所在的SESSION,也可以取本頁面所在的application的某一屬性值,他相當(dāng)于頁面中所有功能的集大成者,它的本類名也叫pageContext。用域??? Pageconfig對象常用方法:
? ? 1?JspWriter?getOut()?返回當(dāng)前客戶端響應(yīng)被使用的JspWriter流(out)?
2?HttpSession?getSession()?返回當(dāng)前頁中的HttpSession對象(session)?
3?Object?getPage()?返回當(dāng)前頁的Object對象(page)?
4?ServletRequest?getRequest()?返回當(dāng)前頁的ServletRequest對象(request)?
5?ServletResponse?getResponse()?返回當(dāng)前頁的ServletResponse對象(response)?
6?Exception?getException()?返回當(dāng)前頁的Exception對象(exception)?
7?ServletConfig?getServletConfig()?返回當(dāng)前頁的ServletConfig對象(config)?
8?ServletContext?getServletContext()?返回當(dāng)前頁的ServletContext對象(application)?
9?void?setAttribute(String?name,Object?attribute)?設(shè)置屬性及屬性值?
10?void?setAttribute(String?name,Object?obj,int?scope)?在指定范圍內(nèi)設(shè)置屬性及屬性值?
11?public?Object?getAttribute(String?name)?取屬性的值?
12?Object?getAttribute(String?name,int?scope)?在指定范圍內(nèi)取屬性的值?
13?public?Object?findAttribute(String?name)?尋找一屬性,返回起屬性值或NULL?
14?void?removeAttribute(String?name)?刪除某屬性?
15?void?removeAttribute(String?name,int?scope)?在指定范圍刪除某屬性?
16?int?getAttributeScope(String?name)?返回某屬性的作用范圍?
17?Enumeration?getAttributeNamesInScope(int?scope)?返回指定范圍內(nèi)可用的屬性名枚舉?
18?void?release()?釋放pageContext所占用的資源?
19?void?forward(String?relativeUrlPath)?使當(dāng)前頁面重導(dǎo)到另一頁面?
20?void?include(String?relativeUrlPath)?在當(dāng)前位置包含另一文件?
八、config對象:config對象是在一個Servlet初始化時,JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時所要用到的參數(shù)(通過屬性名和屬性值構(gòu)成)以及服務(wù)器的有關(guān)信息(通過傳遞一個ServletContext對象)。作用域??? Page常用方法:
? ?1?ServletContext?getServletContext()?返回含有服務(wù)器相關(guān)信息的ServletContext對象?
2?String?getInitParameter(String?name)?返回初始化參數(shù)的值?
3?Enumeration?getInitParameterNames()?返回Servlet初始化所需所有參數(shù)的枚舉
九、exception對象:是一個例外對象,當(dāng)一個頁面在運行過程中發(fā)生了例外,就產(chǎn)生這個對象。如果一個JSP頁面要應(yīng)用此對象,就必須把isErrorPage設(shè)為true,否則無法編譯。他實際上是java.lang.Throwable的對象.作用域??? page常用方法:
? ? 1?String?getMessage()?返回描述異常的消息?
2?String?toString()?返回關(guān)于異常的簡短描述消息?
3?void?printStackTrace()?顯示異常及其棧軌跡?
4?Throwable?FillInStackTrace()?重寫異常的執(zhí)行棧軌跡
JSP中九大內(nèi)置對象為:
- request ? ? ? ? ? ? ?請求對象 ? ? ? ? ? ? ? ?類型 javax.servlet.ServletRequest ? ? ? ? 作用域 ? ?Request
- response ? ? ? ? ? 響應(yīng)對象 ? ? ? ? ? ? ? ? ? 類型 javax.servlet.SrvletResponse ? ? ? ?作用域 ? ?Page
- pageContext ? ? 頁面上下文對象 ? ? ? ?類型 javax.servlet.jsp.PageContext ? ? ? 作用域??? Page
- session ? ? ? ? ? ? 會話對象 ? ? ? ? ? ? ? ? ? ?類型 javax.servlet.http.HttpSession?????? 作用域??? Session
- application ? ? ? ?應(yīng)用程序?qū)ο?? ? ? ? ? ?類型 javax.servlet.ServletContext ? ? ? ? ? 作用域 ? ?Application
- out ? ? ? ? ? ? ? ? ? ? ?輸出對象 ? ? ? ? ? ? ? ? ? ?類型 javax.servlet.jsp.JspWriter ? ? ? ? ? ? 作用域 ? ?Page
- config ? ? ? ? ? ? ? ? 配置對象 ? ? ? ? ? ? ? ? ? ?類型 javax.servlet.ServletConfig ? ? ? ? ? ?作用域??? Page
- page ? ? ? ? ? ? ? ? ? 頁面對象 ? ? ? ? ? ? ? ? ? ?類型 javax.lang.Object ? ? ? ? ? ? ? ? ? ? ? ? ? ? 作用域??? Page
- exception ? ? ? ? ? 例外對象 ? ? ? ? ? ? ? ? ? ?類型 javax.lang.Throwable ? ? ? ? ? ? ? ? ? ? 作用域 ? page
四個作用域:
何為作用域
先讓我們看看效果:
大概流程是這樣的,我們訪問04-01/index.jsp的時候,分別對pageContext, request, session,
application四個作用域中的變量進行累加。(當(dāng)然先判斷這個變量是不是存在,如果變量不存在,則要
把變量初始化成1。)計算完成后就從index.jsp執(zhí)行forward跳轉(zhuǎn)到test.jsp。在test.jsp里再進行一次
累加,然后顯示出這四個整數(shù)來。
從顯示的結(jié)果來看,我們可以直觀的得出結(jié)論:
page里的變量沒法從index.jsp傳遞到test.jsp。只要頁面跳轉(zhuǎn)了,它們就不見了。
request里的變量可以跨越forward前后的兩頁。但是只要刷新頁面,它們就重新計算了。
session和application里的變量一直在累加,開始還看不出區(qū)別,只要關(guān)閉瀏覽器,再次重啟瀏覽器訪問
這頁,session里的變量就重新計算了。
application里的變量一直在累加,除非你重啟tomcat,否則它會一直變大。
而作用域規(guī)定的是變量的有效期限。
如果把變量放到pageContext里,就說明它的作用域是page,它的有效范圍只在當(dāng)前jsp頁面里。
從把變量放到pageContext開始,到j(luò)sp頁面結(jié)束,你都可以使用這個變量。
如果把變量放到request里,就說明它的作用域是request,它的有效范圍是當(dāng)前請求周期。
所謂請求周期,就是指從http請求發(fā)起,到服務(wù)器處理結(jié)束,返回響應(yīng)的整個過程。在這個過程中可能使
用forward的方式跳轉(zhuǎn)了多個jsp頁面,在這些頁面里你都可以使用這個變量。
如果把變量放到session里,就說明它的作用域是session,它的有效范圍是當(dāng)前會話。
所謂當(dāng)前會話,就是指從用戶打開瀏覽器開始,到用戶關(guān)閉瀏覽器這中間的過程。這個過程可能包含多個
請求響應(yīng)。也就是說,只要用戶不關(guān)瀏覽器,服務(wù)器就有辦法知道這些請求是一個人發(fā)起的,整個過程被
稱為一個會話(session),而放到會話中的變量,就可以在當(dāng)前會話的所有請求里使用。
如果把變量放到application里,就說明它的作用域是application,它的有效范圍是整個應(yīng)用。
整個應(yīng)用是指從應(yīng)用啟動,到應(yīng)用結(jié)束。我們沒有說“從服務(wù)器啟動,到服務(wù)器關(guān)閉”,是因為一個服務(wù)
器可能部署多個應(yīng)用,當(dāng)然你關(guān)閉了服務(wù)器,就會把上面所有的應(yīng)用都關(guān)閉了。
application作用域里的變量,它們的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用。
與上述三個不同的是,application里的變量可以被所有用戶共用。如果用戶甲的操作修改了application
中的變量,用戶乙訪問時得到的是修改后的值。這在其他scope中都是不會發(fā)生的,page, request,
session都是完全隔離的,無論如何修改都不會影響其他人的數(shù)據(jù)。
我們使用public Object getAttribute(String name)獲得變量值,使用public void setAttribute
(String name, Object value)將變量值保存到對應(yīng)作用域中。舉個pageContext的例子就是:
// page Integer countPage = (Integer) pageContext.getAttribute("countPage"); if (countPage == null) {pageContext.setAttribute("countPage", 1); } else {pageContext.setAttribute("countPage", countPage + 1); }這里先從pageContext中取出名為countPage的整數(shù),因為返回的都是java.lang.Object類型,所以需要強
制轉(zhuǎn)換成我們需要的整形。這里取得的變量如果不存在就會返回null,通過判斷countPage == null來辨
別變量是否存在,如果不存在就設(shè)置為1,如果存在就進行累加,最后使用setAttribute()方法將修改后
的變量值放入pageContext。
將其中的pageContext換成request, session, application就可以操作其他三個作用域中的變量。
轉(zhuǎn)載于:https://www.cnblogs.com/luckey-zh/p/3648557.html
總結(jié)
以上是生活随笔為你收集整理的jsp的九大内置对象和四大作用域的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u盘卷标怎么去掉 如何删除U盘卷标
- 下一篇: 联想310s笔记本怎么装系统 联想310