zoukankan      html  css  js  c++  java
  • [07] ServletContext上下文对象


    1、上下文的概念

    我们在说到Servlet的继承关系时,提到自定义Servlet实际上间接实现了Servlet和ServletConfig两个接口,其中ServletConfig接口中定义了一个方法叫getServletContext,用以获取Servlet运行的上下文环境对象。

    这里就要先说明一下,如何理解所谓的 “上下文”。

    每个Web项目,运行时部署在Web应用服务器(如Tomcat、Jetty、WebLogic etc.)下,我们称之为一个应用(Application)。我们知道一个Web应用里可以有多个Servlet,而这里的Servlet上下文就可以理解为这些Servlet的运行环境。

    抽象地说,是Web服务器中已知路径的根,是一个域,一个环境范围:

    形象地说,如果把数据比作鱼,Servlet比作鸭子,那么所谓的Servlet上下文就是湖水或者湖:

    如果现在有一份数据需要传给所有的Servlet使用,那么我们就可以使用ServletContext对象了。就像某只鸭子(Servlet)肚子里的鱼(数据)是没办法共享给另一只鸭子的,可是放在湖里的鱼,至少每个鸭子都可以去咀一口,这里的湖就是ServletContext了。
     

    2、ServletContext对象的获取

    其实从上面我们对ServletContext的描述,也不难推断出它的创建时机:每当一个Web应用被加载,那么它的上下文环境就被封装为一个ServletContext对象创建出来了。

    如何得到ServletContext对象?

    实际上,ServletContext对象被放到了每一个Servlet中的ServletConfig对象里,还记得继承关系中GenericServlet的init方法吗:

    public void init(ServletConfig config) throws ServletException { 
        this.config = config;
        this.init();
    }

    初始化时,就把装有ServletContext的ServletConfig,在init方法中赋值给了属性config。而GenericServlet有一个getServletContext方法,它先调用自身的getServletConfig,再调用ServletConfig对象的getServletContext的方法:

    public ServletContext getServletContext() {
        return getServletConfig().getServletContext();
    }

    也就是说,我们自定义的Servlet由于继承关系,可以直接调用getServletContext方法,获取上下文对象

    ServletContext servletContext = this.getServletContext();

    3、ServletContext的方法

    Servlet API 中定义了ServletContext接口,用来封装上下文对象。

    下面是部分方法:
    类型        方法名        
    说明    
    void    setAttribute(String key, Object value)以key/value形式保存对象值
    Object    getAttribute(String key)通过key获取对象值
    String    getInitParameter(String path)返回上下文参数的值    
    String    getRealPath(String path)根据虚拟路径返回实际路径

    • getAttribute / setAttribute 通过理解我们知道,ServletContext类似一个全局变量,可以使用者两个方法实现多个用户之间数据共享
    • getInitParameter 单个Servlet可以在web.xml中配置初始参数,上下文环境当然也可以
      • <context-param> <param-name>name<param-name/> <param-value>value<param-value/> </context-param>
    • getRealPath 获取Web应用根目录实际路径,如getRealPath("/")返回诸如类似于C:workspaceproject rain estlearnsrcmainwebapp


  • 相关阅读:
    Windbg Call Stack(调用堆栈)窗口的使用
    设置微软符号服务器的又一方法
    windbg是如何搜索符号文件的?
    如何关闭/禁用.NET JIT调试对话框
    EXCEPTION_HIJACK(0xe0434f4e)异常的抛出过程
    异常EXCEPTION_HIJACK(0xe0434f4e)
    Windows WoW64浅析
    在执行一行代码之前CLR做的68件事
    异常CLRDBG_NOTIFICATION_EXCEPTION_CODE( 0x04242420)的抛出过程
    异常CLRDBG_NOTIFICATION_EXCEPTION_CODE( 0x04242420)
  • 原文地址:https://www.cnblogs.com/deng-cc/p/7462909.html
Copyright © 2011-2022 走看看