1. 程式人生 > >jsp的九大內置對象(查詢資料,搬磚所得)

jsp的九大內置對象(查詢資料,搬磚所得)

win span t對象 fig tro 情況 字節 The class

此筆記大部分摘自大神https://www.cnblogs.com/SimonHu1993/,部分通過網上搜尋補充。

1、Request內置對象(類型:HttpServletRequest 表示一次用戶請求)
該對象封裝了用戶提交的信息,通過調用該對象相應的方法可以獲取封裝的信息。即使用Request內置對象可以獲取用戶提交的信息。

當Request內置對象獲取客戶提交的漢字字符時會出現亂碼問題,必須進行特殊處理。
首先,將獲取的字符串用ISO-8859-1進行編碼,並將編碼存放到一個字節數組中,然後再將這個數組轉化為字符串對象。
String textContent = request.getParameter("boy");

byte[ ] b=textContent.getBytes("ISO-8859-1");
textContent = new String(b,"UTF-8");

Request常用的方法:
①getParameter(String strTextName) 獲取表單提交的信息。
String strName=request.getParameter("name");
②getProtocol() 獲取客戶使用的協議。
String strProtocol=request.getProtocol();
③getServletPath() 獲取客戶提交信息的頁面。
String strServlet=request.getServletPath();
④getMethod() 獲取客戶提交信息的方式,get/post。
String strMethod = request.getMethod();
⑤getHeade() 獲取HTTP頭文件中的accept、accept-encoding和Host的值。
String strHeader = request.getHeader("accept");
⑥ getRermoteAddr() 獲取客戶的IP地址。
String strIP = request.getRemoteAddr();
⑦getRemoteHost() 獲取客戶機的名稱。
String clientName = request.getRemoteHost();
⑧getServerName() 獲取服務器名稱。
String serverName = request.getServerName();
⑨getServerPort() 獲取服務器的端口號。
int serverPort = request.getServerPort();
⑩ getParameterNames() 獲取客戶端提交的所有參數的名字。
Enumeration enum = request.getParameterNames();
while(enum.hasMoreElements()){
String s=(String)enum.nextElement();
out.println(s);
}

2、Response內置對象(類型:HttpServletResponse 表示一次響應)
對客戶的請求做出動態的響應,向客戶端發送數據。

動態響應contentType屬性
當一個用戶訪問一個JSP頁面時,如果該頁面用page指令設置頁面的contentType屬性時text/html,那麽JSP引擎將按照這個屬性值做出反應。
如果要動態改變某個屬性值來響應客戶,就需要使用Response內置對象的setContentType(String s)方式來改變contentType的屬性值。

格式:response.setContentType(String s); 參數s可取text/html,application/x-msexcel,application/msword等。

Response重定向
在某些情況下,當響應客戶時,需要將客戶重新引導至另一個頁面,可以使用Response的sendRedirect(URL)方法實現客戶的重定向。
例如:
response.sendRedirect("index.jsp");

3、Session內置對象(類型:HttpSession 表示一個用戶信息)
什麽是Session對象
Session對象是一個JSP內置對象,它在第一個JSP頁面被裝載時自動創建,完成會話期管理。
從一個客戶打開瀏覽器並連接到服務器開始,到客戶關閉 瀏覽器離開這個服務器結束,被稱為一個會話。
當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間切換,服務器應當通過某種辦法知道這是一個客 戶,就需要Session對象。

Session對象的ID
當一個客戶首次訪問服務器上的一個JSP頁面時,JSP引擎產生一個Session對象,
同時分配一個String類型的ID號,JSP引擎同時將這換個 ID號發送到客戶端,存放在Cookie中,
這樣Session對象,直到客戶關閉瀏覽器後,服務器端該客戶的Session對象才取消,並且和客戶的會 話對應關系消失。
當客戶重新打開瀏覽器再連接到該服務器時,服務器為該客戶再創建一個新的Session對象。

Session對象的常用方法
public String getId():獲取Session對象編號。
public void setAttribute(String key,Object obj):將參數Object指定的對象obj添加到Session對象中,並為添加的對象指定一個索引關鍵字。
public Object getAttribute(String key):獲取Session對象中含有關鍵字的對象。
public Boolean isNew():判斷是否是一個新的客戶。

4、Application內置對象(共享的對象)(類型:ServletContext 表示服務器的上下文環境)
什麽時Application對象?
服務器啟動後就產生了這個Application對象,當客戶在所訪問的網站的各個頁面之間瀏覽時,這個Application對象都時同一個,
直到服務器關閉。但是與Session對象不同的時,所有客戶的Application對象都是同一個,即所有客戶共享這個內置的Application對象。

Application對象的常用方法
setAttribute(String key,Object obj):將參數Object指定的對象obj添加到Application對象中,並為添加的對象指定一個索引關鍵字。
getAttribute(String key):獲取Application對象中含有關鍵字的對象。

5、Out對象(類型:JspWriter 可以使用其輸出信息)
Out對象是一個輸出流,用來向客戶端輸出數據。Out對象用於各種數據的輸出。其常用方法如下。
out.print():輸出各種類型數據。
out.newLine():輸出一個換行符。
out.close():關閉流。

6、Config內置對象(類型:ServletConfig 可以獲取配置文件的一些信息)
config內置對象主要是用來獲取配置文件中的初始化參數。
config 對象代表當前JSP 配置信息,但JSP 頁面通常無須配置,因此也就不存在配置信息。
該對象在JSP 頁面中非常少用,但在Servlet 則用處相對較大。
因為Servlet 需要配置在web.xml 文件中,可以指定配置參數。

