# JSP內置對象
[TOC]
## 概述
在之前的學習中,我們接觸到一些特殊的代碼,比如`out.println()`和`request.xxx()`,在這些代碼里面我們直接可以使用`out`和`request`這兩個對象,而無需去實例化它們。
這是因為在JSP頁面中,已經提前設置了九個內置對象。分別是`request`、`response`、`session`、`application`、`out`、`pagecontext`、`config`、`page`、`exception`
>[info]內置對象,又叫做隱含對象,不需要預先聲明就可以在腳本代碼和表達式中隨意使用
1. 由JSP規范提供,不用編寫者實例化。?
2. 通過Web容器實現和管理?
3. 所有JSP頁面均可使用?
4. 只有在腳本元素的表達式或代碼段中才可使用
接下來,我們就來看看這九大內置對象中幾個重要的對象的常用方法與作用域(指內置對象的影響范圍)
>[warning]作用域(有小到大)
1. pageContext 當前頁面有效(頁面跳轉后無效)
2. request 同一次請求有效(請求轉發后有效,重定向后無效)
3. session 同一次對話有效(同一個瀏覽器在退出關閉之前都有效)
4. application 全局有效(整個項目)
## 幾個重要內置對象
### request
request 對象是 javax.servlet.httpServletRequest類型的對象。 該對象代表了客戶端的請求信息,主要用于接受通過HTTP協議傳送到服務器的數據。request 對象的生命周期只在一次請求中。
所謂的一次請求,是指請求的發生到結束的整個過程,也就是指從http請求發起,到服務器處理結束,返回響應的整個過程。在這個過程中可能使用forward的方式跳轉了多個jsp頁面,在這些頁面里你都可以使用這個變量。
* request.getParameter(String key)
從客戶端發送請求到服務器端是,服務器端接收客戶端的參數,POST/GET 方式都可以。
* request.setAttribute(String key, Object value)
在服務器內部進行頁面跳轉(業務邏輯處理和頁面展現分離)進行數據**對象**的傳遞使用,在接收的頁面使用 request.getAttribute(String key) 獲取對象。
* request.setCharacterEncoding("UTF-8")
設置請求參數時的編碼
### session
session 對象是由服務器自動創建的與用戶請求相關的對象。服務器為每個用戶都生成一個session對象,用于保存該用戶的信息,跟蹤用戶的操作狀態,服務器創建的每個session對象互不干涉。session是會話級別的變量,我們一般使用 session 處理用戶的登陸信息。
簡單的理解,打開一個瀏覽器,無論你打開多少標簽頁, 用 session 存儲的變量都會存在,除非使用 session.removeAttribute() 將其顯式銷毀。
但是要注意一下,session對象本身是存在時間限制的,一般而言超過30分鐘會自動銷毀。
### application
服務器級別的變量,主要服務啟動未關閉,用 application 存儲的變量都會存在,除非顯式銷毀。
## 其他
1. `response`:對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端
2. `pageContext`:作用是取得任何范圍的參數,通過它可以獲取 JSP頁面的一些其他對象
3. `out`:用于在Web瀏覽器內輸出信息
4. `config`:作用是取得服務器的配置信息
5. `page`:代表JSP本身,只有在JSP頁面內才是合法的
6. `exception`:作用是顯示異常信息
## 總結
| 對象名 | 功能 | 類型 | 作用域 |
| --- | --- | --- | --- |
| `request` | 向客戶端請求數據 | javax.servlet.ServletRequest | Request |
| `response` | 封裝了jsp產生的響應,然后被發送到客戶端以響應客戶的請求 | javax.servlet.SrvletResponse | Page |
| `pageContext` | 為JSP頁面包裝頁面的上下文。管理對屬于JSP中特殊可見部分中己經命名對象的該問 | javax.servlet.jsp.PageContext | Page |
| `session` | 用來保存每個用戶的信息,以便跟蹤每個用戶的操作狀態 | javax.servlet.http.HttpSession | Session |
| `application` | 應用程序對象 | javax.servlet.ServletContext | Application |
| `out` | 向客戶端輸出數據 | javax.servlet.jsp.JspWriter | Page |
| `config` | 表示Servlet的配置,當一個Servlet初始化時,容器把某些信息通過此對象傳遞給這個Servlet | javax.servlet.ServletConfig | Page |
| `page` | Jsp實現類的實例,它是jsp本身,通過這個可以對它進行訪問 | javax.lang.Object | Page |
| `exception` | 反映運行的異常 | javax.lang.Throwable | Page |