全部章節 >>>>
本章目錄
3.1 JSP 內置物件簡介
3.1.1 JSP 內置物件概述
3.1.2 JSP 表單處理
3.1.2 request物件
3.1.2 開發第一個 JSP 頁面
3.1.3 實踐練習
3.2 輸入和輸出物件
3.2.1 out 物件
3.2.2 response物件
3.2.3 實踐練習
3.3 作用域通信物件
3.3.1 為什么需要session物件
3.3.1 session物件
3.3.1 session物件方法
3.3.2 application物件
3.3.2 JSP 運算式
3.3.3 pageContext物件
3.3.4 實踐練習
3.4 其他內置物件
3.4.1 exception物件
3.4.2 實踐練習
總結:
3.1 JSP 內置物件簡介
3.1.1 JSP 內置物件概述
| 類別 | 物件名稱 | 作用 |
| 輸入和輸出物件 | out | 用來向客戶端瀏覽器輸出資訊的資料流 |
| request | 客戶端發送的請求資訊 | |
| response | 服務器傳回客戶端的回應資訊 | |
| 作用域通信物件 | session | 為發送請求的客戶端建立會話 |
| application | 保存整個應用程式的共享資訊 | |
| pageContext | 保存當前 JSP 頁面的共享資訊 | |
| Servlet物件 | page | 代表 JSP 網頁本身 |
| config | 讀取初始化引數 | |
| 例外錯誤物件 | exception | 獲取運行時的例外 |
3.1.2 JSP 表單處理
- 網頁中表單是用戶填寫資訊并提交的組件,JSP中如何獲取用戶填寫提交的資料
- JSP 引擎會將客戶端的請求資訊封裝在這個 request 物件中,呼叫request 物件相應的方法就可以獲取對應的封裝資訊

3.1.2 request物件
request物件中封裝的主要請求資訊有以下幾項:
- 請求的 HTTP 協議的傳送檔案頭資訊
- 提交請求的客戶端和服務器端資訊
- 用戶提交的表單資訊
其中最重要的就是用來封裝用戶提交的表單資訊,通過如下方法可以獲取對應資料
| 回傳值 | 方法名 | 說明 |
| String | getParameter(“表單元素name”) | 根據引數name獲取對應值(name即表單元素的name屬性) |
| String[] | getParameterValues(“表單元素name”) | 獲取多個name相同的多個值,復選框使用較多 |
request物件在獲取資料的時候,中文有時會出現亂碼,解決方法如下:
- 針對post請求中文:String name = request.setCharacterEncoding("utf-8"); //設定獲取值的編碼
- 針對get請求中文:String name = new String(request.getParameter("name").getBytes("iso-8859-1"), "utf-8");
3.1.2 開發第一個 JSP 頁面
示例:學生畢業后,在線申請登記,第一步需要填寫身份證號碼,第二步登記個人的資訊,確認資訊無誤后再提交
表單提交到secondPage.jsp處理
<form action="secondPage.jsp">
<table>
<tr>
<td> 身份證號碼:</td>
<td><input type="text" name="idNumber"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value=" 開始報道 ">
</td>
</tr>
</table>
</form>

從請求中獲取身份證號碼引數資料
secondPage.jsp中可以獲取身份證號碼引數值
<%
String idNumber = request.getParameter("idNumber");
%>
//顯示身份證號碼關鍵代碼
<tr>
<td> 身份證號碼:</td>
<td><input type=“text” name=“idNumber”
value=“<%=idNumber%>“ disabled="disabled" />
</td>
</tr>

實體:經過secondPage.jsp再次提交到第三個界面thirdPage.jsp接收
<%
String name = request.getParameter("name");// 姓名
String gender = request.getParameter("gender");// 年齡
String regrationNumber = request.getParameter("registrationNumber");// 報到證編號
String university = request.getParameter("university");// 畢業院校
String major = request.getParameter("major");// 專業
String education = request.getParameter("education");// 學歷
String employment = request.getParameter("employment");// 就業情況
%>
//可以將接收的資料展示在界面上