JSP內置對象config是javax.servlet.ServletConfig類的實例。
ServletConfig封裝在web.xml中配置的初始化參數;在JSP中可以通過config來獲取這些參數值。
獲取配置信息的方法是getInitParameter(String paramName);

①將頁面保存在 WEB-INF文件夾下是最安全的,一般不可見,可以通過映射路徑來進行訪問
②.通過config對象可以取得初始化的配置參數
String dbDriver = config.getInitParameter("driver") ;
String dbUrl = config.getInitParameter("url") ;

註意:如果希望JSP頁面可以獲取web.xml配置文件中的配置信息就必須通過為該JSP頁面在web.xml文件中分配的路徑來訪問頁面,
因為只有這樣訪問JSP頁面才會讓配置文件起作用。


7、Page內置對象(Object類的page對象,相當於this 表示一個頁面對象)
page對象就是指jsp頁面本身,是java.lang.Object實例。其常用方法與Object類類似。
處理JSP網頁,是Object類的一個實例,指的是JSP實現類的實例,即它也是JSP本身,只有在JSP頁面範圍之內才是合法的。
常用方法:
class getClass() 獲取此Object類
int hashCode() 獲取Object的hash碼
boolean equals(Object obj) 判斷兩個對象是否相等
void copy(Object obj) 把此Object對象復制的到指定的Object對象中
Object clone() 克隆此Object對象
String toString() 把Object對象轉換為String對象
void notify() 喚醒一個指定的線程
void notifyAll() 喚醒所有等待中的線程
void wait(int time) 使一個線程等待指定時間
void wait() 使一個線程等待,直到被喚醒

8、PageContext對象(類型:javax.servlet.jsp.PageContext 表示的是頁面上下文環境jsp)
Jsp引入了一個名位PageContext的類,通過它可以訪問頁面的許多屬性。
PageContext類擁有getRequest,getResponse,getOut,getSession等方法。
pageContext變量存儲與當前頁面相關聯的PageContext對象的值。

9、Exception對象(註意:exception對象僅僅在異常處理頁面中在有效。)(類型:Throwable 表示異常信息)
在處理異常的網頁中可以直接訪問exception隱式對象。
exception對象是Throwable實例,代表JSP腳本中產生的錯誤和異常,是JSP頁面機制的一部分。
在JSP腳本中無須處理異常,即使該異常是checked異常。實際上,JSP腳本所包含的所有可能出現的異常都可以交給錯誤處理頁面進行處理。
註意:由於只有JSP腳本、輸出表達式才會生成_jspx_page_context方法裏的代碼,所以這兩個部分的代碼無須處理異常。
但是JSP的聲明部分依然強制處理checked異常,JSP的異常處理機制對JSP聲明不起作用。
在JSP的異常處理機制中,一個異常處理頁面可以處理多個JSP頁面腳本部分的異常。異常處理頁面通過Page指令的errorPage屬性確定。



如果方法需要訪問多個與頁面相關的對象,傳遞pageContext要比傳遞request,response,out等的獨立引用更容易。(雖然兩種方式都能達到同樣的目的)


補充:
Cookie對象
什麽是Cookie?
Cookie是Web服務器保存在用戶硬盤上的一段文本。Cookie允許一個Web站點在用戶電腦上保存信息並且隨後再取回它。
舉例來說,一個Web站點可能會為每一個訪問者產生一個唯一的ID,然後以Cookie文件的形式保存在每個用戶的機器上。
如果用戶使用IE瀏覽器訪問Web,用戶就會看到所有保存在自己硬盤上的Cookie。
它們最常存放的地方是:C:\Windows\Cookies。Cookie是以“關鍵字key=值value”的格式來保存記錄的。

創建一個Cookie對象
調用Cookie對象的構造函數就可以創建Cookie對象。Cookie對象的構造函數有兩個字符串參數:Cookie名字和Cookie值。
例如:Cookie c = new Cookie("username","john");

將Cookie對象傳送到客戶端
在JSP中,如果要將封裝好的Cookie對象傳送到客戶端,可使用Response對象的addCookie()方法。
例如:response.addCookie(c)。

讀取保存到客戶端的Cookie
使用Request對象的getCookie()方法,執行時將所有客戶端傳來的Cookie對象以數組的形式排列,
如果要取出符合需要的Cookie對象,就需要循環比較數組內每個對象的關鍵字。
例如:
Cookie[] c = request.getCookies();
if(c != null)
for(int i = 0;i < c.length;i++){
if("username".equals(c.getName()))
out.println(c.getValue());
}

設置Cookie對象的有效時間
調用Cookie對象的setMaxAge()方法便可以設置Cookie對象的有效時間,
例如:Cookie c = new Cookie("username","john");
c.setMaxAge(3600);

Cookie應用
Cookie對象的典型應用時用來統計網站的訪問人數。
由於代理服務器、緩存等的使用,唯一能幫助網站精確統計來訪人數的方法就是為每個訪問者建立一個唯一ID。
使用Cookie,網站可以完成以下工作。
測定多少人訪問過。
測定訪問者有多少是新用戶(即第一次來訪),多少是老用戶。
測定一個用戶多久訪問一次網站
當一個用戶第一次訪問時,網站在數據庫中建立一個新的ID,並把ID通過Cookie傳送給用戶。
用戶再次來訪時,網站把該用戶ID對應的計數器加1,得到用戶的來訪次數。

jsp的九大內置對象(查詢資料,搬磚所得)