日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jsp的九大内置对象和四大作用域

發布時間:2024/10/12 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jsp的九大内置对象和四大作用域 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看到網上一些Jsp內置對象介紹的都不是很全,今天我把各位大神的整理了一下。

JSP九大對象:內置對象(又叫隱含對象,有9個內置對象):不需要預先聲明就可以在腳本代碼和表達式中隨意使用。

一、request對象:代表的是來自客戶端的請求,例如我們在FORM表單中填寫的信息等,是最常用的對象。客戶端的請求信息被封裝在request對象中,通過它才能了解到客戶的需求,然后做出響應。它是HttpServletRequest類的實例。作用域為request(用戶請求期)。

常用方法:

? ?1?object?getAttribute(String?name)?返回指定屬性的屬性值?

  2?Enumeration?getAttributeNames()?返回所有可用屬性名的枚舉?

  3?String?getCharacterEncoding()?返回字符編碼方式?

  4?int?getContentLength()?返回請求體的長度(以字節數)?

  5?String?getContentType()?得到請求體的MIME類型?

  6?ServletInputStream?getInputStream()?得到請求體中一行的二進制流?

  7?String?getParameter(String?name)?返回name指定參數的參數值?

  8?Enumeration?getParameterNames()?返回可用參數名的枚舉?

  9?String[]?getParameterValues(String?name)?返回包含參數name的所有值的數組?

  10?String?getProtocol()?返回請求用的協議類型及版本號?

  11?String?getScheme()?返回請求用的計劃名,如:http.https及ftp等?

  12?String?getServerName()?返回接受請求的服務器主機名?

  13?int?getServerPort()?返回服務器接受此請求所用的端口號?

  14?BufferedReader?getReader()?返回解碼過了的請求體?

  15?String?getRemoteAddr()?返回發送此請求的客戶端IP地址?

  16?String?getRemoteHost()?返回發送此請求的客戶端主機名?

  17?void?setAttribute(String?key,Object?obj)?設置屬性的屬性值?

  18?String?getRealPath(String?path)?返回一虛擬路徑的真實路徑

二、response對象:對象代表的是對客戶端的響應,也就是說可以通過response 對象來組織發送到客戶端的數據。但是由于組織方式比較底層,所以不建議普通讀者使用,需要向客戶端發送文字時直接使用。它是HttpServletResponse類的實例。作用域為page(頁面執行期)。

常用方法:

? ?1?String?getCharacterEncoding()?返回響應用的是何種字符編碼?

  2?ServletOutputStream?getOutputStream()?返回響應的一個二進制輸出流?

  3?PrintWriter?getWriter()?返回可以向客戶端輸出字符的一個對象?

  4?void?setContentLength(int?len)?設置響應頭長度?

  5?void?setContentType(String?type)?設置響應的MIME類型?

  6?sendRedirect(java.lang.String?location)?重新定向客戶端的請求?

三、session對象:指的是客戶端與服務器的一次會話,從客戶連到服務器的一個WebApplication開始,直到客戶端與服務器斷開連接為止。它是HttpSession類的實例。作用域session(會話期—)。

常用方法:

? ? 1?long?getCreationTime()?返回SESSION創建時間?

  2?public?String?getId()?返回SESSION創建時JSP引擎為它設的惟一ID號?

  3?long?getLastAccessedTime()?返回此SESSION里客戶端最近一次請求時間?

  4?int?getMaxInactiveInterval()?返回兩次請求間隔多長時間此SESSION被取消(ms)?

  5?String[]?getValueNames()?返回一個包含此SESSION中所有可用屬性的數組?

  6?void?invalidate()?取消SESSION,使SESSION不可用?

  7?boolean?isNew()?返回服務器創建的一個SESSION,客戶端是否已經加入?

  8?void?removeValue(String?name)?刪除SESSION中指定的屬性?

  9?void?setMaxInactiveInterval()?設置兩次請求間隔多長時間此SESSION被取消(ms)

四、out對象 :out對象是JspWriter類的實例,是向客戶端輸出內容常用的對象 。作用域為page(頁面執行期)

常用方法:

? ? 1?void?clear()?清除緩沖區的內容?

  2?void?clearBuffer()?清除緩沖區的當前內容?

  3?void?flush()?清空流?

  4?int?getBufferSize()?返回緩沖區以字節數的大小,如不設緩沖區則為0?

  5?int?getRemaining()?返回緩沖區還剩余多少可用?

  6?boolean?isAutoFlush()?返回緩沖區滿時,是自動清空還是拋出異常?

  7?void?close()?關閉輸出流?

