ServletContext及context上下文对象理解(se
一、servletContext对象的作用
可以先参考ServletContext介绍及用法 - qq_36371449的博客 - CSDN博客
1.作用一:获取全局参数
可以读取在web.xml定义的全局参数
疑问:
- servlet3.0之后怎么对全局参数进行配置?
Servlet3.0可以用@WebServlet注解给Web容器设置共享的初始化参数吗?
这篇文章说注解是不可以对设置全局参数的,那么在没有web.xml的情况下如何去配置?
2.作用二:读取web项目下的文件
为什么不能用IO流读取文件?
——之前使用IO流就可以读取文件(java项目中)。
——现在是一个web项目,web项目需要发布到tomcat下才能访问的。获取web项目下的文件如果使用传统的IO就会出现问题(原因:路径中使用的是相对路径,而且服务器里面的路径难寻找)。因此需要用servletContext来获取web项目下面的文件。servletContext对象之读取web项目下文件资源
3.作用三:存取数据,servlet间共享数据
(也就是域对象)
可以通过servletContext对象在servlet之间共享同一些数据。
二、servletContext的理解
-
servletContext实际上是一个接口,它的代码可以在文章:servlet接口、ServletConfig接口、GenericServlet抽象类、ServletContext接口、HttpServlet类源码及方法寻到,既然是接口就必有实现的类才有用,这个类在哪呢?
-
“context”可以翻译成“上下文”,常会出现,出现在Android开发Activity、service里,也出现在公司研发的开发平台(金蝶云)上,因此我对它开始好奇,感觉它是一个有通用的意思,就是取一些共同的资源或者系统资源。那它到底可以怎么理解呢?
-
可以体会到context代表的意义:公用信息、环境、容器...
上下文其实是一个抽象的概念。我们常见的上下文有Servlet中的pageContext,访问JNDI时候用的Context。写过这些代码的人可能比较容易理解,其实他们真正的作用就是承上启下。比如说pageContext他的上层是WEB容器,下层是你写的那个Servlet类,pageContext作为中间的通道让Servlet 和Web容器进行交互。再比如访问JNDI的Context,他的上层是JNDI服务器(可能是远程的),下层是你的应用程序,他的作用也是建立一个通道让你能访问JNDI服务器,同时也让JNDI服务器接受你的请求,同样起到交互作用。
看完我们来理解一下servletContext:当servlet获取项目整体资源的时候它其实是承上启下的作用,作为servlet和web的中间通道;当servlet和另一个servlet程序共享数据的时候,它提供的是servlet之间的交互。可以理解成中间仓库(“中间”意味着可以上下交互,“仓库”意味着servlet之间可以相互交互)
-
servletContext接口在哪实现?暂时没有找到确切的答案,但是因为servletContext的作用范围是在每一个Web应用工程内:
ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。 servletContext.png
因此我推测,它的实现是在服务器里面,服务器实现这个接口,然后对每一个在服务器上托管的工程(web工程)都生且只生成一个对象