开门见山的说
逸夫楼今天废了?屋漏偏逢连夜雨,道是无情却有情。凎!
ServletContext 对象一个很神奇的东西,一个 Web 应用只会有一个。
我们可以把 ServletContext 对象理解为容器内一个共享空间,可以存储具有应用级别作用域的数据。而 Web 应用中的各个组件都可以共享这些数据。举个栗子,炮姐和她的妹妹们。
这些共享数据以 key/value 的形式存储在 ServletContext 对象中,并以 key/value 的形式存储在 ServletContext 对象中,并以 key 作为属性名被访问。
ServletContext 接口存取应用域属性的方法
· setAttribute(String name, Object object) 把一个对象和属性名绑定,存放至 ServletContext 中,参数 name 指定属性名,参数 object 表示共享数据
· getAttribute(String name) 根据参数给定的属性名,返回一个 Object 类型的对象
· getAttributeNames() 返回一个 Enumeration 对象,该对象包含了所有存放在 ServletContext 中的属性名
· removeAttribute(String name) 根据参数指定的属性名,从 ServletContext 对象中删除匹配的属性
啥是作用域?
呸,应用域。
应用域两层含意:
· 一是表示由 Web 应用的生命周期构成的时间段
· 二是表示在 Web 应用范围内的可访问性
来,我们做个东西,网站访问计数
【代码】ContextAttributeServlet.java
【运行结果】
很有用的小东西。
对于存储在 ServletContext 对象中的属性 count,不同的 Servlet 都可以通过 ServletContext 对象进行修改,并且一方的修改会影响另一方获取的数据。
所以!注意!多线程访问的情况下,注意数据的同步问题!
好了,最后是代码
【ContextAttributeServlet.java】
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*/
@WebServlet("/ContextAttributeServelt")
public class ContextAttributeServelt extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ContextAttributeServelt() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应到客户端的文本类型
response.setContentType("text/html;charset=UTF-8");
// 获取 ServletContext 对象
ServletContext context = super.getServletContext();
// 从 ServletContext 对象获取 count 属性存放的计数值
Integer count = (Integer)context.getAttribute("count");
if (count == null) {
count = 1;
} else {
count = count + 1;
}
// 将更新后的数值存储到 ServletContext 对象的 count 属性中
context.setAttribute("count", count);
// 获取输出流
PrintWriter out = response.getWriter();
// 输出计数信息
out.println("本网站目前访问人数是: " + count + "
");
}
}