Java之JSP教程九大內(nèi)置對(duì)象詳解(下篇)
目錄
- 前言
- JSP pageContext對(duì)象
- 示例
- JSP page對(duì)象
- 示例
- JSP Cookie的使用
- JSP 使用 cookie 主要分為以下幾個(gè)步驟。
- 創(chuàng)建 cookie 對(duì)象
- 寫(xiě)入 cookie
- 設(shè)置 cookie 有效期
- 讀取cookie
- 示例
- 讀取cookie
- 刪除cookie
- session和cookie的區(qū)別
前言
之前我們?cè)谶@篇文章Java之JSP教程九大內(nèi)置對(duì)象詳解中,已經(jīng)講解完了六個(gè)個(gè)對(duì)象,接下來(lái)我們講解最后的三個(gè)對(duì)象
JSP pageContext對(duì)象
pageContext 是 javax.servlet.jsp.PageContext 的實(shí)例對(duì)象。
pageContext 對(duì)象表示整個(gè) JSP 頁(yè)面,可以獲取或刪除以下對(duì)象的任意屬性:
- page
- request
- session
- application
pageContext 常用的方法如下:
- Object findAttribute (String AttributeName):按 page、request、session、application 的順序查找指定的屬性,并返回對(duì)應(yīng)的屬性值。如果沒(méi)有相應(yīng)的屬性,則返回 NULL
- Object getAttribute (String AttributeName, int Scope):在指定范圍內(nèi)獲取屬性值。與 findAttribute 不同的是,getAttribute 需要指定查找范圍
- void removeAttribute(String AttributeName, int Scope):在指定范圍內(nèi)刪除某屬性
- void setAttribute(String AttributeName, Object AttributeValue, int Scope):在指定范圍內(nèi)設(shè)置屬性和屬性值
- Exception getException():返回當(dāng)前頁(yè)的 Exception 對(duì)象
- ServletRequest getRequest():返回當(dāng)前頁(yè)的 request 對(duì)象
- ServletResponse getResponse():返回當(dāng)前頁(yè)的 response 對(duì)象
- ServletConfig getServletConfig():返回當(dāng)前頁(yè)的 ServletConfig 對(duì)象
- HttpSession getSession():返回當(dāng)前頁(yè)的 session 對(duì)象
- Object getPage():返回當(dāng)前頁(yè)的 page 對(duì)象
- ServletContext getServletContext():返回當(dāng)前頁(yè)的 application 對(duì)象
示例
使用 PageContext 對(duì)象取得不同范圍的屬性值。index.jsp 代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head></head><body> <%request.setAttribute("info", "request范圍的值");session.setAttribute("info", "session范圍的值");application.setAttribute("info", "application范圍的值"); %> 利用 pageContext 取出以下范圍內(nèi)各值(方法一): <br> request 設(shè)定的值:<%=pageContext.getRequest().getAttribute("info")%> <br> session 設(shè)定的值:<%=pageContext.getSession().getAttribute("info")%> <br> application 設(shè)的值:<%=pageContext.getServletContext().getAttribute("info")%> <hr> 利用pageContext取出以下范圍內(nèi)各值(方法二): <br> 范圍1(page)內(nèi)的值:<%=pageContext.getAttribute("info", 1)%> <br> 范圍2(request)內(nèi)的值:<%=pageContext.getAttribute("info", 2)%> <br> 范圍3(session)內(nèi)的值:<%=pageContext.getAttribute("info", 3)%> <br> 范圍4(application)內(nèi)的值:<%=pageContext.getAttribute("info", 4)%> <hr> 利用 pageContext 修改或刪除某個(gè)范圍內(nèi)的值: <%pageContext.setAttribute("info", "修改request范圍的值", 2); %> <br> 修改 request 設(shè)定的值: <br> <%=pageContext.getRequest().getAttribute("info")%> <br> <%pageContext.removeAttribute("info"); %> 刪除 session 設(shè)定的值:<%=session.getAttribute("info")%></body></html>
運(yùn)行結(jié)果如下:
index.jsp運(yùn)行結(jié)果
JSP page對(duì)象
JSP page 的實(shí)質(zhì)是 java.lang.Object 對(duì)象,相當(dāng)于 Java 中的 this 關(guān)鍵字。
page 對(duì)象是指當(dāng)前的 JSP 頁(yè)面本身,在實(shí)際開(kāi)發(fā)中并不常用。
page 對(duì)象的常用方法如下:
class getClass():返回當(dāng)前頁(yè)面所在類
int hashCode():返回當(dāng)前頁(yè)面的 hash 代碼
String toString():將當(dāng)前頁(yè)面所在類轉(zhuǎn)換成字符串
boolean equals(Object obj):比較對(duì)象和指定的對(duì)象是否相等
void copy (Object obj):把對(duì)象復(fù)制到指定的對(duì)象中
Object clone():復(fù)制對(duì)象
示例
下面通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)演示 page 中的方法。
index.jsp 代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head></head><body> <%Object obj;obj = null; %> 返回當(dāng)前頁(yè)面所在類:<%=page.getClass()%> <br> 返回當(dāng)前頁(yè)面的 hash 代碼:<%=page.hashCode()%> <br> 轉(zhuǎn)換成 String 類的對(duì)象:<%=page.toString()%> <br> page和obj比較:<%=page.equals(obj)%> <br> page和this比較:<%=page.equals(this)%></body></html>
運(yùn)行結(jié)果如下:
JSP Cookie的使用
Cookie 不是 JSP 內(nèi)置對(duì)象,而是由 Netscape 公司發(fā)明,用來(lái)跟蹤用戶會(huì)話(session)的方式。
Cookie 由服務(wù)器生成并發(fā)送給瀏覽器(客戶端),瀏覽器會(huì)將其以文本文件的形式存儲(chǔ)在某個(gè)目錄下。
例如,IE 瀏覽器把 cookie 信息保存在類似于 C://windows//cookies 的目錄下,當(dāng)用戶再次訪問(wèn)某個(gè)網(wǎng)站時(shí),服務(wù)器就會(huì)要求瀏覽器查找并返回之前發(fā)送的 cookie 信息,來(lái)識(shí)別此用戶。
識(shí)別用戶通常有以下步驟:
- 服務(wù)器把 cookie 信息發(fā)送到瀏覽器,例如:用戶 ID、用戶名稱等信息。
- 瀏覽器在本地存儲(chǔ)這些信息。
- 瀏覽器再次向服務(wù)器發(fā)送請(qǐng)求時(shí),它會(huì)同時(shí)將本地存儲(chǔ)的 cookie 信息一同發(fā)送給服務(wù)器,然后服務(wù)器使用這些信息來(lái)識(shí)別用戶或其它。
cookie 的作用表現(xiàn)在以下方面:
- 對(duì)特定對(duì)象的追蹤,如用戶的訪問(wèn)次數(shù)、最后訪問(wèn)時(shí)間等。
- 統(tǒng)計(jì)網(wǎng)頁(yè)的瀏覽次數(shù)。
- 在 cookie 有效期內(nèi),記錄用戶的登錄信息,簡(jiǎn)化下一次的登錄過(guò)程。
- 實(shí)現(xiàn)各種個(gè)性化服務(wù),如”最近瀏覽過(guò)的商品“。
注意:由于 cookie 會(huì)將用戶的個(gè)人信息保存在客戶端,如用戶名、計(jì)算機(jī)名、以及瀏覽和登錄的網(wǎng)站等。這些信息可能會(huì)包含一些比較敏感的內(nèi)容,所以從安全角度來(lái)說(shuō),使用 cookie 存在著一定的風(fēng)險(xiǎn),因此不建議在 cookie 中保存比較重要或隱私的內(nèi)容。
cookie方法
cookie 常用方法如下:
- public void setDomain(String pattern):設(shè)置 cookie 的域名,如 biancheng.net
- public String getDomain():獲取 cookie 的域名
- public void setMaxAge(int expiry):設(shè)置 cookie 有效期,單位:秒 默認(rèn)僅在當(dāng)前會(huì)話中存在
- public int getMaxAge():獲取 cookie 有效期,單位:秒 默認(rèn)為 -1,表示 cookie 保存到瀏覽器關(guān)閉為止
- public String getName():返回 cookie 的名稱,名稱創(chuàng)建后將不能被修改
- public void setValue(String newValue):設(shè)置 cookie 的值
- public String getValue():獲取 cookie 的值
- public void setPath(String uri):設(shè)置 cookie 的路徑 默認(rèn)為當(dāng)前頁(yè)面目錄以及子目錄下的所有 URL
- public String getPath():獲取 cookie 的路徑
- public void setSecure(boolean flag):設(shè)置 cookie 是否要加密傳輸
- public void setComment(String purpose):設(shè)置 cookie 注釋
- public String getComment():返回 cookie 注釋,如果 cookie 沒(méi)有注釋,則返回 nullJSP使用cookie
JSP 使用 cookie 主要分為以下幾個(gè)步驟。
創(chuàng)建 cookie 對(duì)象
創(chuàng)建 cookie 對(duì)象,name 代表 cookie 的名稱,value 表示該名稱對(duì)應(yīng)的值,語(yǔ)法如下:
cookie cookie = new cookie(String name,String value);
注意:name 和 value 中不能包含空格和以下字符:
[ ] ( ) = , " / ? @ : ;
寫(xiě)入 cookie
創(chuàng)建 cookie 對(duì)象后,調(diào)用 response.addCookie() 方法寫(xiě)入 cookie,代碼如下:
response.addcookie(cookie);
設(shè)置 cookie 有效期
調(diào)用 setMaxAge() 方法設(shè)置 cookie 的有效期(單位:秒),如將 cookie 有效期設(shè)置為 24 小時(shí),代碼如下:
cookie.setMaxAge(60*60*24);
讀取cookie
調(diào)用 request.getCookies() 方法讀取 cookie,該方法返回 HTTP 請(qǐng)求中的 cookie 對(duì)象數(shù)組,需要通過(guò)遍歷進(jìn)行訪問(wèn)。
示例
通過(guò) HTML 表單將客戶端數(shù)據(jù)提交到 index.jsp 中,并設(shè)置 cookie。
login.jsp 代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><html><head></head><body> <form action="index.jsp" method="get">站點(diǎn)名: <input type="text" name="name"> <br />網(wǎng)址: <input type="text" name="url" /><input type="submit" value="提交" /> </form></body></html>
index.jsp 代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ page import="java.net.*"%><% // 解決中文亂碼 String str = URLEncoder.encode(request.getParameter("name"), "utf-8"); // 創(chuàng)建cookie對(duì)象 cookie name = new cookie("name", str); cookie url = new cookie("url", request.getParameter("url")); // 設(shè)置cookie有效期為24小時(shí)。 name.setMaxAge(60 * 60 * 24); url.setMaxAge(60 * 60 * 24); // 在響應(yīng)頭部添加cookie response.addcookie(name); response.addcookie(url);%><html><head><title>編程幫(www.biancheng.net)</title></head><body> <b>網(wǎng)站名:</b> <%=request.getParameter("name")%><br> <b>網(wǎng)址:</b> <%=request.getParameter("url")%></body></html>
運(yùn)行結(jié)果如下:
login.jsp頁(yè)面運(yùn)行結(jié)果
index.jsp頁(yè)面運(yùn)行結(jié)果
讀取cookie
調(diào)用 request.getcookies() 方法,在 cookie.jsp 頁(yè)面中讀取 cookie
cookie.jsp 代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ page import="java.net.*"%><!DOCTYPE html><html><head><title>編程幫(www.biancheng.net)</title></head><body> <%cookie cookie = null; //創(chuàng)建cookie對(duì)象cookie[] cookies = null;// 獲取 cookie 的數(shù)據(jù)cookies = request.getcookies();if (cookies != null) { out.println("<h2> 獲取cookie名稱與對(duì)應(yīng)值</h2>"); for (int i = 0; i < cookies.length; i++) {cookie = cookies[i];out.print("參數(shù)名 : " + cookie.getName());out.print("<br>");out.print("參數(shù)值: " + URLDecoder.decode(cookie.getValue(), "utf-8") + " <br>");out.print("------------------------------------<br>"); }} else { out.println("<h2>cookie為空</h2>");} %></body></html>
運(yùn)行結(jié)果如下:
刪除cookie
刪除 cookie 步驟如下:
- 獲取 cookie
- 將要?jiǎng)h除的 cookie 有效期設(shè)置為 0
- 調(diào)用 response.addCookie() 方法重新寫(xiě)入 cookie
刪除參數(shù)名為“name”的 cookie
cookie.jsp 代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ page import="java.net.*"%><!DOCTYPE html><html><head><title>編程幫(www.biancheng.net)</title></head><body> <%cookie cookie = null; //創(chuàng)建cookie對(duì)象cookie[] cookies = null;// 獲取 cookie 的數(shù)據(jù)cookies = request.getcookies();if (cookies != null) { out.println("<h2> 獲取cookie名稱與對(duì)應(yīng)值</h2>"); for (int i = 0; i < cookies.length; i++) {cookie = cookies[i];//刪除參數(shù)名為name的cookieif ((cookie.getName()).compareTo("name") == 0) { cookie.setMaxAge(0); response.addcookie(cookie); out.print("刪除 cookie: " + cookie.getName() + "<br/>");}out.print("參數(shù)名 : " + cookie.getName());out.print("<br>");out.print("參數(shù)值: " + URLDecoder.decode(cookie.getValue(), "utf-8") + " <br>");out.print("------------------------------------<br>"); }} else { out.println("<h2>cookie為空</h2>");} %></body></html>
刷新 cookie.jsp 頁(yè)面,運(yùn)行結(jié)果如下:
注:也可以手動(dòng)在瀏覽器中刪除 cookie。
session和cookie的區(qū)別
session 和 cookie 的區(qū)別如下:
session:
- cookie將信息保存在服務(wù)器
- 保存的值是 Object 類型
- session 存儲(chǔ)的數(shù)據(jù)隨會(huì)話的結(jié)束而結(jié)束
- 安全性高,可以保存重要的信息
cookie:
- 將信息保存在客戶端
- 保存的值是 String 類型
- cookie 可以長(zhǎng)期保存在客戶端
- 安全性低,通常用于保存不重要的信息
實(shí)際開(kāi)發(fā)中,需要根據(jù)不同的業(yè)務(wù)需求來(lái)選擇采用哪種技術(shù),例如,用戶的用戶名和密碼等敏感信息不能使用 cookie 存儲(chǔ),淘寶購(gòu)物的”最近瀏覽過(guò)的商品“,則可以使用 cookie 存儲(chǔ)在客戶端。
到此這篇關(guān)于Java之JSP教程九大內(nèi)置對(duì)象詳解的文章就介紹到這了,所有內(nèi)容也都講解完了,對(duì)其他內(nèi)容還感興趣的請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持!
相關(guān)文章:
