一、ServletContext是什么
(1)接口名,是Servlet规范中的一员
(2)ServletContext还有另一个名字:应用域。
(3)如果所有的用户共享一份数据,并且这个数据很少的被修改,并且数据量少,可以放到ServletContext这个应用域中,可以提升效率。
二、ServletContext是什么实现的
(1)Tomcat(WEB服务器)实现了ServletContext接口
三、ServletContext对象的创建
(1)ServletContext对象是在WEB服务器启动的时候创建的。
(2)对于一个webapp来说,ServletContext对象只有一个。
(3)ServletContext对象在服务器关闭的时候销毁。
四、ServletContext的理解
1、Servlet对象的环境对象。(Servlet对象的上下文对象)
2、ServletContext对象其实对应的就是整个web.xml文件
3、Tomcat是一个容器,一个容器中中可以放多个webapp,一个webapp对应一个ServletContext对象。
五、ServletContext接口中常用的方法
1、通过初始化参数的name获取value
public String getInitParameter(String name)
2、获取所有的初始化参数的name
public Enumeration<String> getInitParameterNames()
注意:以上两个
3、获取项目的根路径【重要】
public String getContextPath()
注:(1)在源码中,不要将项目的根路径写死,因为最终项目部署时,名字可能会变
(1)动态地获取项目的根路径
4、获取文件的绝对路径(真实路径)
public String getRealPath(String path)
注:path是从web目录下开始找,加"/"是,不加"/"也是
5、记录日志
public void log(String message)和public void log(String message, Throwable t)
注:这个日志文件自动记录到CATALINA_HOME/logs目录下
6、向ServletContext应用域中存数据
public void setAttribute(String name, Object value);
7、向ServletContext应用域中取数据
public void getAttribute(String name);
8、从ServletContext应用域中删数据
public void removeAttribute(String name):
六、注意
1、以后编写Servlet类,实际上并不会继承GenericServlet类,因为JavaWeb是B/S结构的系统。这是基于HTTP超文本传输协议的,在Servlet规范中,提供了一个类叫HttpServlet,这是专门为HTTP协议准备的一个Servlet类,我们编写的Servlet类要继承HttpServlet。(HttpServlet是HTTP协议专用的)使用HttpServlet处理HTTP协议更便捷。
2、HttpServlet继承结构
jakarta.servlet.Servlet(接口)【爷爷】
jakarta.servlet.GenericServlet implements Servlet(抽象类)【儿子】
jakarta.servlet.HttpServlet extends GenericServlet(抽象类)【孙子】