1. 程式人生 > >jsp的九大內建物件的簡介及其應用

jsp的九大內建物件的簡介及其應用

(1)九大內建物件分別為:out物件,request物件,response物件,session物件,application物件,page物件,pageContext物件,config物件,exception物件
(2)內建物件的介紹:
JSP內建物件是web容器建立的一組物件,不用使用new關鍵字就可以使用的物件。
例如:
<% out.println(“hello”); %>
(3)web程式的請求與響應模式
使用者請求:request
伺服器響應:response
即,使用者瀏覽網頁的時侯就是給伺服器傳送一次請求,請求訪問此網頁,所以這是伺服器會在允許的範圍內給使用者響應,這就構成了請求與響應的模式
(4)out物件
緩衝區:Buffer,所謂緩衝區就是記憶體的一塊用來保護臨時資料
out物件是javax.servlet.jsp.JspWriter類的例項,是向客戶端輸出內容常用的物件通常為out.getWrite().println();
常用的out的方法:
1. void println()向客戶端列印字串
2. void clear() 清除緩衝區的內容,如果在flush之後會丟擲異常
3. void clearBuffer() 清除緩衝區的內容,如果在flush之後呼叫不會丟擲異常
4. void flush() 將緩衝區內容輸出到客戶端
5. int getBufferSize() 返回緩衝區以位元組數的大小,如不設緩衝區則為0
6. int getRemaining() 返回緩衝區還剩餘多少可以用
7. boolean isAutoFlush() 返回緩衝區是,是自動清空還是丟擲異常
8. void close() 關閉輸出流

(5)get 與 post 提交方式的區別

get提交:以明文的方式通過URL提交資料,資料在URL中可以看到。提交的資料最多不超過2KB。安全性較低但效率比post方式高。適合提交資料量不大,安全性不高的資料。比如:查詢、搜尋等功能。
post提交:將使用者提交的資訊封裝在HTML Header內。適合提交資料量大,安全性高的使用者資訊。比如:註冊、修改、上傳等功能。
(6)request物件
request物件是javax.servlet.http.HttpServletRequest類的例項,表示客戶端的一次請求,客戶端的請求資訊被封裝在request物件中,通過它才能瞭解到客戶的需求,然後做出反應。request物件具有請求域,即完成客戶端的請求之前,該物件一直有效。
常用方法:

  1. String getParameter(String name)範湖name制定引數的引數值
  2. String[] getParameterValues(String name)返回包含引數name的所有值得陣列
  3. void setAttribute(String ,Object)儲存此請求中屬性
  4. object getAttribute(String name) 返回指定屬性的屬性值
  5. String getContentType() 得到請求體的MIME型別
  6. String getProtocol() 返回請求用的協議型別及版本號
    1. String getServerName() 返回接受請求的伺服器主機名
    2. void setCharacterEncoding(String) 設定接收客戶端請求內容的字符集
    3. int getServerPort() 返回伺服器接受此請求所用的埠號
    4. String getCharacterEncoding() 返回字元編碼方式
    5. void setCharacterEncoding() 設定請求的字元編碼方式
    6. int getContentLength() 返回請求體的長度(以位元組數)
    7. String getRemoteAddr() 返回傳送此請求的客戶端IP地址
    8. String getRealPath(String path) 返回一虛擬路徑的真實路徑
    9. String request.getContextPath() 返回上下文路徑
      補充:
      設定URL傳參的字符集問題:開啟apache安裝目錄,conf–>server.xml,找到Connector標籤,在該標籤內新增URIEncoding=”utf-8”屬性

(7)response物件
response物件是javax.servlet.http.HttpServletResponse類的例項,包含了響應客戶請求的有關資訊,但在JSP中很少直接用到它。response物件具有頁面作用域,即訪問一個頁面時,該頁面內的response物件只能對這次訪問有效,其他頁面的response物件對當前頁面無效。
常用方法:

  1. String getCharacterEncoding() 返回響應用的是何種字元編碼
  2. void setContentType(String type) 設定響應的MIME型別
  3. PrintWriter getWriter() 返回可以向客戶端輸出字元的一個物件(比較 PrintWriter與內建out物件的區別)
    PrintWriter物件輸出的內容總是提前與out內建物件,解決方法是在out物件輸出完後加上out.flusht()清空緩衝區
    1. sendRedirect(String location) 重新定向客戶端的請求

(8)session物件
session表示客戶端與伺服器的一次會話,Web中的session指的是使用者在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是使用者瀏覽這個網站所花費的時間,即session實際上是一個特定的時間概念。在伺服器的記憶體中儲存著不同使用者的session。
session物件是javax.servlet.http.HttpSession類的例項,是一個JSP內建物件,在第一個JSP頁面被裝載時自動建立,完成會話期管理。從一個客戶開啟瀏覽器並連線到伺服器開始,到客戶關閉瀏覽器離開這個伺服器結束,被稱為一個會話。
當一個客戶訪問一個伺服器時,可能會在伺服器的幾個頁面之間切換,伺服器應當通過某種辦法知道這是一個客戶,這就需要session物件。
session圖片解釋
常用方法
1. long getCreationTime() 返回session建立時間
2. String getId() 返回session建立時JSP引擎為它設的唯一ID號
3. Object setAttribute(String name,Object value) 使用指定名稱將物件繫結到此會話
4. Object getAttribute(String name) 返回與此會話中的指定名稱繫結在一起的物件,如果沒有物件繫結在該名稱下,則返回NULL
5. String[] getValueNames() 返回一個包含此session中所有可用屬性的陣列
6. int getMaxInactiveInterval() 返回兩次請求間隔多長時間此session被取消(單位秒)
7. session的生命週期
1) 建立
 當客戶端第一次訪問某個JSP或者Servlet時候,伺服器會為當前會話建立一個SessionId,每次客戶端向服務端傳送請求時,都會將此SessionId攜帶過去,服務端會對此SessionId進行校驗。
