文章目录:
1.介绍
- ServletContext接口来自于Servlet规范。
- ServletContext接口实现类由Http服务器厂商提供。
- ServletContext接口修饰对象被称为全局作用域对象。
- 来自于同一个网站下Servlet都可以使用全局作用域对象进行数据共享。
2.生命周期
- 在tomcat启动时,自动为当前网站创建一个全局作用域对象。
- 在tomcat运行时,一个网站中有且只能有一个全局作用域对象。
- 在tomcat关闭时,自动销毁网站中全局作用域对象。
3.存在的问题
- 如果不进行限制,无限向全局作用域对象添加数据。导致服务端计算机内存消耗殆尽。
- 容易导致数据污染。
4.应用举例
两个Servlet之间通过 ServletContext 接口实现数据共享。(OneServlet、TwoServlet)
4.1 代码部分
package com.songzihao.controller; 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 OneServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.通过请求对象向Tomcat索要当前网站中全局作用域对象 ServletContext application=request.getServletContext(); //2.将数据添加到全局作用域对象中作为共享数据 application.setAttribute("key1",100); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
package com.songzihao.controller; 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 TwoServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.通过请求对象向Tomcat索要当前网站中全局作用域对象 ServletContext application=request.getServletContext(); //2.从全局作用域对象读取数据 Integer data= (Integer) application.getAttribute("key1"); System.out.println("TwoServlet得到的共享数据:" + data); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
<?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"> <servlet> <servlet-name>OneServlet</servlet-name> <servlet-class>com.songzihao.controller.OneServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>OneServlet</servlet-name> <url-pattern>/one</url-pattern> </servlet-mapping> <servlet> <servlet-name>TwoServlet</servlet-name> <servlet-class>com.songzihao.controller.TwoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TwoServlet</servlet-name> <url-pattern>/two</url-pattern> </servlet-mapping> </web-app>
4.2 运行结果部分
5.实现原理图