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. 初次搭建vue环境(最基础的)

    一直以来觉得搭建环境是自己的短板,恰巧老大跟我说他刚才面试一个有4年工作经验的人,给那面试的人出了到机试题,给了1小时的时间连环境都没搭好.且不说那人的工作经验是否掺有水分,自己还是有点尴尬的,以前的 ...

  2. Android开发 去掉标题栏方法 摘记

    1.用代码里实现 提示:这句代码要写在Activity中的setContentView()方法前面. 2.在清单文件(Androidmanifest.xml)里面实现   android:theme= ...

  3. 【Centos7】安装mysql5.7.16.tar.gz

    操作系统 centos7.1 云主机 1.下载好了压缩包到windows电脑上 2.使用Smartty的SCP传输到云主机的/home/xxx/下 3.解压 tar xvf  mysql-5.7.16 ...

  4. .NET 自定义Json序列化时间格式

    .NET 自定义Json序列化时间格式 Intro 和 JAVA 项目组对接,他们的接口返回的数据是一个json字符串,里面的时间有的是Unix时间戳,有的是string类型,有的还是空,默认序列化规 ...

  5. WP开发图片保存到独立存储并从独立存储中读取

    需要添加引用命名空间 using System.IO; using System.IO.IsolatedStorage; 1.将图片保存到独立存储空间 using (IsolatedStorageFi ...

  6. websphere:rs.getDate()无法使用的解决方法

    参考java.text.SimpleDateFormat 在tomcat中我们可以根据数据的类型将结果集获取到,但在websphere中却无法实现,原因不详. 现在有两种解决方法: 第一种方法是当字符 ...

  7. FileDetector-基于java开发的照片整理工具

    1. 项目背景 开发这个功能的主要原因如下: 1. 大学期间拍摄了约50G的照片,照片很多 2. 存放不规范,导致同一张照片出现在不同的文件夹内,可读性差,无法形成记忆线. 3. 重复存放过多,很多照 ...

  8. Keil报错failed to execute 'd:\Keil\C51\BIN\C51.EXE'

    关于老师发的keil软件报错如下: --- Error: failed to execute 'd:\Keil\C51\BIN\C51.EXE' 错误是因为老师直接拷贝的安装目录,里面的文件路径设置仍 ...

  9. 再起航,我的学习笔记之JavaScript设计模式18(观察者模式)

    观察者模式 观察者模式(Observer): 又被称为发布-订阅者模式或消息机制,定义了一种依赖关系,解决了主体对象与观察者之间功能的耦合. 创建一个观察者对象 首先我们创建一个闭包对象,让其在页面加 ...

  10. c语言中的文件格式化读写函数fscanf和fprintf函数

    很多时候我们需要写入数据到文件中时都觉得很困扰,因为格式乱七八槽的,可读性太差了,于是我们就想有没有什么函数可以格式化的从文件中输入和输出呢,还真有.下面我将讲解一下fscanf和fprintf的强大 ...