3.1.3 實踐練習
3.2 輸入和輸出物件
3.2.1 out 物件
out 物件主要用于向客戶端輸出各種資料型別的內容,默認緩沖區8K,可以通過page指令設定
out 物件被封裝為 javax.servlet.jsp.JspWriter 類,在實際應用中 out 物件會通過 JSP 容器變換為 java.io.PrintWriter 類,常用方法如下
| 方法名 | 作用 |
| void print( 資料) | 輸出資料到頁面 |
| void?flush() | 強制輸出緩沖區里的資料 |
| void?close() | 關閉輸出流 |
| void?clearBuffer() | 清慷訓沖區 |
| void?clear() | 清除螢屏顯示資料 |
示例:利用out物件輸出資訊到JSP頁面
<%
//模擬性別變數資料
String gender = “male”;
if ("male".equals(gender)) {
out.print(" 男 ");
} else if ("female".equals(gender)) {
out.print(" 女 ");
}
%>
利用out物件還可以輸出html代碼,比如<br /> 讓瀏覽器決議
3.2.2 response物件
response 物件用于回應客戶請求,封裝了 JSP 產生的回應,并發送到客戶端以回應客戶端的請求
response物件常用功能如下:
- 處理 HTTP 檔案頭
- 頁面重定向
客戶端在進行請求時會發送許多額外的資訊,這些就是頭資訊,服務器端也可以根據需要向客戶端設定頭資訊,如設定每秒重繪一次頁面,顯示當前時間
示例:利用response物件設定頭部重繪屬性為1秒,瀏覽器打開該頁面每秒會重繪一次
<%@ page import="java.io.*,java.util.*"%>
<%@ page import="java.text.*"%>
<body>
<div>
<h3>
<%
response.setHeader("refresh", "1");// 每隔 1 秒重繪 1 次
%>
當前時間:<%=new SimpleDateFormat("HH:mm:ss").format(new Date())%>
</h3>
</div>
</body>

response 物件提供的 sendRedirect() 方法將網頁重定向到另一個頁面
重定向操作支持將地址重定向到不同的主機上,在客戶端瀏覽器上將會得到跳轉的地址,并重新發送請求鏈接,且地址欄顯示新地址
新頁面路徑及名稱: response.sendRedirect(“path”);
path:用于指定目標路徑,可以是相對路徑,也可以是不同主機的其他 URL 地址 如果地址寫錯,則會出現頁面找不到錯誤
示例:在畢業生網上報道系統中,如果用戶沒有輸入身份證號碼,則重定向到“填寫身份證號碼”頁面,
<%
String idNumber = request.getParameter("idNumber");//取出請求中傳遞的身份證號碼引數值
// 獲取用戶輸入的身份證號碼
// 如果用戶沒有輸入身份證號碼,則重定向到 firstPage.jsp
if (idNumber == null || "".equals(idNumber.trim())) {
response.sendRedirect("firstPage.jsp");//如果身份證號碼不存在,則轉向第一個界面
}
%>
3.2.3 實踐練習
3.3 作用域通信物件
3.3.1 為什么需要session物件

