JSP中的九大內置對象


JSP隱含對象(又稱內置對象),是指可以不加聲明和創建就可以在JSP頁面腳本(Java程序片和Java表達式)中使用的成員變量。

在JSP中一共預先定義了九個隱含對象,分別為request, response, pageContext, session, application, out, config, page和exception。 
JSP隱含對象的類型如下表所示:

隱含對象 類型 作用域
request javax.servlet.http.HttpServletRequest request
response javax.servlet.http.HttpServletResponse 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 java.lang.Object page
exception java.lang.Throwable page

request

request對象代表的是javax.servlet.http.HttpServletRequest類的對象,它封裝了由客戶端生成的HTTP請求的所有細節,主要包括HTTP頭信息、系統信息、請求方式和請求參數等。通過request對象提供的相應方法可以處理客戶端瀏覽器提交的HTTP請求中的各項參數。 
request獲取客戶端信息的常用方法如下表所示:

方法 功能
getHeader(String name) 獲得HTTP協議定義的文件頭信息
getHeaders(String name) 返回指定名字的request Header的所有值,其結果是一個枚舉型的實例
getHeadersNames() 返回所有request Header的名字,其結果是一個枚舉型的實例
getMethod() 獲得客戶端向服務器端傳送數據的方法,如get、post、header、trace等
getProtocol() 獲得客戶端向服務器端傳送數據所依據的協議名稱
getRequestURI() 獲得發出請求字符串的客戶端地址,不包括請求的參數
getRequestURL() 獲得發出請求字符串的客戶端地址
getRealPath() 返回當前請求文件的絕對路徑
getRemoteAddr() 獲取客戶端的IP地址
getRemoteHost() 獲取客戶端的主機名
getServerName() 獲取服務器的名字
getServerPath() 獲取客戶端所請求的腳本文件的文件路徑
getServerPort() 獲取服務器的端口號
getParameter() 獲取客戶端通過表單提交過來的參數值
getScheme() 獲取請求使用的模式(協議)名字

例: 
request.jsp

<%@ page contentType="text/html;charset=UTF-8" %> <html> <head><title> request內置對象的實例 </title></head> <body> <form aciton="request.jsp"> Get request results: <input type="text" name="myname"> <input type="submit" name="get value"> </form> 獲取客戶提交信息的方式:<%=request.getMethod()%> <br> 獲取請求信息中的協議名名字和版本號:<%=request.getProtocol()%> <br> 獲取發出請求字符串的客戶端地址:<%=request.getRequestURI()%> <br> 獲取發出請求字符串的客戶端地址:<%=request.getRequestURL()%> <br> 獲取提交請求的客戶端的IP地址:<%=request.getRemoteAddr()%> <br> 獲取服務器的端口號:<%=request.getServerPort()%> <br> 獲取接受請求的服務器名稱:<%=request.getServerName()%> <br> 獲取客戶端所請求的腳本文件的文件路徑:<%=request.getServletPath()%> <br> 獲取Http協議定義的文件頭信息Host的值:<%=request.getHeader("host")%> <br> 獲取Http協議定義的文件頭信息User-Agent的值:<%=request.getHeader("user-agent")%> <br> 獲取Http協議定義的文件頭信息accept-language的值:<%=request.getHeader("accept-language")%> <br> 獲取請求文件的絕對路徑:<%=request.getRealPath("request.jsp")%> <br> 獲取客戶端通過表單提交過來的參數值:<%=request.getParameter("myname")%> <br> 獲取客戶端的主機名:<%=request.getRemoteHost()%> <br> 獲取請求中使用的模式(協議)名字:<%=request.getScheme()%> <br> </body> </html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

運行結果:

獲取客戶提交信息的方式:GET 獲取請求信息中的協議名名字和版本號:HTTP/1.1 獲取發出請求字符串的客戶端地址:/request.jsp 獲取發出請求字符串的客戶端地址:http://localhost:8080/request.jsp  獲取提交請求的客戶端的IP地址:127.0.0.1 獲取服務器的端口號:8080 獲取接受請求的服務器名稱:localhost 獲取客戶端所請求的腳本文件的文件路徑:/request.jsp 獲取Http協議定義的文件頭信息Host的值:localhost:8080 獲取Http協議定義的文件頭信息User-Agent的值:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36 獲取Http協議定義的文件頭信息accept-language的值:zh-CN,zh;q=0.8,en;q=0.6 獲取請求文件的絕對路徑:D:\***\我的文檔\Tomcat\apache-tomcat-8.0.35\webapps\ROOT\request.jsp 獲取客戶端通過表單提交過來的參數值:request 獲取客戶端的主機名:127.0.0.1 獲取請求中使用的模式(協議)名字:http
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

