三、ServletContext类
1)什么是ServletContext?
1.ServletContext是一个接口,他表示上下文对象
2.一个web工程,只有一个ServiceContext对象实例
【System.out.println(context)获取地址,代码是以文章最后的contextServlet1/contextServlet2基础上进行测试的】
3.ServletContext对象是一个域对象
4.ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。
什么是域对象?
域对象,是可以像Map一样存取数据的对象。这里的域指的是存取数据的操作范围,整个web工程。
存数据 | 取数据 | 删除数据 | |
Map | put() | get() | remove() |
域对象 | setAttribute() | getAttribute() | removeAttribute() |
2)ServletContex类的四个作用
-- 获取web.xml中配置的上下文参数context.param
-- 获取当前的工程路径,格式:/工程路径
-- 获取工程部署后在服务器硬盘上的绝对路径
-- 像Map一样存取数据
创建一个Servlet程序,不要勾选下面的方框(勾选后用的是3.0注解配置):
在web.xml中添加ContextServlet配置(注意两个类名对照一致):
1.获取web.xml中配置的上下文参数context.param
通过getServletConfig()方法获取上下文参数context.param
2.获取当前的工程路径,格式:/工程路径
3.获取工程部署后在服务器硬盘上的绝对路径
三个板块语句的源码及运行结果:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = getServletConfig().getServletContext();
//1、获取 web.xml 中配置的上下文参数 context-param
String username = context.getInitParameter("username");
String password = context.getInitParameter("password");
System.out.println("context-param参数username的值是:" + username);
System.out.println("context-param参数password的值是:" + password);
//2、获取当前的工程路径,格式: /工程路径
System.out.println("当前工程路径:" + context.getContextPath());
//3、获取工程部署后在服务器硬盘上的绝对路径
System.out.println("当前工程部署的绝对路径是:" + context.getRealPath("/"));
/* / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到 IDEA 代码的 web 目录;因此我们可以通过getRealPath取得web工程下文件的路径 */
}
工程路径和绝对路径的解析:【绝对路径和idea中web目录有一个对应关系】
4.像Map一样存取数据
contextServlet1:(注意在web.xml文件中<servlet-mapping>中添加相应的配置信息,下同)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取 ServletContext 对象
ServletContext context = getServletContext();
System.out.println(context);
System.out.println("保存之前:Context1 获取key1的值是:" + context.getAttribute("key1"));
context.setAttribute("key1","value");
System.out.println("Context1中获取域数据key1的值是:" + context.getAttribute("key1"));
}
contextServlet2:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = getServletContext();
System.out.println(context);
System.out.println("Context2 中获取的数据key1的值是:" + context.getAttribute("key1"));
}
执行结果:
首先执行contextServlet2,因为没有往context中存值,所以不管执行多少次都是null,再调用contextServlet1,在存值之前为null,存值之后显示key1的值value1,这时在调用contextServlet2,可以获取到key1的值。【ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。】