3.3.1 session物件
- session在JSP中被稱為會話,目的是保存不同用戶在web程式多個頁面之間跳轉時的資料資訊,直到瀏覽器關閉,每個客戶端會對應同一個session物件
- 服務器不知道客戶端何時關閉瀏覽器,為了節省記憶體開銷,默認超時時間為30分鐘,即30分鐘用戶沒有再次發出請求,則session自動銷毀,超時時間可以在Tomcat組態檔中修改
3.3.1 session物件方法
session物件可以存盤用戶相關的資料資訊,且在同會話作用于多個界面有效
session物件存盤資料方法
- session.setAttribute(“字串名稱”,要存入的資料); 向session中存入資料,并且起名
- 注意:要存入的資料可以是任意型別,名稱必須是字串型別
session物件取出資料方法
- Object object = session.getAttribute(“存入時的名稱”);
- 注意:取出資料時是Object型別,如需要可以轉為需要型別
session物件移除資料方法如下
- session.removeAttribute(“存入時的名稱”);
示例:將資料存入session中,跨越多個界面取出使用
從session中取出身份證號碼轉為字串顯示:
third.jsp第三個界面
<tr>
<td> 身份證:</td>
<td><span><%=session.getAttribute("idNumber").toString()%></span></td>
</tr>
如果不為空,則將身份證號碼存入session
secondPage.jsp中代碼:
<%
String idNumber = request.getParameter("idNumber");// 獲取用戶輸入的身份證號碼
// 如果用戶沒有輸入身份證號碼,則重定向到 firstPage.jsp
if (idNumber == null || "".equals(idNumber.trim())) {
response.sendRedirect("firstPage.jsp");
}
// 將身份證號碼保存到 session 作用域中
session.setAttribute("idNumber", idNumber);
response.sendRedirect(“third.jsp");
%>
3.3.2 application物件
application 物件用于保存應用中的公有資料,服務器啟動自動創建 application 物件,只要沒有關閉服務器,application 物件將一直存在,所有用戶可以共享
session物件和用戶會話相關,不同用戶的session是完全不同的物件,而 application 物件對于所有用戶都是同一個的物件,所以application 物件的生命周期更長
application 物件常用于記錄快取專案中的全域資料,常用方法如下
| 方法名 | 作用 |
| void?setAttribute(String?name,Object?value) | 鍵、值對形式存入資料到application |
| Object?getAttribute(String?name) | 根據鍵名稱取出資料 |
| void removeAttribute(String name) | 根據鍵名稱移除資料 |
| String?getRealPath(String?path) | 獲取當前專案的真實路徑 |
3.3.2 JSP 運算式
示例:利用application物件特性,統計網上申請報到證的人數
<h1>
<%
int counter = 0;// 設定 counter 變數用于保存網頁次數
if (application.getAttribute("counter") == null) {
counter = 1;// 如果 counter 在 application 中不存在,表明是第一次運行,賦予1
} else {
counter = Integer.parseInt(application.getAttribute("counter").toString()); //如果 counter 在 application 中存在,則需要取出已存在的數字,
并且累加
counter++;
}
application.setAttribute("counter", counter);//將最新累加后的人數存入application物件
%>
<!-- 輸出參與網上報到的人數 -->
你是第 <%=counter%> 位成功登記的同學,
</h1>


3.3.3 pageContext物件
pageContext頁面背景關系物件可以獲取其他作用域物件,并提供方法用于訪問內建物件在頁面上定義的所有屬性,從而保持同一頁面組件之間的資料共享
pageContext常用方法如下:
| 方法名 | 作用 |
| ServletConfig?getServletConfig() | 獲取ServletConfig配置物件 |
| void?setAttribute(String?name,Object?value) | 以鍵值對形式存放資料到pageContext中 |
| Object?getAttribute(String?name) | 從pageContext中根據鍵名稱取出資料 |
| void?removeAttribute(String?name) | 從pageContext中移除資料 |
| ServletRequest?getRequest() | 獲取request物件 |
| ServletResponse?getResponse() | 獲取response物件 |
| HttpSession?getSession() | 獲取session物件 |
示例:pageContext作用域僅在當前頁面有效 session作用域在整個會話范圍有效,瀏覽器關閉則會話結束 application作用域最大,整個專案范圍都有效,服務關閉才結束
// pageContext中初始化頁面計數器
if (pageContext.getAttribute("pageCounter") == null) {
pageContext.setAttribute("pageCounter", new Integer(0));
}
// 獲取頁面計數器,并讓其加 1
Integer pageCounter = (Integer) pageContext.getAttribute("pageCounter");
//取出已存的計數器值增加1,覆寫進去
pageContext.setAttribute("pageCounter", pageCounter.intValue() + 1);
// session中初始化頁面計數器
if (session.getAttribute("pageCounter") == null) {
session.setAttribute("pageCounter", new Integer(0));
}
// 獲取頁面計數器,并讓其加 1
Integer pageCounter = (Integer) session.getAttribute("pageCounter");
//取出已存的計數器值增加1,覆寫進去
session.setAttribute("pageCounter", pageCounter.intValue() + 1);
// application中初始化頁面計數器
if (application.getAttribute("pageCounter") == null) {
application.setAttribute("pageCounter", new Integer(0));
}
// 獲取頁面計數器,并讓其加 1
Integer pageCounter = (Integer) application.getAttribute("pageCounter");
//取出已存的計數器值增加1,覆寫進去
application.setAttribute("pageCounter", pageCounter.intValue() + 1);
3.3.4 實踐練習
3.4 其他內置物件
3.4.1 exception物件
exception物件用來表示 JSP 檔案執行時發生的所有錯誤和例外
JSP頁面的page 指令中設定 isErrorPage 屬性為 true才可以使用,否則無法編譯
exception 物件的常用方法如下
| 方法名 | 作用 |
| getMessage(?) | 回傳例外的資訊 |
| getLocalizedMessage(?) | 回傳本地化的例外錯誤 |
| toString(?) | 回傳關于例外錯誤的簡單資訊描述 |
| fillInStackTrace(?) | 重寫例外錯誤的執行軌跡 |
示例:在JSP 頁面中出現沒有捕捉到的例外,就會生成 exception 物件,并把物件傳送到在 page 指令中設定的錯誤頁面中,然后在錯誤頁面中處理相應的 exception 物件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%> //說明當前error.jsp為出錯后處理的頁面
<%
out.print(" 例外資訊:" + exception.getMessage()); //從exception物件中獲取例外資訊
%>
3.4.2 實踐練習
總結:
- JSP內置物件是JSP中預先定義好,無需實體化直接使用的一系列物件
- 輸入輸出物件包括:out可以向頁面輸出內容、response可以實作設定請求頭部資訊以及重定向頁面
- 作用域通信物件范圍從小到大包括:pageContext、request、session、application,可以實作Web應用中的資料存盤和讀取
- exception物件代表JSP頁面發生的例外,從中可以獲取例外資訊,只能在設定了isErrorPage=“true”的錯誤處理頁面才能使用
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/266393.html
標籤:其他