五、page對象:page對象就是指向當前JSP頁面本身,有點象類中的this指針,它是java.lang.Object類的實例 。“page” 對象代表了正在運行的由JSP文件產生的類對象,不建議一般讀者使用。?作用域 ? ?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對象轉換成String類的對象?

  7?void?notify()?喚醒一個等待的線程?

  8?void?notifyAll()?喚醒所有等待的線程?

  9?void?wait(int?timeout)?使一個線程處于等待直到timeout結束或被喚醒?

  10?void?wait()?使一個線程處于等待直到被喚醒?

  11?void?enterMonitor()?對Object加鎖?

  12?void?exitMonitor()?對Object開鎖

六、application對象:實現了用戶間數據的共享,可存放全局變量。它開始于服務器的啟動,直到服務器的關閉,在此期間,此對象將一直存在;這樣在用戶的前后連接或不同用戶之間的連接中,可以對此對象的同一屬性進行操作;在任何地方對此對象屬性的操作,都將影響到其他用戶對此的訪問。服務器的啟動和關閉決定了application對象的生命。它是ServletContext類的實例。作用域application

常用方法:

? ?1?Object?getAttribute(String?name)?返回給定名的屬性值?

  2?Enumeration?getAttributeNames()?返回所有可用屬性名的枚舉?

  3?void?setAttribute(String?name,Object?obj)?設定屬性的屬性值?

  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()?返回服務器支持的Servlet?API的最大版本號?

  9?int?getMinorVersion()?返回服務器支持的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頁面內所有的對象及名字空間的訪問,也就是說他可以訪問到本頁所在的SESSION,也可以取本頁面所在的application的某一屬性值,他相當于頁面中所有功能的集大成者,它的本類名也叫pageContext。用域??? Pageconfig對象

常用方法:

? ? 1?JspWriter?getOut()?返回當前客戶端響應被使用的JspWriter流(out)?

  2?HttpSession?getSession()?返回當前頁中的HttpSession對象(session)?

  3?Object?getPage()?返回當前頁的Object對象(page)?

  4?ServletRequest?getRequest()?返回當前頁的ServletRequest對象(request)?

  5?ServletResponse?getResponse()?返回當前頁的ServletResponse對象(response)?

  6?Exception?getException()?返回當前頁的Exception對象(exception)?

  7?ServletConfig?getServletConfig()?返回當前頁的ServletConfig對象(config)?

  8?ServletContext?getServletContext()?返回當前頁的ServletContext對象(application)?

  9?void?setAttribute(String?name,Object?attribute)?設置屬性及屬性值?

  10?void?setAttribute(String?name,Object?obj,int?scope)?在指定范圍內設置屬性及屬性值?

  11?public?Object?getAttribute(String?name)?取屬性的值?

  12?Object?getAttribute(String?name,int?scope)?在指定范圍內取屬性的值?

  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)?返回指定范圍內可用的屬性名枚舉?

  18?void?release()?釋放pageContext所占用的資源?

  19?void?forward(String?relativeUrlPath)?使當前頁面重導到另一頁面?

  20?void?include(String?relativeUrlPath)?在當前位置包含另一文件?

八、config對象:config對象是在一個Servlet初始化時,JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時所要用到的參數(通過屬性名和屬性值構成)以及服務器的有關信息(通過傳遞一個ServletContext對象)。作用域??? Page

常用方法:

? ?1?ServletContext?getServletContext()?返回含有服務器相關信息的ServletContext對象?

  2?String?getInitParameter(String?name)?返回初始化參數的值?

  3?Enumeration?getInitParameterNames()?返回Servlet初始化所需所有參數的枚舉

九、exception對象:是一個例外對象,當一個頁面在運行過程中發生了例外,就產生這個對象。如果一個JSP頁面要應用此對象,就必須把isErrorPage設為true,否則無法編譯。他實際上是java.lang.Throwable的對象.作用域??? page

常用方法:

? ? 1?String?getMessage()?返回描述異常的消息?

  2?String?toString()?返回關于異常的簡短描述消息?

  3?void?printStackTrace()?顯示異常及其棧軌跡?

  4?Throwable?FillInStackTrace()?重寫異常的執行棧軌跡


