九大內置對象 |
||||
內置對象java |
類型web |
說明數據庫 |
做用域數組 |
|
request瀏覽器 |
javax.servlet.ServletRequest安全 |
請求對象——在 一次請求/一個Request請求週期 中傳遞數據,請求結束後,數據不可訪問,用於頁面之間的值的傳遞服務器 |
用戶請求期cookie |
|
responsesession |
javax.servlet.SrvletResponse併發 |
響應對象——用來響應客戶端請求並向客戶端輸出信息 |
頁面執行期 |
|
out |
javax.servlet.jsp.JspWriter |
輸出對象——表示輸出流,該流將做爲請求的響應發送到客戶端 |
頁面執行期 |
|
session |
javax.servlet.http.HttpSession |
會話對象——在一個session會話週期中,用於存儲有關用戶會話的全部信息 |
會話週期 |
|
application |
javax.servlet.ServletContext |
應用程序對象——用於實現用戶之間的數據共享,負責提供應用程序在服務器中運行時的一些全局信息 |
整個程序運行期 |
|
pageContext |
javax.servlet.jsp.PageContext |
頁面上下文對象——此對象提供全部四個做用域層次的屬性查詢和修改能力,它也提供了轉發請求到其它資源和包含其餘資源的方法 |
頁面執行期 |
|
page |
javax.lang.Object |
頁面對象——只在當前JSP頁面內有效,提供對網頁上定義的全部對象的訪問,其表示的就是頁面自己 |
頁面執行期 |
|
config |
javax.servlet.ServletConfig |
配置對象——是ServletConfig的實例,代理當前jsp頁面配置,提供配置信息 |
頁面執行期 |
|
Execpiton |
javax.lang.Throwable |
例外對象——此對象指JSP文件運行時所產生的例外對象,也就是JSP引擎在執行代碼時拋出的異常,此對象不能在通常JSP文件中直接使用,而只能在使用了「<%@ page isErrorPage="true"%>」的JSP文件中使用,也就是說只有在page指令中具備屬性isErrorPage="true"時纔有效 |
頁面執行期 |
Out對象時一個輸出流,用來向客戶端輸出數據。Out對象用於各類數據的輸出。其經常使用方法以下。
1. out.print():輸出各類類型數據。
2.out.newLine():輸出一個換行符。
3.out.close():關閉流。
out 對象方法 |
|||
返回類型 |
方法名稱 |
說明 |
|
void |
clear() |
清除輸出緩衝區的內容,可是不輸出到客戶端 |
|
void |
clearBuffer() |
清除輸出緩衝區的內容,並輸出到客戶端 |
|
void |
close() |
關閉輸出流,清除全部內容 |
|
void |
flush() |
輸出緩衝區裏面的數據 |
|
int |
getBufferSize() |
獲取以kb爲單位的目前緩衝區大小 |
|
int |
getRemaining() |
獲取以kb爲單位的緩衝區中未被佔用的空間大小 |
|
boolean |
isAutoFlush() |
是否自動刷新緩衝區 |
|
void |
newLine() |
輸出一個換行字符 |
|
void |
print(Object) |
將指定類型的數據輸出到Http流,不換行 |
|
void |
println(Object) |
將指定類型的數據輸出到Http流,並輸出一個換行符 |
|
Appendable |
append(char c | CharSequence cxq, int start, int end | CharSequence cxq ) |
將一個字符或者實現了CharSequence接口的對象添加到輸出流的後面 |
1.request的getParameter()方法是最爲經常使用的,使用此方法能夠得到上一頁面的所提交的參數值、例如:註冊頁面(reginput.jsp)經過HTML表單爲註冊提交頁面(reginfo.jsp)提交了兩個參數,
名稱分別爲name和pwd,經過調用request.getParameter("name")和request.getParameter("pwd")就能夠獲取這兩個參數的值
2.在註冊頁面中,出現了多個複選框,複選框的名字都是channel,在註冊提交頁面中使用getParameterValues("channel")方法就能夠獲取一個置字符串是數組,能夠該數組中存儲的是全部選中的
複選框對應的值。
3.request對象的setCharacterEncoding()方法用於設置字符集,能夠用來解決中文亂碼問題,
爲何會出現中文亂碼問題?
經常使用字符集編碼有ASCII,ISO-8859-1,GB2312,GBK,Unicode,UTF-8等,java在其內部使用Unicode字符集來表示字符,這樣就存在Unicode字符集和本地字符集進行轉換的過程。在Web應用中,
一般都包括了瀏覽器,Web服務器,Web應用程序和數據庫等部分,每一部分都有可能使用不一樣的字符集,從而致使字符數據在各類不一樣的字符集之間轉換時,出現亂碼問題。
request 對象方法 |
|||
返回類型 |
方法名稱 |
說明 |
|
Object |
getAttribute(String name) |
返回由name指定的屬性值,該屬性不存在時返回null |
|
Enumeration |
getAttributeNames() |
返回request對象的全部屬性名稱的集合 |
|
String |
getAuthType() |
返回用來保護servlet的認證方法的名稱,未受保護時返回null |
|
String |
getCharacterEncoding() |
返回請求中的字符編碼方法,能夠在response對象中設置 |
|
int |
getContentLength() |
返回請求的BODY的長度,不能肯定長度時返回-1。能夠在response中設置 |
|
String |
getContentType() |
返回在response中定義的內容類型 |
|
String |
getContentPath() |
返回請求的路徑 |
|
Cookie[] |
getCookies() |
返回客戶端全部的Cookie的數組 |
|
Enumeration |
getHeaderNames() |
返回全部HTTP頭的名稱的集合 |
|
Enumeration |
getHeaders(String name) |
返回指定HTTP頭的全部值的集合 |
|
String |
getHeader(String name) |
返回指定名稱的HTTP頭的信息 |
|
long |
getDateHeader(String name) |
返回指定名稱的Data類型的HTTP頭的信息 |
|
int |
getIntHeader(String name) |
返回指定名稱的Int類型的HTTP頭的信息 |
|
ServletInputStream |
getInputStream() |
返回請求的輸入流 |
|
Locale |
getLocale() |
返回當前頁的Locale對象(此對象有兩個方法,分別是getDisplayCountry和getDisplayLanguage),能夠在response中設定 |
|
Enumeration |
getLocales() |
返回請求中全部的Locale對象的集合 |
|
String |
getLocalName() |
獲取響應請求的服務器端主機名 |
|
String |
getLocalAddr() |
獲取響應請求的服務器端地址 |
|
int |
getLocalPort() |
獲取響應請求的服務器端端口 |
|
String |
getMethod() |
獲取客戶端向服務器端發送請求的方法(GET、POST) |
|
String |
getParameter(String name) |
獲取客戶端發送給服務器端的參數值 |
|
Map |
getParameterMap() |
該方法返回包含請求中全部參數的一個Map對象 |
|
Enumeration |
getParameterNames() |
返回請求中全部參數的集合 |
|
String[] |
getParameterValues(String name) |
得到請求中指定參數的全部值 |
|
String |
getQueryString() |
返回get方法傳遞的參數字符串,該方法不分解出單獨的參數 |
|
String |
getPathInfo() |
取出請求中處於ServletPath和QueryString之間的額外信息 |
|
String |
getPathTranslated() |
返回用getPathInfo()方法取得的路徑信息的實際路徑 |
|
String |
getProtocol() |
返回請求使用的協議。能夠是HTTP1.1或者HTTP1.0 |
|
BufferedReader |
getReader() |
返回請求的輸入流對應的Reader對象,該方法和getInputStream()方法在一個頁面中只能調用一個 |
|
String |
getRemoteAddr() |
獲取發出請求的客戶端IP地址 |
|
String |
getRemoteHost() |
獲取發出請求的客戶端主機名 |
|
String |
getRemoteUser() |
返回通過客戶端驗證的用戶名,未經驗證返回null |
|
int |
getRemotePort() |
返回發出請求的客戶端主機端口 |
|
String |
getRealPath(String path) |
返回給定虛擬路徑的物理路徑 |
|
RequestDispatcher |
getRequestDispatcher(String path) |
按給定的路徑生成資源轉向處理適配器對象(轉發) |
|
String |
getRequestedSessionId() |
返回請求的session的標識 |
|
String |
RequestURI() |
返回發出請求的客戶端地址,可是不包括請求的參數字符串 |
|
StringBuffer |
getRequestURI() |
返回響應請求的服務器端地址 |
|
String |
getScheme() |
獲取協議名稱,缺省值爲HTTP協議 |
|
String |
getServerName() |
返回響應請求的服務器名稱 |
|
String |
getServletPath() |
獲取客戶端所請求的腳本文件的文件路徑 |
|
int |
getServerPort() |
獲取響應請求的服務器端主機端口號 |
|
void |
removeAttribute(String name) |
在屬性列表中刪除指定名稱的屬性 |
|
void |
setAttribute(String name, Object value) |
在屬性列表中添加/刪除指定的屬性 |
|
void |
setCharacterEncoding(String charset) |
設置請求的字符編碼格式 |
|
HttpSession |
getSession() | getSession(boolean create) |
獲取session,若是create爲true,在無session的狀況下建立一個 |
|
boolean |
isRequestedSessionIdFromCookie() |
檢查請求的會話ID是否爲經過Cookie傳入 |
|
boolean |
isRequestedSessionIdFromURL() |
檢查請求的會話ID是否爲經過URL傳入 |
|
boolean |
isRequestedSessionIdValid() |
檢查請求的會話ID是否仍然有效 |
|
boolean |
isSecure() |
檢查請求是否使用安全連接,若是HTTPS等 |
|
boolean |
isUserInRole(String role) |
檢查已經經過驗證的用戶是否在是role所指定的角色 |
|
Principal |
getUserPrincipal() |
返回包含用戶登錄名的一個java.security.Principal對象 |
response對象:
1.對客戶端的請求做出迴應,將Web服務器處理後的結果發回客戶端。
2.屬於javax.servlet.HttpServletResponse接口的實例。
response 對象方法 |
|||
返回類型 |
方法名稱 |
說明 |
|
void |
addCookie(Cookie cookie) |
添加一個Cookie對象,保存客戶端信息 |
|
void |
addDateHeader(String name, long value) |
添加一個日期類型的HTTP頭信息,覆蓋同名的HTTP頭信息 |
|
void |
addHeader(String name, String value) |
添加一個HTTP頭,覆蓋同名的舊HTTP頭 |
|
void |
addIntHeader(String name, int value) |
添加一個整型的HTTP頭,覆蓋同名的舊HTTP頭 |
|
boolean |
containsHeader(String name) |
判斷指定的HTTP頭是否存在 |
|
String |
encodeRedirectURL(String url) |
對sendRedirect()方法使用的URL進行編碼 |
|
String |
encodeURL(String url) |
將URL予以編碼,回傳包含session ID的URL |
|
void |
flushBuffer() |
強制把當前緩衝區的內容發送到客戶端 |
|
int |
getBufferSize() |
取得以kb爲單位的緩衝區大小 |
|
String |
getCharacterEncoding() |
獲取響應的字符編碼格式 |
|
String |
getContentType() |
獲取響應的類型 |
|
Locale |
getLocale() |
獲取響應的Locale對象 |
|
ServletOutputStream |
getOutputStream() |
返回客戶端的輸出流對象 |
|
PrintWriter |
getWriter() |
獲取輸出流對應的writer對象 |
|
boolean |
isCommitted() |
判斷服務器端是否已經將數據輸出到客戶端 |
|
void |
reset() |
清空buffer中的全部內容 |
|
void |
sendError(int xc | int xc, String msg) |
發送錯誤,包括狀態碼和錯誤信息 |
|
void |
sendRedirect(String locationg) |
把響應發送到另一個位置進行處理(轉發) |
|
void |
setBufferSize(int size) |
設置以kb爲單位的緩衝區大小 |
|
void |
setCharacterEncoding(String charset) |
設置響應使用的字符編碼格式 |
|
void |
setContentLength(int length) |
設置響應的BODY長度 |
|
void |
setContentType(String type) |
設置響應的類型 |
|
void |
setDateHeader(String name, long value) |
設置指定名稱的Data類型的HTTP頭的值 |
|
void |
setHeader(String name, String value) |
設置指定名稱的HTTP頭的值 |
|
void |
setIntHeader(String name, int value) |
設置指定名稱的int類型的HTTP頭的值 |
|
void |
setStatus(int xc) |
設置響應狀態碼,新值會覆蓋當前值 |
轉發圖解:
重定向圖解:
若是想從一個頁面重定向到另外一個目標頁面,這個時候使用的是轉發操做,
request.getRequestDispatcher("main.jsp").forward(request,response);
重定向和轉發:
01.從客戶端發送的請求數量來看,重定向是向服務器發送了兩次請求。而轉發是服務器內部進的操做,只發送了一次請求,request對象中的數據能夠保留 。
02.從URL顯示的角度來講:重定向這兩次請求都是直接受瀏覽器干預的。也就是說重定向後url地址欄裏看到的地址發生變化了。而轉發是由服務器內部從一個資源頁面定位到另外一個資源頁面,並無通過瀏覽器干預,因此url地址欄沒有發生改變。
結論:要想在request中保存數據,那麼就使用轉發,不然使用重定向。
重定向和轉發有一個重要的不一樣:當使用轉發時,JSP容器將使用一個內部的方法來調用目標頁面,新的頁面繼續處理同一個請求,而瀏覽器將不會知道這個過程。 與之相反,重定向方式的含義是第一個頁面通知瀏覽器發送一個新的頁面請求。由於,當你使用重定 向時,瀏覽器中所顯示的URL會變成新頁面的URL, 而當使用轉發時,該URL會保持不變。重定向的速度比轉發慢,由於瀏覽器還得發出一個新的請求。同時,因爲重定向方式產生了一個新的請求,因此通過一次重定向後,request內的對象將沒法使用。
怎麼選擇是重定向仍是轉發呢?一般狀況下轉發更快,並且能保持request內的對象,因此他是第一選擇。可是因爲在轉發以後,瀏覽器中URL仍然指向開始頁面,此時若是重載當前頁面,開始頁面將會被從新調用。若是你不想看到這樣的狀況,則選擇轉發。
不要僅僅爲了把變量傳到下一個頁面而使用session做用域,那會無端增大變量的做用域,轉發也許能夠幫助你解決這個問題。
重定向:之前的request中存放的變量所有失效,並進入一個新的request做用域。
轉發:之前的request中存放的變量不會失效,就像把兩個頁面拼到了一塊兒。
1. 重定向和轉發有一個重要的不一樣:當使用轉發時,JSP容器將使用一個內部的方法來調用目標頁面,新的頁面繼續處理同一個請求,而瀏覽器將不會知道這個過程。 與之相反,重定向方式的含義是第一個頁面通知瀏覽器發送一個新的頁面請求。由於,
當你使用重定向時,瀏覽器中所顯示的URL會變成新頁面的URL, 而當使用轉發時,該URL會保持不變。重定向的速度比轉發慢,由於瀏覽器還得發出一個新的請求。同時,因爲重定向方式產生了一個新的請求,因此通過一次重定向後,request內的對象將沒法使用。
怎麼選擇是重定向仍是轉發呢?一般狀況下轉發更快,並且能保持request內的對象,因此他是第一選擇。可是因爲在轉發以後,瀏覽器中URL仍然指向開始頁面,此時若是重載當前頁面,開始頁面將會被從新調用。若是你不想看到這樣的狀況,則選擇轉發。
2. 不要僅僅爲了把變量傳到下一個頁面而使用session做用域,那會無端增大變量的做用域,轉發也許能夠幫助你解決這個問題。
重定向:之前的request中存放的變量所有失效,並進入一個新的request做用域。
轉發:之前的request中存放的變量不會失效,就像把兩個頁面拼到了一塊兒。
重定向過程:
客戶瀏覽器發送http請求----》
web服務器接受後發送302響應要求客戶瀏覽器發送一個新的http請求----》
客戶端瀏覽器接受此響應後在發送一個新的http請求到服務器----》
服務器根據此請求尋找資源併發送給客戶,
它能夠重定向到任意URL,
不能共享request範圍內的數據。
轉發過程:
客戶瀏覽器發送http請求----》
web服務器接受此請求後調用內部的一個方法在容器內部完成請求處理和轉發動做----》
將目標資源發送給客戶,它只能在同一個web應用中使用,能夠共享request範圍內的數據。
怎麼選擇是重定向仍是轉發呢?一般狀況下轉發更快,並且能保持request內的對象,
因此他是第一選擇。可是因爲在轉發以後,瀏覽器中URL仍然指向開始頁面,
此時若是重載當前頁面,開始頁面將會被從新調用。若是你不想看到這樣的狀況,則選擇轉發。
仍是老樣子先看看圖:
TTP協議是無狀態的,即信息沒法經過HTTP協議自己進傳遞。爲了跟蹤用戶的操做狀態,ASP應用SESSION對象。JSP使用一個叫HttpSession的對象實現一樣的功能。HTTPSession 是一個創建在cookies 和URL-rewriting上的高質量的界面。
Session的信息保存在服務器端,Session的id保存在客戶機的cookie中。事實上,在許多服務器上,若是瀏覽器支持的話它們就使用cookies,可是若是不支持或廢除了的話就自動轉化爲URL-rewriting,session自動爲每一個流程提供了方便地存儲信息的方法。
Session通常在服務器上設置了一個30分鐘的過時時間,當客戶中止活動後自動失效。Session 中保存和檢索的信息不能是基本數據類型如 int, double等,而必須是java的相應的對象,如Integer, Double。
Httpsession具備以下API:
getId 此方法返回惟一的標識,這些標識爲每一個session而產生。當只有一個單一的值與一個session聯合時,或當日志信息與先前的sessions有關時,它被看成鍵名用。
GetCreationTime 返回session被建立的時間。最小單位爲千分之一秒。爲獲得一個對打印輸出頗有用的值,可將此值傳給Date constructor 或者GregorianCalendar的方法setTimeInMillis。
GetLastAccessedTime 返回session最後被客戶發送的時間。最小單位爲千分之一秒。
GetMaxInactiveInterval 返回總時間(秒),負值表示session永遠不會超時。
getAttribute 取一個session相聯繫的信息。(在jsp1.0中爲 getValue)
Integer item = (Integer) session.getAttrobute("item") //檢索出session的值並轉化爲整型
setAttribute 提供一個關鍵詞和一個值。會替換掉任何之前的值。(在jsp1.0中爲putValue)
session.setAttribute("ItemValue", itemName); // ItemValue 必須不是must簡單類型
在應用中使用最多的是getAttribute和setAttribute。現以一個簡單的例子來講明session的應用, test1.jsp(信息寫入session),test2.jsp(從session讀出信息)。
1 test1.jsp 2 3 <HTML> 4 5 <HEAD> 6 7 <TITLE> Document </TITLE> 8 9 </HEAD> 10 11 <BODY BGCOLOR="#FFFFFF"> 12 session.setAttribute("str",new String(「this is test」)); 13 </BODY> 14 15 </HTML> 16 test2.jsp 17 <HTML> 18 19 <HEAD> 20 <TITLE> New Document </TITLE> 21 22 </HEAD> 23 24 <BODY BGCOLOR="#FFFFFF"> 25 <% 26 String ls_str=null; 27 ls_str=(String)session.getAttribute("str"); 28 out.println(「從session裏取出的值爲:」+ls_str); 29 %> 30 </BODY> 31 32 </HTML>