jsp數據交互(一),九大內置對象

 

九大內置對象

九大內置對象

內置對象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"時纔有效

頁面執行期

 

jsp內置對象之Out對象

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接口的對象添加到輸出流的後面

jsp內置對象之request對象

  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對象

 

  JSP內置對象response

    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仍然指向開始頁面,

  此時若是重載當前頁面,開始頁面將會被從新調用。若是你不想看到這樣的狀況,則選擇轉發。

 

 

    JSP內置對象session

        仍是老樣子先看看圖:

          

        

    Session的使用

  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> 

  

順便補個圖

相關文章
相關標籤/搜索