博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[07] ServletContext上下文对象
阅读量:5291 次
发布时间:2019-06-14

本文共 2178 字,大约阅读时间需要 7 分钟。

1、上下文的概念

我们在说到Servlet的继承关系时,提到自定义Servlet实际上间接实现了Servlet和ServletConfig两个接口,其中ServletConfig接口中定义了一个方法叫getServletContext,用以获取Servlet运行的上下文环境对象。
这里就要先说明一下,如何理解所谓的 “上下文”。
每个Web项目,运行时部署在Web应用服务器(如Tomcat、Jetty、WebLogic etc.)下,我们称之为一个应用(Application)。我们知道一个Web应用里可以有多个Servlet,而这里的Servlet上下文就可以理解为这些Servlet的运行环境。
抽象地说,是Web服务器中已知路径的根,是一个域,一个环境范围:
1007017-20180617005319394-620605823.png
形象地说,如果把数据比作鱼,Servlet比作鸭子,那么所谓的Servlet上下文就是湖水或者湖:
1007017-20180617005319922-398193172.jpg
如果现在有一份数据需要传给所有的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\

转载于:https://www.cnblogs.com/deng-cc/p/7462909.html

你可能感兴趣的文章
CSS 基础
查看>>
MySQL用户变量的用法
查看>>
HDU 2002 计算球体积
查看>>
Java第八次作业 1502 马 帅
查看>>
大数据时代,百货行业信息化将如何变革?
查看>>
“互联网+”下的数据化运营和技术架构
查看>>
Ambari安装和汉化(转)
查看>>
vue1.0学习
查看>>
【bzoj5063】旅游 Splay
查看>>
C#中split的方法汇总(StringSplitOptions.RemoveEmptyEntries)
查看>>
URL的解析,C语言实现
查看>>
九度 1554:区间问题
查看>>
ASP.NET MVC 4.0 学习1-C#基础语法
查看>>
python笔记(持续更新)
查看>>
豆瓣电影1
查看>>
数组常用函数
查看>>
python 从csv读数据到mysql
查看>>
大数据笔记(十)——Shuffle与MapReduce编程案例(A)
查看>>
Python入门基础
查看>>
POJ 1182.食物链 并查集
查看>>