response

response對象用於響應客戶請求,向客戶端輸出信息。它封裝了JSP產生的響應,並發送到客戶端以響應客戶端的請求。 
response對象提供了多個方法用來處理HTTP響應,比較常用的方法如下:

方法 功能
setContentLength(int len) 設置響應頭的長度
setContentType(String type) 設置HTTP響應的contentType中的MIME類型
getOutputStream() 返回一個Servlet的輸出流
getWriter() 返回一個PrintWriter對象
getCharacterEncoding() 獲得此時響應所采用的字符編碼類型
sendRedirect(String location) 將請求重新定位到一個不同的URL(頁面)上
setHeader(String headername, String value) 使用指定的頭名字以及相應的值來設置頭信息
addheader(String headername, String value) 把指定的頭名字以及相應值添加到頭信息當中去

session

session在網絡中被稱為會話,它是javax.servlet.http.HttpSession.session類的對象。由於HTTP協議是一種無狀態協議,也就是當一個客戶端向服務器發出請求,服務器接收請求,並返回響應后,該連接就結束了,而服務器是不保存相關的信息。為了彌補這一缺點,HTTP協議提供了session。通過session可以在應用程序的Web頁面間進行跳轉時,保存用戶的狀態,使整個用戶會話一直存在下去,直到關閉瀏覽器。

如果在一個會話中,客戶端長時間不向服務器發出請求,session對象就會自動消失。這取決於服務器,Tomcat服務器默認為30分鍾。

session對象的常用方法如下表所示:

方法 功能
getId() 返回唯一的標識,這些標識為每個session而產生
getCreationTime() 返回session被創建的時間,最小單位為千分之一秒
getLastAccessedTime() 返回客戶端最后一次與會話相關聯的請求時間
getMaxInactiveInterval() 以秒為單位返回會話內兩個請求最大時間間隔
setMaxInactiveInterval() 以秒為單位設置session的有效時間
getAttribute(String key) 通過給定的關鍵字獲取一個存儲在session中相對應的信息
setAttribute(String key, Object obj) 提供一個關鍵詞和一個對象值,然后存在session當中
removeAttribute(String name) 從session會話中移除指定的綁定對象
invalidate() 銷毀session

注意:session中保存和查找的信息不能是基本數據類型,如int、double等,而必須是java對象,如Integer、Double等。

具體例子可參考JSP中的四種范圍屬性

application

application是javax.servlet.ServletContext類的對象。該對象用於保存所有應用程序中的公有數據。它在服務器啟動時自動創建,在服務器停止時銷毀。當application對象沒有被銷毀時,所有用戶都可以共享該application對象。

application對象的常用方法如下表所示:

方法 功能
getInitParameter(String name) 返回已命名的應用程序初始化參數值
getAttributeNames() 返回所有已定義的應用程序初始化參數名的枚舉
getAttribute(String name) 從application對象中獲取指定對象名
setAttribute(String name, Object obj) 保存一個對象信息,並指定給一個名稱
removeAttribute(String name) 從application對象中去掉指定名稱的屬性
getServletInfo() 返回JSP引擎的相關信息
getRealPath(String path) 返回虛擬路徑的真實路徑
getContext(String URLPath) 返回執行Web應用的application對象
getMajorVersion() 返回服務器所支持的Servlet API最大版本號
getMinorVersion() 返回服務器所支持的Servlet API最小版本號
getMineType(String file) 返回指定文件的MIME類型
getResource(String path) 返回指定資源的URL路徑
getResourceAsStream(String path) 返回指定資源的輸入流
getRequestDispatcher(String URLPath) 返回指定資源的RequestDispatcher對象
getServlet(String name) 返回指定名稱的Servlet
getServlets() 返回所有的Servlet,返回類型為枚舉型
getServletNames() 返回所有的Servlet名稱,返回類型為枚舉型
log(String msg) 把指定信息寫入到Servlet的日志文件中
log(String msg, Throwable throwable) 把棧軌跡以及給出的Throwable異常的說明信息寫入Servlet的日志文件

