一、什么是ServletContext?
- ServletContext是web应用的上下文对象,是一个域对象(能够存取数据的对象)
- ServletContext在服务器启动时会自动帮你建好,一个应用只有一个ServletContext。创建的多个Servlet都是共用一个ServletContext。
- ServletContext中封装着web的应用信息
- 所有的servlet都可以向其中存取数据,数据是共享的
注意:ServletContext是全局的
二、ServletContext的生命周期
服务器启动时创建,服务器关闭时结束
三、获取ServletContext的方法
1. 通过init方法中ServletConfig参数来获取
可以看到ServletContext被输出了
2. 在Servlet中获取
需要注意,如果想在service方法中获取ServletContext需要在init方法中加上super.init(config);
这是因为,this.getServletContext();其实就是帮你去init方法中调用 config.getServletContext();
而我们覆盖了父类的init方法,所以如果不加上这行代码。会找不到config的值,造成空指针异常错误
运行结果:
四、ServletContext获取绝对地址
在这里我们使用getRealPath方法,他的作用是获取到当前项目的根路径并与输入的的字符串拼接,形成新的地址。
ServletContext servletContext = this.getServletContext();
String realPath = servletContext.getRealPath("zg.doc");
可以看到输出的realPath就是我的项目根目录加上我输入的zg.doc
五、ServletContext进行数据的读写删
1. 写入数据我们使用setAttribute(name, object);
存入数据时采用键值对的形式
通过这样的方法我们就向servletContext中写入了一个名为userName,值为张三的数据
servletContext2.setAttribute("userName", "zhangsan");
2.读取数据时我们使用getAttribute(name);
通过输入名字获得其中的数据
通过这样的方法我们就可以从servletContext中读取一个名为userName的数据
servletContext2.getAttribute("username");
可以看到我们已经成功得到了之前存入的userName