ServletContext
什么是ServletContext
ServletContext
代表是一个web应用的上下文对象(web应用对象)- 里面封装的都是web应用信息
- 一个
ServletContext
对应一个应用
ServletContext的生命周期
- 在服务器一启动的时候就会创建
- 在服务器关闭的时候销毁
如何获得上下文
- 通过
init方法
当中一个参数ServletConfig
来获取 - 直接在
HttpServlet
当中获取
this.getServletContext
这种方法本质还是通过config来去获取的
在JAVA src 创建com.iris.servlet
包
在该包下通过注解创建两个Servlet OneServlet.java
, SecondServlet.java
package com.iris.servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/OneServlet")
public class OneServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config); //复写父类方法 servlet 中 this.getServletContext() 才有效
ServletContext sc1 = config.getServletContext();
System.out.println(sc1);
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
ServletContext context = this.getServletContext();
System.out.println(context);
System.out.println("OneServlet");
}
}
package com.iris.servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/SecondServlet")
public class SecondServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
ServletContext sc2 = config.getServletContext();
System.out.println(sc2);
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("this is SecondServlet");
}
}
ServletContent 对象是全局的
获取全局的初始化参数
-
初始化参数不能再某一个Servlet当中来去配置。在最外层来去配置
-
获取全局初始化参数
获得Web应用中某一个资源的资源的绝对路径(路径拼接)
context.getRealPath("文件")
- 相对的是
webapps
的根目录D:\Java\Tomcat\apache-tomcat-7.0.85\webapps\Servlet_Content
context.getRealPath("index.html")
D:\Java\Tomcat\apache-tomcat-7.0.85\webapps\Servlet_Content\index.html
在会你写的名称前面自动拼接上当前工程的绝对地址
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String realPath = context.getRealPath("a.txt");
System.out.println(realPath);
//通过类加载器,获取字节码的路径, 先加载文件,再获取路径
//到字节码目录中加载资源,即服务器 Webapps/WEB-INF/classes 下
String path = OneServlet.class.getClassLoader().getResource("c.txt").getPath();
System.out.println(path);
}
ServletContext是一个域对象
- 什么是域?
能够存储数据 - 域对象
能够存取数据数据就的对象 - ServletContext域对象的作用范围
整个web应用
所有的web资源都可以进行存取数据
数据是可以共享的
获取完ServletContext之后向里面写数据
context.setAttribute(String name,Object value);
获取完ServletContext之后,通过name取出存放的数据
context.getAttribute(String name);
获取完ServletContext之后,删除指定名称的值
Context.removeAttribute(String name);
只要是一个域对象上,基本上里面都有这几个方法