1、out隱含對象 (輸出對象)
直接用於在JSP頁面輸出內容
javax.servlet.jsp.JspWriter(抽象類) 繼承自java.io.Writer
JSP中的out對象最終被轉化成servlet中的JspWriter對象
2、request內置對象 (請求對象)
用於獲取Http請求相關信息,比如查詢字符串,表單數據
javax.servlet.http.HttpServletRequest
3、page對象 (頁面對象)
表示對應單個JSP頁面, servlet中如下聲明:
final java.lang.Object page = this; // page表示當前的servlet對象,並且是Object類型
4、pageContext (頁面上下文)
final javax.servlet.jsp.PageContext pageContext;
頁面上下文可以使用setAttribute(String, String) 設置當前頁面中所存儲的信息,頁面間不共享數據
使用getAttribute(String)方法獲取在頁面上下文中設置的屬性
5、session對象(會話對象)
會話對象可以保存用戶的基本信息, 如一個用戶登錄到一個網站,該網站可以記錄此用戶的信息,並且用戶信息在網站的所有頁面間
共享
會話信息存儲在服務器端(數據庫,文件系統,WEB容器本身實現的session存儲)
在A頁面中使用session對象的setAttribute(String, String) 方法存儲數據,能在其他頁面中直接使用
session.getAttribute(String)方法獲取數據
javax.servlet.http.HttpSession session = null;
對Tomcat WEB容器來說,一個會話的持有時間為30分鍾(會話超時時間,單位為分鍾)
在conf目錄的web.xml
<session-config> <session-timeout>30</session-timeout> </session-config>
多用於用戶登錄時存儲用戶信息,或者購物車等需要多頁面間共享單個用戶數據的情況
6、application對象(應用程序對象)
整個應用都能使用的,不限於某個用戶。所有用戶都能訪問的數據應該放在application對象中
同樣有setAttribute(String, String)和getAttribute(String)方法
final javax.servlet.ServletContext application;
7、response對象(響應對象)
response.sendRedirect("url") 重定向到某個頁面
8、config對象(servlet配置信息)
final javax.servlet.ServletConfig config;
為JSP頁面配置servlet
<servlet> <servlet-name>configServlet</servlet-name> <jsp-file>/config.jsp</jsp-file><!-- 由哪個JSP頁面轉化成的servlet --> <init-param> <!-- servlet初始化參數 --> <param-name>configName</param-name> <param-value>myValue</param-value> </init-param> <load-on-startup>1</load-on-startup><!-- 在web容器啟動時被初始化 --> </servlet> <servlet-mapping> <servlet-name>configServlet</servlet-name> <url-pattern>/config</url-pattern> </servlet-mapping>
在config.jsp頁面中由config對象的getInitParameter()獲取初始化參數
9、exception對象(異常對象)
java.lang.Throwable exception =
如果想要使用exception對象,則使用該對象的頁面(錯誤處理頁)必須在page指令中聲明isErrorPage="true"
10、隱含對象的作用范圍
1、pageScope 只能作用於頁面 page, out, pageContext
2、requestScope 作用於Http請求,到了另外一個頁面,request失效 request
由頁面A轉發到頁面B,則request同時作用於頁面A和頁面B
3、sessionScope session作用域, 用於所有頁面 session
4、applicationScope 應用程序作用域,作用於整個應用程序的所有用戶的所有頁面 application
javax.serlvet.jsp.PageContext
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.APPLICATION_SCOPE
11、Cookie
保存網站信息到客戶端瀏覽器, 這個數據可以輕易地被獲取到
JSP中,通過Cookie對象保存信息,key-value
通過response.addCookie(Cookie)添加cookie到瀏覽器端
通過request.getCookies()方法獲取由客戶端發送過來的Cookie對象數組,如果沒有cookie,則返回 null
所以服務端需要進行null判斷
1)cookie信息是在瀏覽器中的,但並不是所有的瀏覽器都支持cookie功能;
2)cookie對象不能單獨使用,必須和request對象或response對象結合使用;
3)不同的瀏覽器中存儲的cookie不是通用的。例如:IE存儲的cookie只有IE自己使用;
4)存儲在瀏覽器中的cookie對任何Web服務器都是開放的,所以寫入的cookie可能被其它網頁讀取或覆蓋掉
轉發和重定向:
轉發:
WEB容器內部由一個JSP頁面轉發到另外一個JSP頁面,客戶端地址欄URL不會發生改變
request.getRequestDispatcher("url").forward(request, response);
轉發時指定url前可以加"/", 轉發中url相對於ContextPath
轉發可以用request的setAttribute給目標頁面傳遞參數,目標頁面通過request.getAttribute()方法獲取傳遞過來的參數
重定向:
實際是告訴瀏覽器由一個頁面跳轉到另外一個頁面,客戶端瀏覽器地址欄會發生改變,顯示出目標地址
HTTP Response Status Code: 狀態碼為302
response.sendRedirect("url");
在重定向中,URL相對於ContextPath來重定向, 所以不需要在url前加“/”
http://localhost:8080/JSPInnerObject/home.jsp
如果加了“/”, http://localhost:8080/home.jsp 404 Not Found
重定向如果想要傳遞參數到目標url,則需要使用查詢字符串
response.sendRedirect("http://localhost:8080/login.jsp?name=aa");