servletContext接口是Servlet中最大的一個(gè)接口,呈現(xiàn)了web應(yīng)用的Servlet視圖。ServletContext實(shí)例是通過(guò) getServletContext()方法獲得的,由于HttpServlet繼承GenericServlet的關(guān)系,GenericServlet類(lèi)和HttpServlet類(lèi)同時(shí)具有該方法。

外文名

servletContext

作用

呈現(xiàn)了Web應(yīng)用的Servlet視圖

所屬方

Servlet

性質(zhì)

最大的一個(gè)接口

概要

每個(gè)應(yīng)用都會(huì)有一個(gè)

ServletContext

對(duì)象與之關(guān)聯(lián),當(dāng)容器分布在多個(gè)虛擬機(jī)上時(shí),web應(yīng)用在所分布的每個(gè)虛擬機(jī)上都擁有一個(gè)

ServletContext

實(shí)例。缺省情況下,

ServletContext

不是分布式的,并且只存在于一個(gè)虛擬機(jī)上。

通過(guò)ServletContext可以訪問(wèn)應(yīng)用范圍的初始化參數(shù)和屬性:

1).初始化參數(shù)

ServletContext對(duì)象是在Web應(yīng)用程序裝載時(shí)初始化的。正像Servlet具有初始化參數(shù)一樣,ServletContext也有初始化參數(shù)。Servlet上下文初始化參數(shù)指定應(yīng)用程序范圍內(nèi)的信息。

在web.xml中配置初始化參數(shù):

adminEmail

webmaster

元素是針對(duì)整個(gè)應(yīng)用的,所以并不嵌套在某個(gè)元素中,該元素是元 素的直接子元素。

從Servlet中訪問(wèn)初始化參數(shù):

ServletContext application=this.getServletContext();

out.println("send us your")

out.println(application.getInitParameter("email"));

out.println("'>email");

2).屬性

可以通過(guò)編程的方式綁定,也可以作為web應(yīng)用的全局變量被所有Servlet和JSPs訪問(wèn)

設(shè)置Context屬性:

ServletContext application=this.getServletContext();

application.setAttribute("person1",new Person("Jim"));

application.setAttribute("person2",new Person("Green"));

獲取Context屬性:

ServletContext application=this.getServletContext();

Enumberation persons=application.getAttributeNames();

while(persons.hasMoreElements()){

String name=(String)persons.nextElement();

Person p=(Person)persons.getAttribute(name);

application.removeAttribute(name);

用途

安裝方法:

安裝在一個(gè)服務(wù)器中的一個(gè)特定URL名字空間(比如,/myapplication)下的所有Servlet,JSP,JavaBean等Web部件的集合構(gòu)成了一個(gè)Web的應(yīng)用,每一個(gè)Web應(yīng)用(同一JVM),容器都會(huì)有一個(gè)背景對(duì)象,而javax.servlet.ServletContext接口就提供了訪問(wèn)這個(gè)背景對(duì)象的途徑。

Servlet實(shí)例的getServletContext方法:

得到該Servlet運(yùn)行其中的這個(gè)背景對(duì)象。從這個(gè)背景對(duì)象中你可以訪問(wèn)如下信息或資源:(注意該方法不是ServletContext的方法而是獲取背景對(duì)象的方法由于HttpServlet繼承Servlet的關(guān)系GenericServlet類(lèi)和HttpServlet類(lèi)同時(shí)具有該方法):初始化參數(shù) ServletContext.getInitParameter(String name)。存儲(chǔ)在背境中的對(duì)象 context.getAttribute(String name) 與本背景關(guān)聯(lián)的資源 ServletContext.getResource(String path) 日志 ServletContext.log(String msg) 以上所示方法均為ServletContext所提供,值得一提的是對(duì)于存儲(chǔ)在背景中的對(duì)象訪問(wèn)方法常用的還有: context.setAttribute(String name, Object object);將特定名字綁定的任意類(lèi)型的對(duì)象上。將把object對(duì)象綁定到名字name,存放在Servlet背景中,可供同一背景中的其他Servlet共享。其他Servlet可以通過(guò)context.getAttribute(String name),得到一個(gè)背景中的對(duì)象,或通過(guò)context.removeAttribute(String name)在背景中移除一個(gè)對(duì)象。

在Web應(yīng)用范圍內(nèi)存取共享數(shù)據(jù)的方法:

注:web應(yīng)用范圍具有以下兩層含義:

(1)表示有web應(yīng)用的生命周期構(gòu)成的時(shí)間段.

(2)表示在web應(yīng)用的生命周期內(nèi)所有web組件的集合。

setAttribute(String name,java.lang.Objectobject):把一個(gè)java 對(duì)象和一個(gè)屬性名綁定,并存放到ServletContext 中,參數(shù)name 指定屬性名,參數(shù)Object 表示共享數(shù)據(jù)。

getAttribute(String name):根據(jù)參數(shù)給定的屬性名,返回一個(gè)Object類(lèi)型的對(duì)象。

getAttributeNames():返回一個(gè)Enumeration 對(duì)象,該對(duì)象包含了所有存放在ServletContext 中的屬性名

removeAttribute(String name) :根 據(jù) 參 數(shù) 指 定 的 屬 性 名,從servletContext 對(duì)象中刪除匹配的屬性。

getRealPath("/"):得到絕對(duì)路徑

訪問(wèn)web應(yīng)用的靜態(tài)資源

使用ServletContext接口可以直接訪問(wèn)web應(yīng)用中的靜態(tài)內(nèi)容文檔結(jié)構(gòu)。包括HTML,GIF和JPEG文件。如以下方法:

.getResource

.getResourceAsStream

這兩個(gè)方法的參數(shù)都是以"/"開(kāi)頭的字符串,表示資源相對(duì)于context根的相對(duì)路徑.文檔結(jié)構(gòu)可以存在于服務(wù)器文件系統(tǒng),或是war包中,或是在遠(yuǎn)程服務(wù)器上,抑或其他位置。不可以用來(lái)獲得動(dòng)態(tài)資源,比如,getResource("/index.jsp"),這個(gè)方法將返回該jsp文件的源碼,而不是動(dòng)態(tài)頁(yè)面。可以用"Dispatching Requests"獲得動(dòng)態(tài)內(nèi)容.

列出web應(yīng)用中可被訪問(wèn)的資源,可以使用getResourcePaths(String path)方法。

跨多個(gè)請(qǐng)求,用戶(hù)和Servlets

web服務(wù)器支持在一臺(tái)機(jī)器上共享一個(gè)IP的多個(gè)邏輯主機(jī),這種能力被稱(chēng)為"虛擬主機(jī)",每個(gè)邏輯主機(jī)都擁有它自己的servlet context。servlet context不能跨虛擬主機(jī)共享。