文章目录:
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>