上下文 —— ServletConfigServletContext

Posted yifanSJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上下文 —— ServletConfigServletContext相关的知识,希望对你有一定的参考价值。

一、ServletConfig对象

在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。(配置在某个servlet标签或者整个web-app下)

<servlet> 
    <servlet-name>DemoServlet</servlet-name> 
    <servlet-class>cn.csdn.web.servlet.DemoServlet</servlet-class> 
    <init-param> 
        <param-name>version</param-name> 
        <param-value>2.0</param-value> 
    </init-param>  
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>DemoServlet</servlet-name> 
    <url-pattern>/demo/*</url-pattern> 
</servlet-mapping> 

当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

首先,需要创建私有变量:private ServletConfig config = null;

其次,要重写init方法,传入config,令this.config = config;从而获得ServletConfig对象

最后,就可以获得<init-parm>中的配置信息了

String username = this.config.getInitParameter("username");  
String password = this.config.getInitParameter("password");

二、ServletContext对象

1、ServletContext对象是由谁创建的

由Servlet容器负责创建,对于每个JavaWeb应用,在WEB容器启动时,Servlet容器都会为每个web应用程序创建一个ServletContext对象,它代表当前web应用。

2、servletContext对象的获取:

1)ServletContext对象被包含在ServletConfig对象中 所以可以通过ServletConfig 对象调用ServletConfig.getServletContext()获得对ServletContext对象的引用。

2)在继承了HttpServlet对象的类中 可以通过this.getServletContext来获取。

3、ServletContext接口是Servlet中最大的一个接口,呈现了web应用的Servlet视图。ServletContext实例是通过 getServletContext()方法获得的,由于HttpServlet继承Servlet的关系GenericServlet类和 HttpServlet类同时具有该方法。每个应用都会有一个ServletContext对象与之关联,当容器分布在在多个虚拟机上时,web应用在所分布的每个虚拟机上都拥有一个ServletContext实例.缺省情况下,ServletContext不是分布式的,并且只存在于一个虚拟机上。

4、例子

1)初始化参数

在web.xml中配置初始化参数

<web-app>
    <param-name>email</param-name>
    <param-value>[email protected]</param-value>
</web-app>

从Servlet中访问初始化参数:

ServletContext application=this.getServletContext();
out.println("send us your<a href=<mailto:‘");
out.println(application.getInitParameter("email"));
out.println("‘>email</a>");

2)属性

可以通过编程的方式绑定,也可以作为web应用的全局变量被所有Servlet和JSPs访问

设置Context属性:

ServletContext application=this.getServletContext();
application.setAttribute("person1",new Person("Jim"));
application.setAttribute("person2",new Person("Green"));

获取Context属性:

ServletContext application=this.getServletContext();
Enumberation persons=application.getAttributeNames();
while(persons.hasMoreElements()){
    String name=(String)persons.nextElement();
    Person p=(Person)persons.getAttribute(name);
    application.removeAttribute(name);
}

 

以上是关于上下文 —— ServletConfigServletContext的主要内容,如果未能解决你的问题,请参考以下文章

进程上下文中断上下文及原子上下文***

278 执行上下文执行上下文栈:变量提升与函数提升,执行上下文,执行上下文栈,全局执行上下文,函数执行上下文,练习题

JS中的执行上下文

如果上下文不是活动上下文而是应用程序上下文,如何启动 Intent

flask基础之AppContext应用上下文和RequestContext请求上下文

CPU上下文切换