ServletContext

Servlet容器在啓動一個Web應用時,會爲它創建唯一的ServletContext對象。當Servlet 容器終止一個 Web 應用時,就會銷燬它的 ServletContext 對象。由此可見,

ServletContext對象與Web應用具有同樣的生命週期。

ServletContext接口的簡述:public interface ServletContext
定義了一系列方法用於和相應的servlet容器通信,比如:獲得文件的MIME類型,分派請求,或是向日志文件寫日誌等。
每一個web-app只能有一個ServletContext,web-app能是個放置有web application 文件的目錄,也能是個.war的文件。
ServletContext對象包含在ServletConfig對象之中,ServletConfig對象在servlet初始化時提供servlet對象。

getContext()方法概述:public ServletContext getContext(java.lang.String uripath)
返回一個指定URL地址的ServletContext對象。
該方法允許servlets獲得對服務器的各部分上下文的訪問權,並根據需要從上下文獲得RequestDispatcher對象。這個指定的URL路徑必須帶有"/",被解釋爲服務器文件根目錄下的相對路徑,並跟其他web-app主機的上下文根目錄匹配。
在一個安全的環境下,servlet容器會返回null。

getMajorVersion()方法概述:public int getMajorVersion()
返回servlet容器支持的Servlet API的版本號,所有實現都必須返回整型數2。

getMinorVersion()方法略。

getMimeType()方法概述:public java.lang.String getMimeType(java.lang.String file)
返回指定文件的文件類型,如果文件類型未知,則返回null。文件類型由servlet容器的設置決定並在一個web-app中被指定。一般情況下的文件類型是:"text/html" 和"image/gif"。

getResourcePaths()方法概述:public java.util.Set getResourcePaths(java.lang.String path)
返回一個存儲web-app中所有資源路徑的Set(集合)。
路徑以”/"結尾表示一個子目錄,並以"/"開頭表示一個對於web-app的相對路徑。

例子:
/welcome.html
/catalog/index.html
/catalog/products.html
/catalog/offers/books.html
/catalog/offers/music.html
/customer/login.jsp
/WEB-INF/web.xml
/WEB-INF/classes/com.acme.OrderServlet.class,

getResourcePaths("/") 將返回Set {"/welcome.html", "/catalog/", "/customer/", "/WEB-INF/"};
getResourcePaths("/catalog/") 將返回Set {"/catalog/index.html", "/catalog/products.html", "/catalog/offers/"}。

如果子目錄爲空,返回null。


getResource()方法概述:public java.net.URL getResource(java.lang.String path) throws java.net.MalformedURLException
返回由path指定的資源路徑對應的一個URL對象,該path必須以“/"開頭並作爲當前目錄的相對位置。
該方法允許servlet容器使serlets中的一個資源變爲可用。該資源允許是個本地資源或是個遠程文件系統,這些資源能在數據庫中,或在一個.war文件中。
servlet容器必須實現URL句柄和URLCOnnection對象,這些對象對於資源訪問是必需的。
如果沒有匹配的資源,該方法返回null。
某些容器甚至能向該方法所返回的資源寫數據。
這個資源能直接返回,所以請求一個a.jsp文件將返回JSP源文件。用一個RequestDispatcher對象取而代之,能包含執行的結果。
這個方法功能有別於java.lang.Class.getResource,一個基於class loader檢索資源的方法。但前者不依賴於class loaders。

getResourceAsStream()方法概述:public java.io.InputStream getResourceAsStream(java.lang.String path)
返回一個由String path指定位置資源的InputStream。返回的InputStream能是任意類型和長度的。

getRequestDispatcher()方法概述:public RequestDispatcher getRequestDispatcher(java.lang.String path)
返回一個RequestDispatcher對象,該對象扮演着一個給定資源包裝者的角色。一個RequestDispatcher對象能用於傳送一個請求到特定資源或把特定資源包含到一個響應當中。該特定資源能是動態的也能是靜態的。
通過getContext()方法能爲外部contexts資源獲取RequestDispatcher對象。如果ServletContext不能獲取RequestDispatcher對象,返回null。

getNamedDispatcher()方法概述:public RequestDispatcher getNamedDispatcher(java.lang.String name)
爲指定名字的servlet對象返回一個RequestDispatcher對象。Servlet和JSP頁面能通過服務器管理或web application deployment descriptor被命名。一個Servlet實例的名稱能由ServletConfig.getServletName()決定。

getServlet()方法、getServlets()方法、getServletNames()方法,不推薦使用。

