ServletContext是什么:
简单地说就是Servlet规范中的一个接口。如果有多个Servlet来自同一个网站,那么这些Servlet可以通过网站的ServletContext实例对象进行数据共享。
ServletContext相当于一个盒子,美羊羊(OneServlet)打开盒子,可以向里面存物品(setAttribute(String s,Object o)),喜羊羊(TwoServlet)打开盒子,向里面查看物品(getAttribute(String s)),清除物品(removeAttribute(String s))…喜羊羊美羊羊必须都是羊村的(同一个网站)
生命周期:
全局作用域对象(ServletContext)生命周期贯穿网站整个运行期间。
(Http服务器启动,全局作用域对象创建。Http服务器关闭,全局作用于对象销毁)
简单示例:
代码展示
OneServlet
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;
import java.io.PrintWriter;
public class OneServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//通过请求对象向服务器索要当前网站中的ServletContext对象
ServletContext application = request.getServletContext();
application.setAttribute("key",100);//存入100
PrintWriter out = response.getWriter();
out.println("add successfully");
}
}
TwoServlet
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;
import java.io.PrintWriter;
public class TwoServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext application = request.getServletContext();
Integer money = (Integer)application.getAttribute("key");
PrintWriter out = response.getWriter();
out.println(money);
}
}
web.xml
<?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.xy.controller.OneServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>TwoServlet</servlet-name>
<servlet-class>com.xy.controller.TwoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OneServlet</servlet-name>
<url-pattern>/one</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TwoServlet</servlet-name>
<url-pattern>/two</url-pattern>
</servlet-mapping>
</web-app>
结果
小结
这里ServletContext对象相当于Map——类似于键值对的方式
getServletContext()方法返回值类型是Object,上面举例中转化成Integer类型。
(不能用用Int类型,否则如果返回null就会出现空指针异常)