1.ServletContext是啥
ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放
架构图示:
我们可以把ServletContext当成一个公用的空间,可以被所有的客户访问,WEB容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext,它代表当前Web应用,并且它被所有客户端共享,公共聊天室就会用到它
同时,多个Servlet也可以通过ServletContext来进行通信操作
当web应用关闭、Tomcat关闭或者Web应用reload的时候,ServletContext对象会被销毁🙌
2.最简单的DEMO
首先我们编写一个Servlet用于向公共空间设置键值对信息:
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = this.getServletContext(); String say = "Hello!"; servletContext.setAttribute("say", say); } }
再编写一个Servlet用于读取公共空间中的信息:
import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; public class GetSomething extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext servletContext = this.getServletContext(); String say = (String) servletContext.getAttribute("say"); response.getWriter().println(say); } }
这样就通过ServletContext实现了一个最基本的Servlet通信了!
3.ServletContext 应用实例之获取初始化参数
假设我们的web.xml中存在下面的参数内容:
<context-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/mybatis</param-value> </context-param>
可以通过Servlet - getInitParameter获取初始化配置信息:
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext servletContext = this.getServletContext(); String url = servletContext.getInitParameter("url"); response.getWriter().println(url); }