Servlet Context(Servlet上下文)
4.1 Introduction to the ServletContext Interfacen ServletContext接口介绍
ServletContext 接口定义了运行在Web应用中的 servlet 的视图。容器提供者有义务提供在此 servlet 容器中 ServletContext 接口的一个实现。利用 ServletContext 对象,servlet 可以记录事件,获取资源的URL引用,设置和存储在此上下文中其它 Servlets 可以访问的属性。
4.2ServletContext接口的作用域
每一个部署到容器中的Web应用都有一个与之关联的 ServletContext 接口的实例对象。在容器被部署到多个虚拟机的情况下,对每一个JVM,Web 应用都有一个 ServletContext 的实例。
容器中没有被作为Web应用的一部分部署的 Servlets ,会隐含的作为“默认” Web应用的一部分并且有一个默认 ServletContext 。在一个分布式容器中,默认ServeletContext 是非分布式的并且只能存在于一个JVM中。
4.3初始化参数
下面的 ServletContext 接口方法允许 servlet 访问应用开发者在部署描述符中指定的与Web应用关联的上下文初始化参数:
getInitParameter
getInitParamertNames
初始化参数被应用开发者描述配置信息。典型的例子是网管的email地址,或者一个持有关键数据的系统的名称。
4.4配置方法
下面的方法从 Servlet 3.0 开始添加到 ServletContext ,以便可以编程式定义 servlets,filters 和映射他们的 Url 匹配。这些方法只能在应用的初始化期间被调用,要么是 ServletContextListener 实现的 contexInitialized 方法,要么是ServletContainerInitializer 实现的 onStartup 方法。除了添加 Servlets 和 Filters,还能查询与一个 Servlet 或者 Filter 对应的 Registration 对象实例,或者 servlets 或 filters 对应的所有 Registration 对象的Map。如果 ServletContext 传递给既没有在web.xml 或 web-fragment.xml中声明又没有@WebListener 注解的 ServletContextListener 的 contextInitialized 方法 ,在 ServletContext 中定义的用来编程式配置 servlets ,filters 和 listeners 的所有方法必须抛出 UnsupportedOperationException 异常。
4.4.1编程式添加和配置Servlets
对框架开发者来说能通过编程式添加一个 servlet 到给 context 是很有用的。例如,框架可以使用这个方法声明一个控制器 servlet。这个方法的返回值是一个ServletRegistration 或 ServletRegistration.Dynamic 对象,它允许你进一步设置这个 servlet 的其他参数,比如 init-params, url-mappings 等。这个方法有三个如下描述的重载版本:
4.4.1.1 addServlet(String servletName, String className)
这个方法允许应用编程式声明一个servlet。它用给定的名字和类名添加 servlet 到 servlet 上下文。
4.4.1.2 addServlet(String servletName, Servlet servlet)
这个方法允许应用编程式声明一个servlet。它用给定的名字和 servlet 实例添加 servlet 到 servlet 上下文。
4.4.1.3 addServlet(String servletName, Class extends Servlet> servletClass)
这个方法允许应用编程式声明一个servlet。它用给定的名字和一个 servlet 类的实例添加 servlet 到