1. 程式人生 > >比較page、request、session、application的使用範圍(轉自用)

比較page、request、session、application的使用範圍(轉自用)

nal 周期 有一個 invalid 應用 import real 是否 沒有

(1)直接在web contain中進行對象的實例化。

內置對象

類型

作用域

pageContext

javax.servlet.jsp.pageContext

page

request

javax.servlet.http.HttpServletRequest

request

response

javax.servlet.http.HttpServletResponse

page

session

javax.servlet.http.HttpSession

session

application

javax.servlet.ServletContext

application

config

javax.servlet.ServletConfig

page

out

java.servlet.jsp.JspWriter

page

page

java.lang.Object

page

exception

java.lang.Throwable

page

(2)jsp內置對象分類

與servlet有關的隱含對象:page,config

與input/output有關的隱含對象:out,request,response

與jsp執行時有關的context的隱含對象:session,application,pageContext

與error有關的隱含對象:exception

(3)屬性的設置和取得

設置屬性:public void setAttribute(String name,Object.value)

取得屬性:public void getAttribute(String name)

(4)四種屬性保存範圍

在一個頁面範圍內:page

在一次服務器請求範圍內:request

在一次會話範圍內:session

在一個應用服務器範圍內:application

(5)page範圍

Page範圍通過PageContext對象來設置,將屬性保存在一次請求範圍之內,必須使用服務器端跳轉<jsp:forward/>

(6)session範圍

只保留一個用戶的信息

(7)application範圍

所有的用戶都可以取得此信息,此信息在整個服務器上被保留。Application屬性範圍值,只要設置一次,則所有的網頁窗口都可以取得數據。

Application,session,request都需要跨多個頁,屬性保存時內存開銷大。如果能使用request就不適用session,能使用session的就不要使用application。

(8)pageContext默認情況下表示一個頁面的保存範圍

public void setAttribute(String name,Object value,int scope)

public static final int APPLICATION_SCOPE:application範圍

public static final int SESSION_SCOPE:session範圍

public static final int REQUEST_SCOPE:request範圍

public static final int PAGE_SCOPE:page範圍

四種屬性範圍都是依靠pageContext展開的,但是在開發中,往往使用session,request範圍

session對象

(1)session功能

Session對象主要用於保存用戶的各種信息,直到它的生命周期超過或被人為釋放掉為止,可以通過session對象來判斷此用戶是否是合法用戶。

Session對象是javax.Servlet.http.HttpSession接口的實例化對象,session屬於http協議範疇之內的對象,所以只有唯一http包下有此接口,沒有任何繼承關系,用戶只要一連接到服務器,則立刻分配一個session給用戶。

(2)主要方法

session.getID():服務器上通過session來分別不同的用戶,sessionID:任何鏈接到服務器上的用戶,服務器都會為之分配唯一的一個不會重復的sessionID。由服務器統一管理,人為不能控制。

session.getId().length():id的長度為32位

session.isNew():判斷是否是新的用戶

session.invalidate():使session失效

session.getCreationTime():得到session的創建時間,返回long類型,通過Date得到時間

session.getLastAccessedTime():得到最後一次操作時間,返回long類型

實例:

<[email protected] contentType="text/html;charset=gb2312"%>

<[email protected] import="java.util.*"%>

<%

long l = session.getCreationTime() ;

long l2 = session.getLastAccessedTime() ;

%>

<h1>session CREATE : <%=new Date(l)%></h1>

<h1>session last access: <%=new Date(l2)%></h1>

<h1><%=(l2-l)/1000%></h1>

假如需要求出用戶在線時間,使用以下公式:最後操作時間—創建的時間

(3)session屬性的設置

session.setAttribute(String name,Object value)

session.getAttribute(String name)

session.removeAttribute(String name)

(4)兩種寫法的區別

if(name.equals("mldn")&&pass.equals("password")):假如其中的name和pass沒有被初始化,那麽在執行此句子的時候會出現nullpointexception。

if("mldn".equals(name)&&"password".equals(pass)):如果使用該寫法則不會出現錯誤。

(5)session用法:驗證用戶是否登陸。

(6)session與cookie

Session和cookie用於跨網頁共享數據。Session記錄獨有的個人信息,在不同頁面中傳遞,使用setAttribute,getAttribute方法;Cookie保存於客戶端,供瀏覽器與web服務器互通數據用的純文字文件,當ie執行的時候會在計算機中產生一個cookie。Session比cookie更安全,session比cookie更占用資源,session使用了cookie的機制,如果cookie被禁用,則session也無法使用。

application與config對象

(1)application簡介

Application對象主要的作用就是保存公共信息,屬於javax。Servlet。ServletContext,此工作目錄的路徑不是固定的,有可能此工作目錄在c盤上或是在d盤得到的工作目錄的真實路徑。Application是在整個服務器中保持的只有一個實例的對象。

(2)屬性操作: setAttribute(),getAttribute(),removeAttribute()

(3)真實路徑: application.getRealPath(String path),其中String path是"/"。在實際使用中用getServletContext()方法代替application。格式如下:

getServletContext().getRealPath("/")

this.getServletContext.getRealPath("/")

(4)Jsp安全性Config對象

(a) 在j2ee中安全性體現在工作目錄的WEB-INF文件夾,頁面保存在此文件夾下,外面無法發現此文件夾內的文件,如果要使此文件夾內的文件能被用戶訪問,則修改WEB-INF文件夾下存在的web.xml文件,web.xml文件屬於整個web站點的配置文件。

<……mapping start>

<servlet>

<servlet-name></servlet-name>

<jsp-file></jsp-file>

<init-param>

<param-name></param-name>

<param-value></param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name></servlet-name>

<url-pattern>/瀏覽器中輸入的地址</url-pattern>

</servlet-mapping>

<……mapping end>

修改web.xml之後重啟服務器。

(b)config對象

Config對象一般用來取得服務器的初始化配置參數,若要使用此對象應在WEB-INF/web.xml之中配置。Config對象在javax.Servlet.servletConfig中取得初始化參數的方法:

public string getInitParameter(String name)

通過此種功能,可以將數據庫鏈接的一些信息寫在配置文件之中,下面兩種方法類似,是取得全部配置參數的:

public Enumeration getInitParameterNames()

request.getParameterNames()

比較page、request、session、application的使用範圍(轉自用)