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();
}
4
 
1
public void init(ServletConfig config) throws ServletException { 
2
    this.config = config;
3
    this.init();
4
}

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

public ServletContext getServletContext() {
return getServletConfig().getServletContext();
}
3
 
1
public ServletContext getServletContext() {
2
    return getServletConfig().getServletContext();
3
}

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

ServletContext servletContext = this.getServletContext();
 
1
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:\workspace\project\train\test\learn\src\main\webapp\


[07] ServletContext上下文对象的更多相关文章

  1. ServletContext (上下文对象)

    一.什么是ServletContext ServletContext代表是一个web应用的上下文对象(web应用对象) 里面封装的都是web应用信息 一个ServletContext对应一个应用 二. ...

  2. 上下文对象-请求对象-响应对象(ServletContext - response - request)

    目录 上下文对象-请求对象-响应对象 ServletContext response request 上下文对象-请求对象-响应对象 ServletContext 什么是ServletContext ...

  3. Context上下文对象(抄书的)

    Servlet上下文 ServletContext 上下文接口    ServletContext接口    每一个应用都有唯一的一个上下文对象,即为ServletContext对象    Servl ...

  4. Servlet配置对象、上下文对象、多线程问题

    一.Servlet配置对象(ServletConfig):Servlet初始化时,容器调用其init(ServletConfig)方法,传递该对象. 1.获得对象方法: (1).直接使用getServ ...

  5. EL的隐含对象(一)【页面上下文对象】

    页面上下文对象为pageContext,用于访问JSP内置对象(例如:request.response.out.session.exception.page等)和ServletContext.在获取到 ...

  6. EF上下文对象线程内唯一性与优化

    在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,这也加是很多人的代码中习惯在使用上下文对象时,习惯将对象建立在using中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...

  7. 【无私分享:ASP.NET CORE 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 上一章,我们介绍了安装和新建控制器.视图,这一章我们来创建个数据模型,并且添加接口和实现类. 添加EF上下文对象 按照我们以前 ...

  8. [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. [译] ASP.NET 生命周期 – ASP.NET 上下文对象(七)

    使用 HttpRequest 对象 HttpRequest 对象描述的是一个正在被处理的 HTTP 请求.下表列举了 HttpRequest 中的属性,它们提供了当前请求的相关信息(HttpReque ...

随机推荐

  1. Fiddler获取https会话

    默认下,Fiddler不会捕获HTTPS会话,需要你设置下, 打开Fiddler  Tools--->Fiddler Options--->HTTPS 选项  选中checkbox,如上图 ...

  2. Vue多元素过渡

    前面的话 前面分别介绍了单元素过渡的CSS过渡和JS过渡,本文将详细介绍Vue多元素过渡 常见示例 最常见的多标签过渡是一个列表和描述这个列表为空消息的元素: <transition> & ...

  3. RSA简介(四)——求逆算法

    此处所谓求逆运算,是指在模乘群里求逆. 第一节里提到互质的两个定义: (1)p,q两整数互质指p,q的最大公约数为1. (2)p.q两整数互质指存在整数a,b,使得ap+bq=1. 只要明白了欧几里得 ...

  4. 【Js应用实例】图片预览

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. JDK环境变量的配置

    JDK环境变量的配置.. ==================>>> 右键“我的电脑”,选择“属性”,弹出的对话框中选择“高级系统设置” 在弹出的系统属性对话框中.选择“高级”,再选 ...

  6. 九天学会Java,第一天,变量和数据类型,赋值和输出

    用9天入门三门编程语言,有可能嘛,尤其是对没有基础的同学来说?对于想学好的编程的人来说,无论从哪一门语言开始入手,语言的本身其实并不是我们最应该的关心的,至少不是作为一个初学者首先关心的. 网络上,网 ...

  7. js获得时间new Date()整理

    Date对象取得年份有两种方法:getFullYear()和getYear() 经测试var dt = new Date(); //alert(new Date())弹出:Thu Aug 24 201 ...

  8. Spring框架——批处理(batch)和事务(Transaction)

    批处理(batch) 批处理(batch)------------>好比快递员[不能一件一件的送快递] - 批处理指的是一次操作中执行多条SQL语句 - 批处理相比于一次一次执行效率会提高很多 ...

  9. Thinkjs学习1—概述及MVC的粗略理解

    1.概述 ThinkJS 是一款使用 ES6/7 特性全新开发的 Node.js MVC 框架,对于之前是纯前端的童鞋,可能不了解MVC框架是什么,不知道后台和前台怎么配合. 本教程以Thinkjs2 ...

  10. Servlet的执行流程、生命周期

    下面这幅图的Request和Response的箭头方向反了,应该是客户端发出请求,然后web服务器返回响应. servlet生命周期阶段包括初始化.加载.实例化.服务和销毁.  编写Servlet的d ...