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("位访客"); %>