ServletContext接口
public interface ServletContext
(https://docs.oracle.com/javaee/7/api/javax/servlet/ServletContext.html)
一、介紹
定義了一組servlet用來與其servlet容器進行通信的方法,例如,獲取文件的MIME類型,調度請求或寫入日志文件。
在每個JVM中的每個Web Application中,只有一個ServletContext。
而一個“Web Application”一些servlet和特定內容的集合,這些內容安裝在服務器的URL命名空間的一個特定子集下(如/catalog),並可能通過一個.war文件安裝。
若一個“Web Application”的部署描述符中標記其為“distributed(分布式)”的,則每個虛擬機中都會有一個context實例。這種情況下,該context不能用作共享全局信息的位置,因為它的信息並不是真正全局的,可以使用外部資源取而代之,如數據庫。
ServletContext對象包含在ServletConfig對象中,而ServletConfig對象是Web服務器在Servlet進行初始化時提供給servlet的。
二、屬性
1、static String ORDERED_LIBS
ServletContext屬性的名稱,其值(類型為java.util.List <java.lang.String>)包含WEB-INF / lib中的JAR文件的名稱列表,按其網頁片段名稱排序。
2、static String TEMPDIR
ServletContext屬性的名稱,它存儲由ServletContext的Servlet容器提供的私有臨時目錄(類型為java.io.File)
三、方法(太多了,挑重要的)
1、String getContextPath()
返回Web應用程序的上下文路徑;對於默認(根)上下文,返回“ ”。
上下文路徑是請求URI的一部分,用於選擇請求的上下文。上下文路徑始終在請求URI中首先出現(IDEA中部署Tomcat時,deployment標簽頁中就能自定義Application Context,例如我定義為“/hrm”,那么服務器啟動后,就會自動打開“http://localhost:8080/hrm/”)。如果此上下文是以Web服務器的URL名稱空間為根的“默認”上下文,則此路徑將為空字符串。如果上下文不是植根於服務器名稱空間的根目錄,則路徑以/字符開始,但不以/結尾。
一個servlet容器可能會通過多個上下文路徑來匹配上下文。例如,HttpServletRequest.getContextPath()將返回請求使用的實際上下文路徑,它可能與此方法返回的路徑不同。此方法返回的上下文路徑應被視為應用程序的主要或首選上下文路徑。
2、ServletContext getContext(String uripath)
返回對應於服務器上指定URL的ServletContext對象;如果不存在或容器希望限制此訪問,則返回null。
此方法允許servlet訪問服務器各個部分的上下文,並根據需要從上下文獲取RequestDispatcher對象。指定的路徑必須以“/”開頭,相對於服務器的文檔根目錄解釋,並與此容器上托管的其他Web應用程序的上下文根相匹配。
在有安全考慮的環境中,servlet容器可能會為給定的URL返回null。
3、int getMajorVersion()
返回此servlet容器支持的Servlet API的主要版本。所有符合版本3.0的實現都必須使用此方法返回整數3。
4、int getMinorVersion()
返回此servlet容器支持的次要版本的Servlet API。所有符合版本3.0的實現都必須使用此方法返回整數0。
5、String getMimeType(String file)
返回指定文件的MIME類型,如果MIME類型未知,則返回null。
Multipurpose Internet Mail Extensions (MIME)是一種Internet標准,它將電子郵件的格式擴展到支持。
MIME類型由servlet容器的配置確定,並且可以在Web應用程序部署描述符中指定。 常見的MIME類型包括text / html和image / gif。
6、Set<String> getResourcePaths(String path)
返回Web應用程序中最長子路徑與提供的路徑參數匹配的資源的所有路徑的目錄列表;如果路徑以提供的路徑開始的Web應用程序中沒有資源,則返回null。
指示子目錄路徑的path以/結尾。
返回的路徑全部相對於Web應用程序的根,或者相對於Web應用程序的/ WEB-INF / lib目錄內的JAR文件的/ META-INF / resources目錄,並且具有前導/。
For example, for a web application containing:
/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
/WEB-INF/lib/catalog.jar!/META-INF/resources/catalog/moreOffers/books.html
getResourcePaths("/") would return {"/welcome.html", "/catalog/", "/customer/", "/WEB-INF/"},
and getResourcePaths("/catalog/") would return {"/catalog/index.html", "/catalog/products.html", "/catalog/offers/", "/catalog/moreOffers/"}.
7、URL getResource(String path) throws MalformedURLException
返回映射到指定路徑的資源的URL。
8、InputStream getResourceAsStream(String path)
以InputStream對象的形式返回位於指定路徑的資源。
Returns the resource located at the named path as an InputStream object.
The data in the InputStream can be of any type or length. The path must be specified according to the rules given in getResource. This method returns null if no resource exists at the specified path.
Meta-information such as content length and content type that is available via getResource method is lost when using this method.
The servlet container must implement the URL handlers and URLConnection objects necessary to access the resource.
This method is different from java.lang.Class.getResourceAsStream, which uses a class loader. This method allows servlet containers to make a resource available to a servlet from any location, without using a class loader.
9、RequestDispatcher getRequestDispatcher(String path)
返回一個RequestDispatcher對象,充當位於指定路徑的資源的包裝器。
RequestDispatcher對象可用於將轉發請求給資源或將資源包含在響應中。 資源可以是動態的或靜態的。
路徑名必須以/開頭,並被解釋為相對於當前上下文根。 使用getContext為外部上下文中的資源獲取RequestDispatcher。
如果ServletContext無法返回RequestDispatcher,則此方法返回null。
10、RequestDispatcher getNamedDispatcher(String name)
返回一個RequestDispatcher對象充當指定的Servlet的包裝器;
Servlet(也可以是JSP頁面)可以通過服務器管理或通過Web應用程序部署描述符給出名稱。 一個servlet實例可以使用ServletConfig.getServletName()來確定它的名字。
如果ServletContext由於某種原因無法返回RequestDispatcher,則此方法返回null。
11、void log(String msg)
將指定的消息寫入一個servlet日志文件,通常是一個事件日志。 servlet日志文件的名稱和類型是特定於servlet容器的。
將給定Throwable異常的解釋性消息和堆棧跟蹤寫入servlet日志文件。
servlet日志文件的名稱和類型是特定於servlet容器的,通常是一個事件日志。
12、String getRealPath(String path)
例如,如果path等於/index.html,則此方法將返回服務器文件系統上的絕對文件路徑,其格式為http|://<host>:<port>/<contextPath>/index.html,其中<contextPath>對應於此ServletContext的上下文路徑。
返回的真實路徑將采用適合運行servlet容器的計算機和操作系統的形式,包括適當的路徑分隔符。
Resources inside the /META-INF/resources directories of JAR files bundled in the application's /WEB-INF/lib directory must be considered only if the container has unpacked them from their containing JAR file, in which case the path to the unpacked location must be returned.
如果servlet容器無法將給定的虛擬路徑轉換為真實路徑,則此方法返回null。
13、String getServerInfo()
返回的字符串的形式是servername / versionnumber。例如,JavaServer Web Development Kit可能會返回字符串JavaServer Web Dev Kit / 1.0。
servlet容器可以在括號內的主字符串之后返回其他可選信息,例如JavaServer Web Dev Kit / 1.0(JDK 1.1.6; Windows NT 4.0 x86)。
14、String getInitParameter(String name)
返回一個String,其中包含上下文范圍中指定的初始化參數的值,如果該參數不存在,則返回null。
此方法可以使可用的配置信息對整個Web應用程序有用。 例如,它可以提供網站管理員的電子郵件地址或保存關鍵數據的系統的名稱。
15、Enumeration<String> getInitParameterNames()
返回全部的初始化參數的值。
16、boolean setInitParameter(String name,String value)
設定指定參數。
17、Object getAttribute(String name)
返回具有給定名稱的servlet容器屬性;如果沒有該名稱的屬性,則返回null。
一個屬性允許servlet容器為servlet提供這個接口尚未提供的附加信息。 有關其屬性的信息,請參閱您的服務器文檔。 可以使用getAttributeNames檢索支持的屬性列表。
該屬性作為java.lang.Object或某個子類返回。
屬性名稱應遵循與包名稱相同的約定。 Java Servlet API規范保留與java。*,javax。*和sun。*匹配的名稱。
18、Enumeration<String> getAttributeNames()
返回包含此ServletContext中可用的屬性名稱的Enumeration。
可以使用getAttribute(java.lang.String) 方法獲取指定屬性的值。
19、void setAttribute(String name,Object object)
在此ServletContext中將對象綁定到給定的屬性名稱。 如果指定的名稱已用於某個屬性,則此方法將用新屬性替換舊屬性。
如果在ServletContext上配置了監聽器,容器會相應地通知它們。
如果傳遞一個空值,則效果與調用removeAttribute()相同。
屬性名稱應遵循與包名稱相同的約定。 Java Servlet API規范保留與java.*,javax.*和sun.*匹配的名稱。
20、void removeAttribute(String name)
從此ServletContext中刪除具有給定名稱的屬性。 刪除后,后續調用getAttribute(java.lang.String)來檢索屬性的值將返回null。
如果在ServletContext上配置了監聽器,容器會相應地通知它們。
21、String getServletContextName()
返回與此ServletContext相對應的Web應用程序的ContextServlet的名稱,它通過Web應用程序的部署描述符中的 display-name元素指定。
返回null,如果在web.xml中沒有指定。
22、ServletRegistration.Dynamic addServlet(String servletName, String className)
在通過調用addServlet(String, Servlet) 向此ServletContext注冊之前,可以對返回的Servlet實例進行進一步定制。
給定的Servlet類必須定義一個零參數構造函數,用於實例化它。
23、FilterRegistration.Dynamic addFilter(String filterName,String className)
將具有給定名稱和類名的過濾器添加到此servlet上下文中。
注冊的過濾器可以通過返回的FilterRegistration object.ent構造函數進一步配置,該構造函數用於實例化它。
還有其它兩個重載的addFilter()
24、<T extends Filter> T createFilter(Class<T> clazz) throws ServletException
實例化給定的Filter類。
在通過調用addFilter(String,Filter)向此ServletContext注冊之前,可能會進一步定制返回的Filter實例。
給定的Filter類必須定義一個零參數構造函數,用於實例化它。
如果給定的clazz代表Managed Bean,則此方法支持資源注入。 有關托管Bean和資源注入的更多詳細信息,請參閱Java EE平台和JSR 299規范。
25、中間有一些關於cookie和session獲取、設置的函數,省略了。
26、void addListener(String className)
將具有給定類名的偵聽器添加到此ServletContext中。
具有給定名稱的類將使用與由此ServletContext表示的應用程序關聯的類加載器加載,並且必須實現以下一個或多個接口:
- ServletContextAttributeListener
- ServletRequestListener
- ServletRequestAttributeListener
- HttpSessionAttributeListener
- HttpSessionIdListener
- HttpSessionListener
還有兩個重載函數,功能是一樣的。
27、<T extends EventListener> T createListener(Class<T> clazz) throws ServletExceptio
實例化指定的listener類;
在通過調用addListener(EventListener)向此ServletContext注冊之前,可以對返回的EventListener實例進行進一步自定義。
給定的EventListener類必須定義一個零參數構造函數,用於實例化它。
28、JspConfigDescriptor getJspConfigDescriptor()
獲取由此ServletContext表示的Web應用程序的web.xml和web-fragment.xml描述符文件聚合而成的<jsp-config>相關配置。
29、ClassLoader getClassLoader()
獲取由此ServletContext表示的Web應用程序的類加載器。
30、String getVirtualServerName()
返回部署ServletContext的邏輯主機的配置名稱。 Servlet容器可能支持多個邏輯主機。
此方法必須為部署在邏輯主機上的所有Servlet上下文返回相同的名稱,並且此方法返回的名稱必須是不同的,每個邏輯主機都是穩定的,並且適用於將服務器配置信息與邏輯主機相關聯。
預期或不要求返回的值等同於邏輯主機的網絡地址或主機名。