JSP基礎(三)JSP內置對象
JSP內置對象
JSP有以下九種內置對象,包括:
request,請求對象
response,響應對象
pageContext,頁面上下文對象
session,會話對象
application,應用程序對象
out,輸出對象
config,配置對象
page,頁面對象
exception,異常對象
從本質上講,JSP的這些內置對象其實都是由特定的Java類所產生的,在服務器運行時根據情況自動生成。
JSP內置對象映射表
對象名 |
類型 |
作用域 |
request |
javax.servlet.ServletRequest |
Request |
response |
javax.servlet.ServletResponse |
Page |
pageContext |
javax.servlet.jsp.PageContxt |
Page |
session |
javax.servlet.http.HttpSession |
Session |
application |
javax.servlet.ServletContext |
Application |
out |
javax.servlet.jsp.JspWriter |
Page |
config |
javax.servlet.ServletConfig |
Page |
page |
java.lang.Object |
Page |
exception |
java.lang.Throwable |
Page |
request對象
request對象代表的是來自客戶端的請求,例如在form表單中填寫的信息等,是最常用的對象。
關於它的方法使用較多的是getParameter、getParameterNames和getParameterValues,通過調用這幾個方法來獲取請求對象中所包含的參數的值。
request的setAttribute與getAttribute方法一般都是成對出現的,首先通過setAttribute方法設置屬性與屬性值,然后通過getAttribute方法根據屬性獲取到與該屬性對應的對象值。
setAttribute與getAttribute方法都是在服務器端內部執行的,客戶端不知道服務器端是否執行過這兩個方法。
request的getParameter方法的作用是獲取到客戶端通過表單或url請求參數發送過來的參數值,是客戶端與服務器端之間的交互,服務器端要想獲取到客戶端發送過來的數據,就需要使用getParameter方法來獲取。
沒有與getParameter方法對應的setParameter方法。
request對象內數據的存活范圍就是在request對象的存活范圍內,當客戶端想服務器端發送一個請求,服務器向客戶端返回一個響應后,該請求對象就被銷毀了;
之后再向服務器端發送新的請求時,服務器會創建新的request對象,該request對象與之前的request對象沒有任何關系,因此也無法獲得在之前的request對象中所存放的任何數據。
response對象
response對象代表的是對客戶端的響應,也就是說可以通過response對象來組織發送到客戶端的數據。
但是由於組織方式比較底層,所以不建議一般人使用。
需要向客戶端發送文字時直接用out對象即可。
session對象
session對象代表服務器與客戶端所建立的會話,當需要在不同的JSP頁面中保留客戶信息的情況下使用,比如在線購物、客戶軌跡跟蹤等。
HTTP是無狀態協議;
Web Server對每一個客戶端請求都沒有歷史記憶;
session用來保存客戶端狀態信息。
瀏覽器不關閉,session對象會一直存在(姑且這樣認為),且session對象只有一個。
如果瀏覽器關閉重啟,會創建新的session對象。
application對象
application對象負責提供應用程序在服務器中運行時的一些全局信息,常用的方法有getMimeType和getRealPath等。
運用實例:網頁訪問計數器。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'Counter.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% if(application.getAttribute("counter") == null) { application.setAttribute("counter", "1"); } else { String strnum = null; strnum = application.getAttribute("counter").toString(); int icount = 0; icount = Integer.valueOf(strnum).intValue(); icount++; application.setAttribute("counter", Integer.toString(icount)); } %> 您是第<%=application.getAttribute("counter") %>位訪問者! </body> </html>
運行結果就是訪問到該頁面之后顯示你是第幾位訪客,刷新之后數目會增加,更換瀏覽器或者更換客戶端地址都會使其訪問值正常遞增。
application的存活范圍比request和session都要大。
只要服務器沒有關閉,application對象中的數據就會一直存在,在整個服務器的運行過程當中,application對象只有一個,它會被所有的用戶共享。
其中getRealPath這個方法可以獲取資源在服務器上的物理路徑(絕對路徑),常用來獲取上傳文件時要存儲文件的路徑。
out對象
out對象代表了向客戶端發送數據的對象,與response對象不同,通過out對象發送的內容將是瀏覽器需要顯示的內容,是文本一級的,可以通過out對象直接向客戶端寫一個由程序動態生成的HTML文件。
常用的方法除了print和println之外,還包括clear、clearBuffer、flush、getBufferSize和getRemaining,這是因為out對象內部包含了一個緩沖區,所以需要一些對緩沖區進行操作的方法。
參考資料
聖思園張龍老師視頻教程。