Application概念
1、用于保存整个WebApplication的生命周期内都可以访问的数据
2、在J2EE的API表现为ServletContext
3、通过HttpServlet的getServletContext方法可以拿到
4、通过ServletContext的get/setAttribute方法取得/设置相关属性
与Session的不同之处:
1、Session相当于在服务器开辟一小块内存对应于一个浏览器,开启一个新的窗口(非本窗口的子窗口),那小块内存消失,又开辟新的一小块内存,从而创建一个新的Session---类似在内存的堆区创建的内存
2、Application相当于在服务器开辟的内存是对应于所有的浏览器,所有的浏览器都能访问Application的数据(非常典型的应用:一个网站计量网站的总访问量),这一开辟的小块内存类似在内存的静态区建立的,所有的浏览器都可以读取。
代码举例:
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class TestServletContext extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- ServletContext application = this.getServletContext();
- PrintWriter pw = response.getWriter();
- response.setContentType("text/html;charset=gb2312");
- Integer accessCount = (Integer) application.getAttribute("accessCount");
- if (accessCount == null)
- //开始访问为0
- accessCount = new Integer(0);
- else
- //每访问一次次数自动加1
- accessCount = new Integer(accessCount.intValue() + 1);
- application.setAttribute("accessCount", accessCount);
- pw.println("<html><head><title>Application</title></head>"
- + "<body align = center>" + accessCount + "</body></html>");
- }
- @Override
- protected void doPost(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- doGet(request, response);
- }
- }