JSP 九個隱含JSP對象http://www.cnblogs.com/bmbm/archive/2012/01/17/2342238.html
www.cnblogs.com/bmbm/archive/2012/01/17/2342238.html
一、request對象
? ? ? ? 客戶端的請求信息被封裝在request對象中,通過它才能了解到客戶的需求,然后做出響應。它是HttpServletRequest類的實例
request常用方法方 法 說 明
1? object getAttribute(String name) 返回指定屬性的屬性值
(2? String getCharacterEncoding() 返回字符編碼方式)
3? getRequestDispatcher轉發(fā)request.getRequestDispatcher("t1.jsp").forward(request, response);?
4? String getParameter(String name) 返回name指定參數(shù)的參數(shù)值
5? String[] getParameterValues(String name) 返回包含參數(shù)name的所有值的數(shù)組
(6? String getProtocol() 返回請求用的協(xié)議類型及版本號)
(7? String getServerName() 返回接受請求的服務器主機名)
(8? int getServerPort() 返回服務器接受此請求所用的端口號)
9? String getRemoteAddr() 返回發(fā)送此請求的客戶端IP地址
(10? String getRemoteHost() 返回發(fā)送此請求的客戶端主機名)
11? void setAttribute(String key,Object obj) 設置屬性的屬性值
(12 String getContentType() 得到請求體的MIME類型 ) ??
歡迎:<%=request.getAttribute("name") %>? ? 請求方式:<%=request.getMethod()%>
請求的資源:<%=request.getRequestURI()%>
請求用的協(xié)議:<%=request.getProtocol()%>
請求的文件名:<%=request.getServletPath()%>
請求的服務器的IP:<%=request.getServerName()%>
請求服務器的端口:<%=request.getServerPort()%>
客戶端IP地址:<%=request.getRemoteAddr()%>
客戶端主機名:<%=request.getRemoteHost()%>
二、response對象
處理 JSP 生成的響應
將響應發(fā)送給客戶端,它是HttpServletResponse類的實例。
1 PrintWriter getWriter() 返回可以向客戶端輸出字符的一個對象
2 void setContentType(String type) 設置響應的MIME類型
3 sendRedirect(java.lang.String location) 重新定向客戶端的請求
面試:sendRedirect和getRequestDispatcher(即轉發(fā)和重定向的區(qū)別)
重定向response.sendRedirect("success.jsp");
轉發(fā):request.getRequestDispatcher("success.jsp").forward(request,response);
1轉發(fā):一次請求,一次響應。地址欄的url不會改變。在服務器端執(zhí)行,所以必須在同一臺服務器上。轉發(fā)速度快。
可以通過request.getAttribute()獲取request.setAttribute()中的值
2重定向:兩次請求。地址欄的url會隨之改變?yōu)槎ㄏ蚝蟮哪莻€url。在客戶端執(zhí)行,所以可以在不同的服務器上。重定向速度慢。不能通過request.getAttribute()獲取request.setAttribute()中的值
三、out對象
out對象是JspWriter類的實例,是向客戶端輸出內(nèi)容常用的對象
序號 方 法 說 明
(1? void clear() 清除緩沖區(qū)的內(nèi)容)
(2? void clearBuffer() 清除緩沖區(qū)的當前內(nèi)容)
3? void flush() 清空流
(4? int getBufferSize() 返回緩沖區(qū)以字節(jié)數(shù)的大小,如不設緩沖區(qū)則為0)
(5? int getRemaining() 返回緩沖區(qū)還剩余多少可用)
(6? boolean isAutoFlush() 返回緩沖區(qū)滿時,是自動清空還是拋出異常)
7? void close() 關閉輸出流
(8 print() 和println()輸出信息)
四、session對象
指的是客戶端與服務器的一次會話,從客戶連到服務器的一個WebApplication開始,直到客戶端與服務器斷開連接為止。
注:它的生命周期為瀏覽器不關閉或時間沒到(默認時間為30分鐘)
常用方法:
1 session.setMaxInactiveInterval(2);//設置過期時間,單位為秒,默認是30分鐘
2? void invalidate() 取消SESSION,使SESSION不可用
3boolean isNew() 返回服務器創(chuàng)建的一個SESSION,客戶端是否已經(jīng)加入(自:過期時間是否到)
(4? long getCreationTime() 返回SESSION創(chuàng)建時間)
(5? public String getId() 返回SESSION創(chuàng)建時JSP引擎為它設的惟一ID號)
(6? long getLastAccessedTime() 返回此SESSION里客戶端最近一次請求時間)
(7? int getMaxInactiveInterval() 返回兩次請求間隔多長時間此SESSION被取消(ms))
8 getAttribute(String name) 返回指定屬性的屬性值
9 void setAttribute(String key,Object obj) 設置屬性的屬性值
session是運行在服務器端案例,
注意:session的生命周期較長,一般開發(fā)中不宜使用過多存儲
五、application對象
application對象實現(xiàn)了用戶間數(shù)據(jù)的共享,可存放全局變量。它開始于服務器的啟動,直到服務器的關閉,在此期間,此對象將一直存在
方 法 說 明,通常用于開發(fā)計算器
1? Object getAttribute(String name) 返回給定名的屬性值
2? void setAttribute(String name,Object obj) 設定屬性的屬性值
(3? void removeAttribute(String name) 刪除一屬性及其屬性值)
(4? String getServerInfo() 返回JSP(SERVLET)引擎名及版本號)
(5? String getRealPath(String path) 返回一虛擬路徑的真實路徑)
(6? ServletContext getContext(String uripath) 返回指定WebApplication的application對象)
(7? int getMajorVersion() 返回服務器支持的Servlet API的最大版本號)
(8? int getMinorVersion() 返回服務器支持的Servlet API的最大版本號)
(9? String getMimeType(String file) 返回指定文件的MIME類型)
(10? URL getResource(String path) 返回指定資源(文件及目錄)的URL路徑)
<%!? int i=300000;? %>? <%? application.setAttribute("num", i++);? ? %>? ? 目前你是第<%=application.getAttribute("num") %>位訪問者
<%? ? out.print(application.getResource("q4.jsp"));? ? out.print("上下文路徑:"+application.getContextPath());? ? out.print("服務器信息:"+application.getServerInfo());? ? %>
六、exception對象
? ? ? ? exception對象是一個例外對象,當一個頁面在運行過程中發(fā)生了例外,就產(chǎn)生這個對象。如果一個JSP頁面要應用此對象,就必須把isErrorPage設為true,否則無法編譯。他實際上是java.lang.Throwable的對象
1? String getMessage() 返回描述異常的消息
2? String toString() 返回關于異常的簡短描述消息
3? void printStackTrace() 顯示異常及其棧軌跡
4? Throwable FillInStackTrace() 重寫異常的執(zhí)行棧軌跡
?1<%@ page language="java" contentType="text/html;charset=gb2312" import="java.util.*" isErrorPage="true"%><%=exception %>
2<%@ page language="java" contentType="text/html;charset=gb2312" errorPage="ExceptionDemo.jsp"%><%int[] arr = {1,2,4};out.println(arr[3]);%>
(自:出問題頁面 第一行加errorPage="error.jsp" error.jsp頁面 第一行加isErrorPage="true" 錯誤信息<%=exception%>)
七、page對象
page對象就是指向當前JSP頁面本身,生存周期就是當前頁,在實際開發(fā)中一般使用pageContext
八、pageContext對象
pageContext對象提供了對JSP頁面內(nèi)所有的對象及名字空間的訪問
九、config對象
config對象是在一個Servlet初始化時,JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時所要用到的參數(shù)(通過屬性名和屬性值構成)以及服務器的有關信息(通過傳遞一個ServletContext對象)
序號 方 法 說 明
1? ServletContext getServletContext() 返回含有服務器相關信息的ServletContext對象
2? String getInitParameter(String name) 返回初始化參數(shù)的值
隱式對象的作用域
page只能在本頁有效,request本頁或轉發(fā)頁有效,session只要瀏覽器不關都有效或在有效時間內(nèi)都有效,application只要服務器不關機都有效,即范圍大小為:
page<request<session<application
pageContext.setAttribute("num0", 18);//作用域:本頁
request.setAttribute("num1",8);//作用域:本頁+轉發(fā)頁
//session作用域:本頁+任意打開的網(wǎng)頁(只要瀏覽器不關閉或默認30分鐘)
session.setAttribute("num2", 88);
//application作用域:本頁+任意網(wǎng)頁(只要服務不重啟)
application.setAttribute("num3", 888);
<%? out.print("page作用域:"+pageContext.getAttribute("num0"));? out.print("
request作用域:"+request.getAttribute("num1"));? out.print("
session作用域:"+session.getAttribute("num2"));? out.print("
application作用域:"+application.getAttribute("num3"));? %>
表單亂碼new String(ss.getBytes("ISO-8859-1"), "utf-8")