JSP中各種內建對象
web互動的最基本單位是http請求。每個使用者從進入網站到離開網站這段過程稱為一個HTTP會話,一個伺服器的運行過程中會有多個使用者訪問,就是多個HTTP會話。範圍解釋如下:
1.application:伺服器啟動到停止的這段時間
2.session:HTTP會發開始到結束的這段時間
3.request:HTTP請求開始到結束的這段時間
4.page:當前頁面從開啟到關閉這段時間
一.application範圍
(1)擷取application對象的副本
1.在JSP中直接使用application以代表application對象
2.通過ServletConfig介面
使用ServletConfig介面可以間接擷取application對象,但是這個application對象的名稱不能同樣為application。因為application是JSP引擎建立的預設的application對象的副本,不可以被覆蓋。可以通過調用getServletContext()方法返回一個ServletContext介面的對象,也就是application對象的一個副本.
3.使用pageContext對象擷取application對象
pageContext對象的getServletContext()同樣返回一個application對象的副本.
(2)
1.Object getAttribute(String name) :從application中擷取資訊。
2.void setAttribute(String name,Object value) :向application中輸入資訊。
3.Enumeration getAttributeNames() :返回所有與當前的application對象綁定在一起的參數或者java對象的名字。
4.void removeAttribute(String name) :通過該方法,我們可以使某個參數或者java對象與application對象解除綁定關係。
5.getServerInfo() :該方法可以獲得當前伺服器的詳細資料,不同的伺服器返回的資訊格式不一樣。
6.log(String msg) :該方法往往用於往伺服器的log檔案中寫入資訊,之於是哪一個log檔案,則由伺服器決定。利用這個方法,我們可以在log檔案中記錄訪問者的資訊,這對於統計訪問流量來源方面十分有用,同時也利於管理員監控網站的運行情況。其實,還有一個同名但是不同參數的log()方法,利用後者,我們可以將JSP程式執行過程中所發生的錯誤事件都計入log檔案中。
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%><br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br /><html><br /><body><br /><%<br /> String username1="george";<br /> String username2="robin";<br /> String password1="george";<br /> String password2="robin";</p><p> out.println("set application attribute <br>");<br /> application.setAttribute("username1",username1);<br /> application.setAttribute("username2",username2);<br /> application.setAttribute("password1", password1);<br /> application.setAttribute("password2", password2);</p><p> out.println("list application attribute: <br>");<br /> Enumeration enum1=application.getAttributeNames();<br /> while(enum1.hasMoreElements())<br /> {<br /> String attrName=(String)enum1.nextElement();<br /> if(attrName.equals("username1")||attrName.equals("username2")||attrName.equals("password1")||attrName.equals("password2")){<br /> out.println(attrName+"----->");<br /> String attrValue=application.getAttribute(attrName).toString();<br /> out.println(attrValue+"<br>");<br /> }<br /> }</p><p> username1="robin";<br /> password1="robin";</p><p> out.println("change application attribute:<br>");<br /> application.setAttribute("username1",username1);<br /> application.setAttribute("password1", password1);</p><p> out.println("username1----->"+application.getAttribute("username1")+"<br>");<br /> out.println("password1----->"+application.getAttribute("password1")+"<br>");</p><p> out.println("remove application attribute:<br>");<br /> application. removeAttribute("username1");<br /> application. removeAttribute("password1");</p><p> out.println("relist application attribute: <br>");<br /> Enumeration enum2=application.getAttributeNames();<br /> while(enum2.hasMoreElements())<br /> {<br /> String attrName=(String)enum2.nextElement();<br /> if(attrName.equals("username1")||attrName.equals("username2")||attrName.equals("password1")||attrName.equals("password2")){<br /> out.println(attrName+"----->");<br /> String attrValue=application.getAttribute(attrName).toString();<br /> out.println(attrValue+"<br>");<br /> }<br /> }<br />%><br /></body><br /></html>
效果為:
二.session範圍
1.Object HttpSession.getAttribute(String name):從session中擷取資訊
2.void HttpSession.setAttribute(String name,Object value):想session中輸入資訊
3.HttpSession HttpServletRequest.getSession():擷取當前請求所在的session的對象
注意:
session的開始比較好判斷,它從瀏覽器發出第一個http請求即認為會話開始。但結束時刻就不好判斷了,因為瀏覽器的關閉並不會通知伺服器。一般來說,一段時間內用戶端沒有反應,則認為會話結束。tomcat的預設值為120分鐘,但是這個值也可以通過HttpSession的setMaxInactiveInterval()方法來設定:
1.void setMaxInactiveInterval(int interval)
如果想主動讓會話結束,可以使用HttpSession的invalidate()方法,用於強制結束session:
2.void invalidate():
三.request範圍
一個http請求的處理可能需要多個servlet合作,而這幾個servlet之間可以通過某種方式來傳遞資訊,但這個訊息在請求結束後就無效了。
Servlet之間的資訊共用是通過HttpServletRequest介面的兩個方法實現的。
1.void setAttribute(String name,Object value):將對象value以name為名稱儲存到request範圍中。
2.Object getAttribute(String namr):從request範圍中取出指定名稱的資訊。
設定好之後,就要使用RequestDispatcher介面的forward()方法,通過它將請求轉寄給其他Servlet。
1.RequestDispatcher ServletContext.getRequestDispatcher(String path):取得Dispatcher以便轉寄,path為轉寄的目的servlet.
2.void RequestDispatcher.forward(ServletRequest request,ServletResponse response):將request和response轉寄.
四.Page範圍
page對象的作用範圍僅限於使用者請求的當前頁面,對於page對象的引用將在響應返回給用戶端之後被釋放,或者在被轉寄到其他地方後被釋放。對page對象的引用通常儲存在pageContext對象中.