JSP九大内置对象之application对象

我们已经知道,当一个客户一次访问服务器上的一个JSP页面时,JSP引擎创建一个和该客户相对应的session对象,当客户在所访问的网站的各个页面之间浏览时,这个session 对象都是同一个,直到客户关闭浏览器,这个session对象才被取消;而且不同客户的session对象是 互不相同的。与 session对象不同的是application对象。服务器启动后,就产生了这个application对象。

我们已经知道,当一个客户一次访问服务器上的一个JSP页面时,JSP引擎创建一个和该客户相对应的session对象,当客户在所访问的网站的各个页面之间浏览时,这个session 对象都是同一个,直到客户关闭浏览器,这个session对象才被取消;而且不同客户的session对象是 互不相同的。与 session对象不同的是application对象。服务器启动后,就产生了这个application对象。当一个客户访问服务器上的一个JSP页面时,JSP引擎为该客户分配这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭,这个application对象才被取消。与session对象不同的是,所有客户的application对象是相同的一个,即所有的客户共享这个内置的application对象。我们已经知道,JSP引擎为每个客户启动一个线程,也就是说,这些线程共享这个application对象。

application对象的常用方法

(1) public void setAttribute(String key ,Object obj)

application对象可以调用该方法将参数Object指定的对象obj添加到application对象中,并为添加的对象指定了一个索引关键字,如果添加的两个对象的 关键字相同,则先前添加对象被清除。

(2) public Object getAttibue(String key) 

获取application对象含有的关键 字是key的对象。由于任何对象都可以添加到application 对象中,因此用该方法取回对象时,应强制转化为原来的类型。

(3) public Enumeration getAttributeNames()

application对象调用该方法产生一个枚举对象,该枚举对象使用nextElemets()遍历application对象所含有的全部对象。

(4) public void removeAttribue(String key) 

从当前application对象中删除关键字是key的对象。

(5) public String getServletInfo() 

获取 Servlet 编译器 的当前版本的信息。由于application对象对所有的客户都是相同的,任何客户对该对象中存储的数据的改变都会影响到其他客户,因此,在某些情况下,对该对象的操作 需要实现同步处理。在下面的例子中,我们用application对象实现一个计数器,将计数存放在 application对象中,每个客户对该对象中“计数”的改变都会影响到其他客户。

注意:有些务器不直接支持使用application对象,必须用 ServletContext 类声明这个对象,再使用getServletContext()方法对这个application对象进行初始化。

实例:记录页面被访问次数(同一个浏览器算一次)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>JSP九大内置对象之 —— application对象</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<%!
synchronized void countPeople() {
    ServletContext application = getServletContext(); 
    Integer number = (Integer)application.getAttribute("Count"); 
    if(number == null) {
        number = new Integer(1); 
        application.setAttribute("Count", number); 
    } else {
        number = new Integer(number.intValue()+1); 
        application.setAttribute("Count", number); 
    }
}
%>
<%
if( session.isNew() ) {
    countPeople(); 
    Integer myNumber = (Integer)application.getAttribute("Count"); 
    session.setAttribute("MyCount", myNumber); 
}
%> 
<P><P>
您是第 
<%int a=((Integer)session.getAttribute("MyCount")).intValue(); %>
<%=a %>
个访问本站的客户。

</body>
</html>

运行效果:

application对象

application对象

业精于勤,荒于嬉。——韩愈《进学解》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号