JSP中各種內建對象

來源:互聯網
上載者:User

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對象中.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.