Servlet上下文
Servlet上下文
Servlet上下文有叫做: ServletContext
, 一个WEB应用只有一个ServletContext
jsp中的application
对象实质上就是ServletContext
上下文的对象
上下文特点
-
当WEB服务器启动时,会为每一个WEB应用程序创建一块共享的存储区域。
-
ServletContext
也叫做“公共区域”,也就是同一个WEB应用程序中,所有的Servlet和JSP都可以共享同一个区域。 -
ServletContext
在WEB服务器启动时创建,服务器关闭时销毁。
获取上下文对象
再servlet类中:
ServletContext context = this.getServletContext(); // 获取上下文对象
// context.setAttribute(<String>, <Object>); // 往上下文中存数据
// context.removeAttribute(<String>); // 删除上下文中的某一个数据
存入的数据整个WEB应用的任何servlet都能获取到, 关闭web服务器的时候失效
代码示例
AServlet类 (Servlet类)
@WebServlet(name = "AServlet", value = "/a")
public class AServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上下文对象
ServletContext context = this.getServletContext();
String name = "jack";
// 存入一个数据
context.setAttribute("name", name);
}
}
BServlet类 (Servlet类)
@WebServlet(name = "BServlet", value = "/b")
public class BServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上下文对象
ServletContext context = this.getServletContext();
// 获取上下文中的数据
String name = (String) context.getAttribute("name");
response.getWriter().write(name);
}
}
浏览器先访问 /a
, 然后访问 /b
浏览器显示:
jack
上下文和Session的区别
-
作用范围不同
HttpSession
是针对每一个客户端浏览器单独有一个。ServletContext
是针对每一个WEB应用程序有一个 -
存活时间不同:
HttpSession
第一次访问服务器时创建,session超时后销毁(默认无响应30分钟后)ServletContext
服务器启动时创建,服务器停止时销毁。