3、四種屬性範圍及應用java
setAttribute(String name,Object o)設置屬性web
getAttribute(String name)根據屬性名取得屬性瀏覽器
removeAttribute(String name)根據屬性名刪除屬性安全
(一)session服務器
session範圍爲同一個瀏覽器有效。每個瀏覽器鏈接到服務器後實際上都表示本身的session屬性,因此打開一個新的瀏覽器沒法取得之前打開的瀏覽器的sessions屬性。cookie
session是javax.servlet.http.HttpSession接口的實例化對象,因此session只能用在Http協議中session
經常使用方法app
方法 | 用途 |
String getId() | 取得session id |
long getCreationTime() | 取得建立session 時間 |
long getLastAccessedTime | 取得最後一次操做session時間 |
bollean isNew() | 判斷是否爲新session |
void invalidate() | 讓session失效 |
Enumeration getAttributeNames() | 獲得所有屬性名 |
注意:session的生命週期是能夠修改的jsp
session應用編碼
一、網頁重寫
網址重寫是一種Session追蹤技術,須要將一個或多個token做爲一個查詢字符串添加到URL中。Token的格式通常是鍵=值:
url?key1=value1&ke2=value2
缺點:
(1)在有些web瀏覽器中,URL限制2000個字符。
(2)僅當有連接要插入值時,值才能轉換成後面的資源。
(3)某些字符,例如空格、&符號及問號都必須進行轉碼。
(4)添加到URL中的信息隱蔽性很差。
(5)網址重寫必須在服務器端有效。全部的連接都必須帶有值,這樣可能出現一個問題,即一個頁面可能有許多個連接。
二、隱藏域
利用隱藏域來保持狀態,與採用網址重寫技術相似。將要傳遞的信息放在HTML表單的隱藏域中。當用戶提交表單時,隱藏域中的值也傳遞到服務器端。只有當頁面包含表單,或者能夠在頁面中添加表單時,才適合隱藏域。
優點:(1)能傳遞更多的信息。
(2)隱蔽性更好。
(3)傳遞的信息不須要進行編碼。
三、cookie
網頁重寫和隱藏域都只適合於保持哪些不須要跨越許多頁面的信息。若是這些信息須要跨越不少頁面,這兩種技術就變得很難實現,由於必須管理每個頁面的信息。cookie能解決網頁重寫和隱藏域都沒法解決的問題。
那什麼是Cookie呢?
Cookie是瀏覽器提供的一種技術,它能夠熱情服務端的程序將一些只須保存在客戶端,或者在和客戶端處理的數據放在自己使用的計算機中。(安全性不好)Cookie是自動在web服務器和瀏覽器之間來回傳遞的一小塊信息。Cookie適用於跨越多個頁面的信息。傳輸的過程由HTTP協議處理。每臺Web服務器最多能夠支持20個cookie。
Cookie的不足之處在於,用戶能夠經過修改瀏覽器設置來拒絕接收cookie。
要使用Cookie,必須熟悉javax.servlet.http.cookie類,以及HttpServletRequest和HttpServletResponse接口中的幾個方法。
方法 | 描述 |
Cookie(String name,String value) | 構造Cookie對象,同時設置名稱和內容 |
String getName() | 取得Cookie的名稱 |
String getValue() | 取得Cookie的內容 |
void setMaxAge(int expiry) | 設置Cookie保存時間,單位s |
void addCookie(C哦Okie cookie) | 向客戶端設置Cookie |
Cookie[] getCookie() | 取得客戶端設置的所有Cookie |
一個瀏覽器最多保存300個Cookie,要設置Cookie的保存時間才能真正在瀏覽器保存Cookie,系統會在每個客戶端訪問服務器時自動設置一個Cookie
(二)page
只在一個頁面內有效,跳轉以後就無效了
在javax.servlet.jsp.PageContext的setAttribute(String name,Object o,int scope)方法還能夠指定保存範圍
public static final int PAGE_SCOPE page屬性範圍,默認
public static final int REQUEST_SCOPE request屬性範圍
public static final int SESSION_SCOPE session屬性範圍
public static final int APPLICATION_SCOPE application屬性範圍
(三)request
只在一次請求中保存,服務器跳轉後有效(客戶端跳轉無效,如超連接跳轉)
request是javax.servlet.http.HttpServletRequest接口的實例化對象,而HttpServletRequest是ServletRequest的子接口,因此查找request對象的方法時可一從這兩個接口的方法中找
經常使用方法:
1 | Sting getParameter(String name) | 取得參數內容 |
2 | Sting[] getParameterValues(String name) | 取得一組參數的內容 |
3 | Enumeration getParameterNames() | 取得所有參數名稱 |
4 | void setCharacterEncoding(String env) | 設置請求編碼 |
5 | HttpSession getSession() | 取得sessin對象 |
6 | StringBuffer getRequestUrl() | 返回正在請求的路徑 |
7 | boolean isUserInRole(String role) | 用戶驗證 |
8 | Enumeration getHeaderNames() | 獲取所有頭信息 |
9 | String getHeader(String name) | 根據名稱獲取頭信息 |
10 | String getMethod() | 獲取用戶提交方式 |
11 | String getServletPath() | 獲取訪問路徑 |
12 | String ContextPath() | 獲取上下文 |
13 | String getRemoteAddr() | 獲取客戶端ip地址 |
方法 | 做用 |
通常還須要request.setCharacterEncoding("GBK")設置中文編碼防止亂碼
說到request那就必須說說response對象了
response
response是javax.servlet.http.HttpServletResponse接口的實例
經常使用方法:
方法 | 描述 |
void addCookie(Cookie cookie) | 向客戶端增長cookie |
void serHeader(String name,String value) | 設置迴應頭信息 |
void sendRedirct(String location)throws IOException | 頁面跳轉 |
response.serHeader("refresh",3;URL=");//設置頭信息名,3秒後跳轉到指定的url(屬於客戶端跳轉)
response.serHeader("refresh",3");//設置3秒刷新一次
response.setHeader("Set-Cookie","MLDN=www.wawawa.com");//設置Cookie
response.sendRedirct和<jsp:forward>的區別
response.sendRedirct屬於客戶端跳轉,跳轉後地址欄地址會改變,<jsp:forward>是服務端調轉;並且在使用request屬性時只有服務端跳轉才能將request屬性保存到跳轉頁;服務端跳轉會在該跳轉語句直接執行,客戶端跳轉則是在整個頁面執行完後才跳轉。
(四)application
在服務器上保存,全部用戶均可以使用
application對象是javax.servlet.ServletContext接口的實例化對象,能夠由getServletContext()方法代替
經常使用方法
方法 | 描述 |
StringgetRealPath(String path) | 獲得虛擬目錄的絕對路徑 |
String getContextPath() | 取得當前虛擬目錄的名稱 |
Enumeration getAttributeNames() | 取得全部屬性名稱 |