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來調用這些對象比較麻煩,都可以直接調用相關方法實現具體的功能。