ServletContext对象

Servlet三大域对象的应用 request、session、application(ServletContext)

ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。

 

request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。

 

写网页访客数的时候,要求刷新的时候数字不会改变,就用到session了,application为所有用户共享,session单用户;application保存计数值,

当session新建时加1.

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>     
    <title>My JSP 'index.jsp' starting page</title>  
  </head>  
    
  <body>  
    <%!  
        synchronized void count() {  
            ServletContext application = getServletContext();  
            Integer num = (Integer)application.getAttribute("num");  
            if (null == num) {  
                num = new Integer(1);  
                application.setAttribute("num", num);  
            } else {  
                num = new Integer(1 + num);  
                application.setAttribute("num", num);  
            }  
        }  
     %>  
       
     <%  
         if (session.isNew()) { //为了避免用户的刷新的问题  
             count();  
         }  
         Integer tNum = (Integer)application.getAttribute("num");  
      %>  
       
     欢迎访问,您是第<%=tNum %>个访问的用户!  
  </body>  
</html>  

要把访客数用图片来显示,就把tNum拆分一下,代码如下(图片放在WebContent的visit文件夹内)

    <%
        Integer count = tNum;

        out.print("您是第");
        for (char ch : count.toString().toCharArray()) {
            out.println("<img src='visit/" + Character.getNumericValue(ch) + ".png' width='25px' height='25px'/>");
        }
        out.print("位访客");
    %>

 

上一篇:servletContext&Requset&Response


下一篇:session统计在线人数