主頁 > 前端設計 > Java程式設計基礎筆記 • 【第3章 JSP內置物件】

Java程式設計基礎筆記 • 【第3章 JSP內置物件】

2021-03-05 11:20:03 前端設計

全部章節 >>>>


本章目錄

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

標籤:其他

上一篇:基于CodeMirror 10分鐘打造一個記事本應用(真的能使用,非demo)

下一篇:framework7 動態路由配置問題,求助

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more