2) 活動
 某次會話當中通過超連結開啟的新頁面屬於同一次會話,只有當前會話頁面沒有全部關閉,重新開啟新的瀏覽器視窗訪問同一專案資源時屬於同一次會話。除非本次會話的所有頁面都關閉後再重新訪問某個JSP或者Servlet將會建立新的會話。(注意原有會話還存在,只是這個舊的SessionId仍然存在於服務端,只不過再也沒有客戶端會攜帶它然後交予服務端校驗)
3) 銷燬
 session的銷燬只有三種方式:
 呼叫session.invalidate()方法
 session超時過期
 伺服器重新啟動
設定session有效期
Tomcat預設session超時時間為30分鐘
設定session超時有兩種方式:
1. session.setMaxInactiveInterval(時間); //單位是秒
2. 在web.xml配置
session-config使用的是尖括號<>
session-timeout使用的是尖括號<>
10 //單位是分鐘
/session-timeout使用的是尖括號<>
/session-config 使用的是尖括號<>

(9)application物件

application物件是javax.servlet.ServletContext類的例項,實現了使用者間資料的共享,可存放全域性變數。application物件開始於伺服器啟動,終止於伺服器的關閉,在使用者的前後連線或不同使用者之間的連線中,可以對application物件的同一屬性進行操作。在任何地方對application物件屬性的操作,都將影響到其他使用者對此的訪問。伺服器的啟動和關閉決定了application物件的生命。
常用方法
 void setAttribute(String name,Object value) 使用指定名稱將物件繫結到此會話
 Object getAttribute(String name) 返回與此會話中的指定名稱繫結在一起的物件,如果沒有物件繫結在該名稱下,則返回null
 Enumeration getAttributeNames() 返回所有可用屬性名的列舉
 String getServerInfo() 返回JSP(SERVLET)引擎名及版本號
(10)page物件

page物件就是指向當前JSP頁面本身,有點像類中的this指標,它是java.lang.Object類的例項,具有與Object類相同的方法。
(11)pageContext物件

pageContext物件是javax.servlet.jsp.PageContext類的例項,提供了對JSP頁面內所有的物件及名字空間的訪問,可以訪問到本頁所在的session,也可以取本頁面所在的application的某一屬性值,相當於頁面中所有功能的集大成者。
常用方法
 JspWriter getOut() 返回當前客戶端響應被使用的JspWriter流(out)
 HttpSession getSession() 返回當前頁面中的HttpSession物件(session)
 Object getPage() 返回當前頁的Object物件(page)
 ServletRequest getRequest() 返回當前頁的ServletRequest物件(request)
 ServletResponse getResponse() 返回當前頁的ServletResponse物件(response)
 void setAttribute(String name,Object attribute) 設定屬性及屬性值
 Object getAttribute(String name,int scope) 在指定範圍內取屬性的值
 int getAttributeScope(String name) 返回某屬性的作用範圍
 void forward(String relativeUrlPath) 使當前頁面重導到另一個頁面
 void include(String relativeUrlPath) 在當前位置包含另一個檔案

(12)config物件
config物件是javax.servlet.ServletConfig類的例項,是在一個Servlet初始化時,JSP引擎向它傳遞資訊用的,此資訊包括Servlet初始化時所要用到的引數(通過屬性名和屬性值構成)以及伺服器的有關資訊(通過傳遞一個ServletContext物件)
常用方法
 ServletContext getServletContext() 返回含有伺服器相關資訊的ServletContext物件
 String getInitParameter(String name) 返回初始化引數的值
 Enumeration getInitParameterNames() 返回Servlet初始化所需所有引數的列舉

(14)exception物件
exception物件是java.lang.Throwable類的例項,是一個異常物件,當一個頁面在執行過程中發生了異常,就產生這個物件。如果一個JSP頁面要應用此物件,就必須把isErrorPage設為true,否則無法編譯。
常用方法
 String getMessage() 返回描述異常的訊息
 String toString() 返回關於異常的簡短描述訊息
 void printStackTrace() 顯示異常及其棧軌跡
 Throwable FillInStackTrace() 重寫異常的執行棧軌跡
例項
(1)error.jsp頁面

<!-- 在丟擲異常的頁面page指令中新增errorPage屬性,屬性值為處理異常的頁面 -->

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="exception.jsp"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    ……
  </head>

  <body>
    <%
        //在此處丟擲異常
        out.print(100/0);
     %>
 </body>
</html>


(2)exception.jsp頁面

<!-- 在處理異常的頁面的page指令中,新增isErrorPage屬性,值為true -->

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
      ……
  </head>

  <body>
   異常訊息:<%=exception.getMessage() %><br>
   異常的字串:<%=exception.toString() %><br>
   異常軌跡:<%=exception.getStackTrace() %>
</body>
</html>