具體例子可參考JSP中的四種范圍屬性

out

out對象用於在Web瀏覽器內輸出信息,並且管理應用服務器上的輸出緩沖區。out對象可以輸出各種數據類型的數據,在輸出非字符串類型的數據時,會自動轉換為字符串進行輸出。

out對象的常用方法如下表所示:

方法 功能
print() 在頁面中打印出字符串信息,不換行
println() 在頁面中打印出字符串信息,並且換行
clear() 清除緩沖區中的內容
clearBuffer() 清除當前緩沖區中的內容
flush() 刷新流
getBufferSize() 獲取緩沖區大小
isAutoFlush() 檢測當前緩沖區已滿時是自動清空還是拋出異常
close() 關閉輸出流

config

config對象主要用於取得服務器的配置信息。當一個Servlet初始化時,容器把某些信息通過config對象傳遞給這個Servlet。

config對象的常用方法如下表所示:

方法 功能
getServletContext() 獲取Servlet上下文
getInitParameter(String name) 返回初始化參數的值
getInitParameterNames() 返回包含了Servlet初始化所需要的所有參數,返回類型是枚舉型
getServletName() 獲取Servlet服務器名

page

page對象代表JSP本身,只有在JSP頁面內才是合法的。page對象本質上是包含當前Servlet接口引用的變量,可以看作是this關鍵字的別名。

page對象的常用方法如下表所示:

方法 功能
getClass() 返回當前Object的類
hashCode() 返回此Object的哈希代碼
toString() 把當前Object類轉換成字符串
equals(Object o) 比較該對象和指定對象是否相等
copy(Object o) 把該對象復制到指定的對象當中去
clone() 對該對象進行克隆

exception

exception對象用來處理JSP文件執行時發生的所有錯誤和異常,只有在page指令中設置為isErrorPage屬性值為true的頁面中才可以被使用,在一般的JSP頁面中使用該對象將無法編譯JSP文件。

exception對象的常用方法如下表所示:

方法 功能
getMessage() 返回exception對象的異常信息字符串
getLocalizedMessage() 返回本地化的異常錯誤信息
toString() 返回關於異常錯誤的簡單信息描述
fillInStackTrace() 重寫異常錯誤的棧執行軌跡

pageContext

pageContext對象是一個比較特殊的對象。它相當於頁面中所有其他對象功能的最大集成者,即使用它可以訪問到本頁面中所有其他對象,例如request、response以及application等。 
pageContext對象常用方法如下表所示:

方法 功能
getRequest() 獲取當前頁面中的request對象
getResponse() 獲取當前頁面中的response對象
getPage() 獲取當前頁面中的page對象
getSession() 獲取當前頁面中的session對象
getOut() 獲取當前頁面中的out對象
getException() 獲取當前頁面中的exception對象
getServletConfig() 獲取當前頁面中的config對象
getServletContext() 獲取當前頁面中的application對象
setAttribute(String name) 給指定的屬性名設置屬性值
getAttribute(String name) 根據屬性名找到相應的屬性值
setAttribute(String name, Object obj, int scope) 在給定的范圍內設置相應的屬性值
getAttribute(String name, int scope) 在指定的范圍內獲取到相應的屬性值
findAttribute(String name) 尋找一個屬性並返回,如果沒有找到則返回一個null
removeAttribute(String name) 通過屬性名刪除掉某個屬性
removeAttribute(String name, int scope) 在指定的某個范圍內刪除某個屬性
getAttributeScope(String scope) 返回某屬性的作用域
getAttributeNamesInScope(int scope) 返回指定范圍內的所有屬性名的枚舉
release() 釋放掉pageContext()所占的所有資源
forward(String relativeURLpath) 使用當前頁面重導到另一個頁面
include(String relativeURLpath) 使用當前位置包含的另一個頁面

pageContext對象在實際JSP開發中一般很少使用,因為request和response等對象均為內置對象,如果通過pageContext來調用這些對象比較麻煩,都可以直接調用相關方法實現具體的功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM