SRV.3.1 Introduction to the ServletContext Interface
Servlet Context,从Servlet的角度来看,可以理解为它所属Web应用程序,ServletContext是一个接口,Servlet容器的提供商必须要实现这个接口。
ServletContext能做什么呢?它可以把事件记录到日志中,获得资源的URL,还可以利用ServletContext存放一些所有Servlet都能共享的数据。
ServletContext有一个路径,例如http://www.mycorp.com/catalog,这里的cataqlog就是ServletContext的路径,所有的对catalog的请求都会关联到这个ServletContext.
SRV.3.2 Scope of a ServletContext Interface
Servlet Context,从Servlet的角度来看,可以理解为它所属Web应用程序,ServletContext是一个接口,Servlet容器的提供商必须要实现这个接口。
ServletContext能做什么呢?它可以把事件记录到日志中,获得资源的URL,还可以利用ServletContext存放一些所有Servlet都能共享的数据。
ServletContext有一个路径,例如http://www.mycorp.com/catalog,这里的cataqlog就是ServletContext的路径,所有的对catalog的请求都会关联到这个ServletContext.
SRV.3.2 Scope of a ServletContext Interface
在Servlet容器中,每个ServletContext通常只有一个实例。当Web容器是分布式的部署在多台机器上时,那一个ServletContext在每个JVM上都有一个实例。
在Servlet容器中,但没有部署的Servlet也是允许的,这种Servlet属于一个缺省的ServletContext,这种缺省的ServletContext不能被分布到多个JVM上。
SRV.3.3 Initialization Parameters
在ServletContext接口中,有两个方法可以用来获得初始化参数:
• getInitParameter
• getInitParameterNames
SRV.3.4 Context Attributes
在ServletContext中,有4个方法可以用来设置和管理ServletContext的属性:
• setAttribute
• getAttribute
• getAttributeNames
• removeAttribute
SRV.3.4.1 Context Attributes in a Distributed Container
ServletContext中的属性只在本地的JVM中有效,不能被分布式环境中运行于其它JVM中的Servlet访问,如果需要在分布式环境中共享数据,可以把数据存放在Session,数据库或EJB中。
SRV.3.5 Resources
资源指的是在Web应用程序中的一些静态的内容,如静态HTML页面,图片等等。ServletContext提供了两个方法来访问这些资源:
• getResource
• getResourceAsStream
这两个方法都接受一个String型参数,它指定了一个以"/"开头的相对于这个ServletContext的资源路径。资源可以放在同一服务器上,或者不同服务器上,或者在一个Web应用程序的WAR包中。
需要注意的是,这两个方法不能用来获取动态内容,如果我们用这两个方法去取一个JSP页面,返回的将是JSP页面的源代码。
getResourcePaths(String path)方法可以用来获取一个资源列表。
SRV.3.6 Multiple Hosts and Servlet Contexts
Web服务器可能支持多个域名分享一个IP地址,这种配置叫做“虚拟主机”。在这种情况下,每个虚拟主机必须要有自己的ServletContext,而不能共享一个ServletContext。
SRV.3.7 Reloading Considerations
所有的Servlet和它们引用的类必须都处于一个类装载器范围内。
SRV.3.7.1 Temporary Working Directories
每一个ServletContext都需要一个临时目录,并且通过 javax.servlet.context.tempdir属性指定。Servlet容器不需要管理这个临时路径的内容,但是要确保一个 ServletContext的临时目录对其他的ServletContext是不可见的v