(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類型
實例:
<%@page contentType="text/html;charset=gb2312"%>
<%@page 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()