什么是ServletContext
ServletContext代表是一个web应用的上下文对象(web应用对象),里面封装的都是web应用信息,一个ServletContext对应一个应用。
ServletContext的生命周期
在服务器一启动的时候就会创建,在服务器关闭的时候销毁。
如何获得上下文
- 通过init方法当中一个参数ServletConfig来获取
- 直接在HttpServlet当中获取:
this.getServletContext()
这种方法本质还是通过config来去获取的
获取全局的初始化参数
初始化参数不能再某一个Servlet当中来去配置。在最外层来去配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<context-param>
<param-name>name</param-name>
<param-value>youyuan</param-value>
</context-param>
</web-app>
获取全局初始化参数:
package org.youyuan.servlet;
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;
import java.io.IOException;
@WebServlet("/myservlet")
public class myServlet extends HttpServlet{
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("servlet");
ServletContext servletContext = this.getServletContext();
System.out.println(servletContext.getInitParameter("name"));
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
控制台打印出:
获得Web应用中某一个资源的资源的绝对路径,读取文件内容
第一种:
db.properties:
name = zs
age = 23
@WebServlet("/getPropertiesServlet")
public class getPropertiesServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
/*获取相对路径的输入流对象*/
InputStream resourceAsStream = servletContext.getResourceAsStream("/WEB-INF/classes/db.properties");
Properties properties = new Properties();
properties.load(resourceAsStream);
System.out.println("name="+properties.getProperty("name"));
System.out.println("age="+properties.getProperty("age"));
}
}
控制台打印结果:
第二种:
@WebServlet("/getPropertiesServlet2")
public class servlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
//获取文件绝对路径
String realPath = servletContext.getRealPath("/WEB-INF/classes/db.properties");
FileInputStream inputStream = new FileInputStream(realPath);
Properties properties = new Properties();
properties.load(inputStream);
System.out.println("name="+properties.getProperty("name"));
System.out.println("age="+properties.getProperty("age"));
}
}
控制台打印结果:
ServletContext是一个域对象
-
什么是域?能够存储数据。
-
域对象? 能够存取数据数据就的对象。
-
ServletContext域对象的作用范围?
1.整个web应用。
2.所有的web资源都可以进行存取数据
3.数据是可以共享的。 -
获取完ServletContext之后向里面写数据
context.setAttribute(String name,Object value); -
获取完ServletContext之后,通过name取出存放的数据
context.getAttribute(String name); -
获取完ServletContext之后,删除指定名称的值
Context.removeAttribute(String name); -
只要是一个域对象上,基本上里面都有这几个方法