log(java.lang.String msg)方法概述:public void log(java.lang.String msg)
把指定的信息寫進servlet日誌文件,通常是事物日誌。日誌文件的名稱和類型和servlet容器有關。

public void log(java.lang.Exception exception,java.lang.String msg) 略
public void log(java.lang.String message,java.lang.Throwable throwable) 略

getRealPath()方法概述:public java.lang.String getRealPath(java.lang.String path)
返回一個指定虛擬路徑的真實路徑(完整路徑)的字符串。
舉例:虛擬路徑"/index.html"將返回服務器文件系統中的絕對路徑"http://host/contextPath/index.html", 當中的contextPath是ServletContext的上下文路徑。
返回的路徑將適用於servlet容器所運行的操作系統。如果無法把虛擬路徑映射爲真實路徑,該方法將返回null。(比如當路徑指定的內容是源於.war文件)

getServerInfo()方法概述:public java.lang.String getServerInfo()
返回servlet容器的名稱和版本號。
返回的字符串格式是servername/versionnumber(服務器名/版本號),例如:the JavaServer Web Development Kit 將返回字符串”JavaServer Web Dev Kit/1.0”。
servlet容器還將返回其他可選信息,如:“JavaServer Web Dev Kit/1.0 (JDK 1.1.6; 視窗系統 NT 4.0 x86)”

getInitParameter()方法概述:public java.lang.String getInitParameter(java.lang.String name)
返回上下文定義的變量的值,如果變量不存在,返回null。
見ServletConfig.getInitParameter(java.lang.String)。

getInitParameterNames()方法概述:public java.util.Enumeration getInitParameterNames()
返回上下文定義的所以變量的枚舉函數,如果空則返回空枚舉函數。

getAttribute()方法概述:public java.lang.Object getAttribute(java.lang.String name)
返回指定名字的servlet容器變量值,如果無該變量則返回null。

getAttributeNames()方法概述:public java.util.Enumeration getAttributeNames()
返回servlet容器的所有變量的枚舉函數,如果空則返回空枚舉函數。

setAttribute()方法概述:public void setAttribute(java.lang.String name,java.lang.Object object)
在servlet容器內綁定一個指定對象給一個指定的名字。如果該名字已綁定到一個對象,則用該對象覆蓋之。
If listeners are configured on the ServletContext the container notifies them accordingly. (不會翻譯,求助)
如果傳遞一個null值,則相當於調用removeAttribute()。

removeAttribute()方法概述:public void removeAttribute(java.lang.String name)
移除指定名字的servlet容器變量。

getServletContextName()方法概述:public java.lang.String getServletContextName()
返回web application的名字。

最後,見Servlet.getServletConfig(), ServletConfig.getServletContext()

〔StartupServlet.java〕

/*
* @class: StartupServlet
* @version: 1.0
* @Date: 2004/12/16 15:51:40
*/
package com.chinacreator.ac.javabean.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.net.*;

import com.chinacreator.tousu.application.*;
import com.chinacreator.tousu.application.ApplicationDocument.*;
import com.chinacreator.ac.javabean.log.*;
import com.chinacreator.ac.javabean.util.*;
import com.chinacreator.ac.javabean.servlet.*;

/**
*
* <p>Title: StartupServlet</p>
* <p>Description: 啓動加載的servlet類</p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: chinacreator</p>
* @author hui.deng
* @version 1.0
* @see
*/
public class StartupServlet
extends HttpServlet {

private static final Log log = new Log(StartupServlet.class);

private ApplicationDocument document = null;

//Initialize global variables
public void init() throws ServletException {

ServletContext application = this.getServletContext();

AccessControlFacade facade = new AccessControlFacade();
DictionaryProcessor dictionaryProcessor = facade.getAllDictionariesWrapper();

/**
* 存入字典
* @param dictionaryProcessor 字典處理器
*/
application.setAttribute(Constant.DICTIONARY_OBJECT_NAME,
dictionaryProcessor);
}

}


〔web.xml〕

<servlet>
<servlet-name>startupservlet</servlet-name>
<servlet-class>com.chinacreator.ac.javabean.servlet.StartupServlet</servlet-class>
<load-on-startup>10</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>startupservlet</servlet-name>
<url-pattern>/startup</url-pattern>
</servlet-mapping>

〔get.jsp〕

/**
* 取出字典
* @return Object 字典處理器
*/
public Object getDictionaryProcessor() {
return application.getAttribute(Constant.DICTIONARY_OBJECT_NAME);
}


以上內容由 華夏名網 蒐集整理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章