JSP中九大內置對象為:
  • request ? ? ? ? ? ? ?請求對象  ? ? ? ? ? ? ? ?類型 javax.servlet.ServletRequest ? ? ? ? 作用域 ? ?Request
  • response ? ? ? ? ? 響應對象 ? ? ? ? ? ? ? ? ? 類型 javax.servlet.SrvletResponse ? ? ? ?作用域 ? ?Page
  • pageContext ? ? 頁面上下文對象 ? ? ? ?類型 javax.servlet.jsp.PageContext ? ? ? 作用域??? Page
  • session ? ? ? ? ? ? 會話對象 ? ? ? ? ? ? ? ? ? ?類型 javax.servlet.http.HttpSession?????? 作用域??? Session
  • application ? ? ? ?應用程序對象 ? ? ? ? ? ?類型 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四個作用域中的變量進行累加。(當然先判斷這個變量是不是存在,如果變量不存在,則要

把變量初始化成1。)計算完成后就從index.jsp執行forward跳轉到test.jsp。在test.jsp里再進行一次

累加,然后顯示出這四個整數來。

從顯示的結果來看,我們可以直觀的得出結論:

page里的變量沒法從index.jsp傳遞到test.jsp。只要頁面跳轉了,它們就不見了。

request里的變量可以跨越forward前后的兩頁。但是只要刷新頁面,它們就重新計算了。

session和application里的變量一直在累加,開始還看不出區別,只要關閉瀏覽器,再次重啟瀏覽器訪問

這頁,session里的變量就重新計算了。

application里的變量一直在累加,除非你重啟tomcat,否則它會一直變大。

而作用域規定的是變量的有效期限。

如果把變量放到pageContext里,就說明它的作用域是page,它的有效范圍只在當前jsp頁面里。

從把變量放到pageContext開始,到jsp頁面結束,你都可以使用這個變量。

如果把變量放到request里,就說明它的作用域是request,它的有效范圍是當前請求周期。

所謂請求周期,就是指從http請求發起,到服務器處理結束,返回響應的整個過程。在這個過程中可能使

用forward的方式跳轉了多個jsp頁面,在這些頁面里你都可以使用這個變量。

如果把變量放到session里,就說明它的作用域是session,它的有效范圍是當前會話。

所謂當前會話,就是指從用戶打開瀏覽器開始,到用戶關閉瀏覽器這中間的過程。這個過程可能包含多個

請求響應。也就是說,只要用戶不關瀏覽器,服務器就有辦法知道這些請求是一個人發起的,整個過程被

稱為一個會話(session),而放到會話中的變量,就可以在當前會話的所有請求里使用。

如果把變量放到application里,就說明它的作用域是application,它的有效范圍是整個應用。

整個應用是指從應用啟動,到應用結束。我們沒有說“從服務器啟動,到服務器關閉”,是因為一個服務

器可能部署多個應用,當然你關閉了服務器,就會把上面所有的應用都關閉了。

application作用域里的變量,它們的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用。

與上述三個不同的是,application里的變量可以被所有用戶共用。如果用戶甲的操作修改了application

中的變量,用戶乙訪問時得到的是修改后的值。這在其他scope中都是不會發生的,page, request,

session都是完全隔離的,無論如何修改都不會影響其他人的數據。

我們使用public Object getAttribute(String name)獲得變量值,使用public void setAttribute

(String name, Object value)將變量值保存到對應作用域中。舉個pageContext的例子就是:

// page Integer countPage = (Integer) pageContext.getAttribute("countPage"); if (countPage == null) {pageContext.setAttribute("countPage", 1); } else {pageContext.setAttribute("countPage", countPage + 1); }
這里先從pageContext中取出名為countPage的整數,因為返回的都是java.lang.Object類型,所以需要強

制轉換成我們需要的整形。這里取得的變量如果不存在就會返回null,通過判斷countPage == null來辨

別變量是否存在,如果不存在就設置為1,如果存在就進行累加,最后使用setAttribute()方法將修改后

的變量值放入pageContext。

將其中的pageContext換成request, session, application就可以操作其他三個作用域中的變量。


轉載于:https://www.cnblogs.com/luckey-zh/p/3648557.html

總結

以上是生活随笔為你收集整理的jsp的九大内置对象和四大作用域的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。