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上下文返回相同的名称,并且此方法返回的名称必须是不同的,每个逻辑主机都是稳定的,并且适用于将服务器配置信息与逻辑主机相关联。
预期或不要求返回的值等同于逻辑主机的网络地址或主机名。