application对象

1 什么是application对象 ?

(1) 当Web服务器启动时,Web服务器会自动创建一个application对象。application对象一旦创建,它将一直存在,直到Web服务器关闭。

一个Web服务器通常有多个Web服务目录 (网站),当Web服务器启动时,它自动为每个Web服务目录都创建一个application对象,这些application对象各自独立,而且和Web服务目录一一对应。

访问同一个网站的客户都共享一个application对象,因此,application对象可以实现多客户间的数据共享。

访问不同网站的客户,对应的application对象不同。

(2) application对象的生命周期:从Web服务器启动,直到Web服务器关闭。

注意:一个Web应用程序启动后,将会自动创建一个application对象,而且在整个应用程序的运行过程中只有一个application对象,也即所有访问该网站的客户都共享一个application对象。

(3) application对象的作用范围:application对象是一个应用程序级的对象,它作用于当前Web应用程序,也即作用于当前网站,所有访问当前网站的客户都共享一个application对象。

具体来说:不管哪个客户来访问网站A,也不管客户访问网站A下哪个页面文件,都可以对网站A的application对象进行操作,因为,所有访问网站A的客户都共用一个application对象。

因此,当在application对象中存储数据后,所有访问网站A的客户都能够对其进行访问,实现了多客户之间的数据共享。

(4) application对象的基类是:javax.servlet.ServletContext类。

注意:有些Web服务器不直接支持使用application对象,必须用ServletContext类来声明application对象,再调用getServletContext()方法来获取当前页面的application对象。

(5) ServletContext类:用于表示应用程序的上下文。

一个ServletContext类的对象表示一个Web应用程序的上下文。

具体来说:在Web服务器中,提供了一个Web应用程序的运行时环境,专门负责Web应用程序的部署、编译、运行以及生命周期的管理,通过ServletContext类,可以获取Web应用程序的运行时环境信息。

常识:JSP引擎、Servlet引擎、JSP容器和Servlet容器,都是指Web服务器,Web服务器用于管理所有Web应用程序。

(6) application对象的常用方法,如下所示:

方法名 描述
String getAttribute(String name) 根据属性名称获取属性值。
Enumeration getAttributeNames() 获取所有的属性名称。
void setAttribute(String name, Object object) 设置属性,指定属性名称和属性值。
void removeAttribute(String name) 根据属性名称删除对应的属性。
 ServletContext getContext(String uripath) 获取指定URL的ServletContext对象。
String getContextPath() 获取当前Web应用程序的根目录。
String getInitParameter(String name) 根据初始化参数名称,获取初始化参数值。
int getMajorVersion() 获取Servlet API的主版本号。
int getMinorVersion() 获取Servlet API的次版本号。
String getMimeType(String file) 获取指定文件的MIME 类型。
String getServletInfo() 获取当前Web服务器的版本信息。
String getServletContextName() 获取当前Web应用程序的名称。
void log(String message) 将信息写入日志文件中。

2 使用application对象存储数据

(1) 设置application对象的属性和获取application对象的属性

测试代码

TestApplication.jsp

<%@ page language=”java” contentType=”text/html; charset=GBK”%>

<% request.setCharacterEncoding(“GBK”);%>

<html>

<body>

<form name=”form1″ action=”" method=”post”>

用户名:

<input type=”text” name=”username” value=”">

<br>

密 码:

<input type=”password” name=”pwd” value=”">

<br>

<input type=”submit” name=”btSubmit” value=”提交”>

</form>

<%

application.setAttribute(“username”, request.getParameter(“username”));

application.setAttribute(“pwd”, request.getParameter(“pwd”));

%>

</body>

</html>

测试代码

TestCommon.jsp

在TestCommon.jsp 页面中,通过application对象获取属性,注意TestApplication.jsp和TestCommon.jsp这两个页面之间没有任何关联,只要通过application对象设置了属性,那么就可以在任何页面,通过application对象获取属性或者删除属性。

<%@ page language=”java” contentType=”text/html; charset=GBK”%>

<% request.setCharacterEncoding(“GBK”); %>

<html>

<body>

用户名:<%=application.getAttribute(“username”) %><br>

密 码:<%=application.getAttribute(“pwd”) %><br>

</body>

</html>

(2) 删除application对象的属性

测试代码

TestCommon.jsp

在TestCommon.jsp 页面中,删除application对象的属性。

<%@ page language=”java” contentType=”text/html; charset=GBK”%>

<% request.setCharacterEncoding(“GBK”); %>

<html>

<body>

<%–删除属性–%>

<%

application.removeAttribute(“username”);

application.removeAttribute(“pwd”);

%>

用户名:<%=application.getAttribute(“username”)%><br>

密 码:<%=application.getAttribute(“pwd”)%><br>

</body>

</html>

3 使用application对象实现网站计数器

测试代码:

TestApplication01.jsp

<%@ page language=”java” contentType=”text/html; charset=GBK”%>

<%@ page import=”java.util.*”%>

<% request.setCharacterEncoding(“GBK”);%>

<html>

<body>

<%!

ServletContext application;

synchronized void countPeople() {

application = getServletContext();

Integer number =(Integer)application.getAttribute(“number”);

if (number == null) {

number = new Integer(1);

application.setAttribute(“number”, number);

} else {

number = new Integer(number.intValue() + 1);

application.setAttribute(“number”, number);

}

}

%>

<%

if (session.isNew()) {

countPeople();

}

int personCount = ((Integer)application.getAttribute(“number”)).intValue();

%>

<p>欢迎访问本网站,您是第 <%= personCount %> 个访问用户!

</body>

</html>

4 使用application对象获取初始化参数

(1) 一 般来说,在web.xml文件中,设置初始化参数有如下两种方式:

n 设置系统范围内的初始化参数

n 针对单个Servlet文件或JSP文件设置初始化参数

对于系统范围内的初始化参数,可通过ServletContext 接口的getInitParameter(String name)方法,根据指定的参数名,获取对应的参数值。

对于针对单个Servlet文件或JSP文件设置初始化参数,可通过ServletConfig接口的 getInitParameter(String name)方法,根据指定的参数名,获取对应的参数值。
(2) 如何设置系统范围内的初始化参数

在web.xml文件中,可利用context-param元素来设置系统范围内的初始化参数。context-param元素应该包含param-name、param-value以及可选的description子元素,如下所示:
<context-param>
<param-name>support-email</param-name>
<param-value>blackhole@mycompany.com</param-value>
</context-param>

web.xml文件的示例:

<?xml version=”1.0″ encoding=”UTF-8″?>

<web-app version=”2.4″

xmlns=”http://java.sun.com/xml/ns/j2ee”

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”>

<context-param>

<param-name>appName</param-name>

<param-value>MyWebTest</param-value>

</context-param>

<context-param>

<param-name>appVersion</param-name>

<param-value>Version 1.0</param-value>

</context-param>

<welcome-file-list>

<welcome-file>MyTest01.jsp</welcome-file>

</welcome-file-list>

</web-app>

测试代码

TestApplication02.jsp

<%@ page language=”java” contentType=”text/html; charset=GBK” %>

<% request.setCharacterEncoding(“GBK”); %>

<html>

<body>

<%–使用application对象获取系统范围内的初始化参数–%>

<font color=”Red”>使用application对象获取初始化参数:</font>

<br>

<%

String appName = getServletContext().getInitParameter(“appName”);

String appVersion = getServletContext().getInitParameter(“appVersion”);

%>

应用程序的名称:<%=appName%><br>

应用程序的版本:<%=appVersion%>

</body>

</html>

修改web.xml文件,添加蓝色字体部分:

<?xml version=”1.0″ encoding=”UTF-8″?>

<web-app version=”2.4″

xmlns=”http://java.sun.com/xml/ns/j2ee”

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”>

<context-param>

<param-name>appName</param-name>

<param-value>MyWebTest</param-value>

</context-param>

<context-param>

<param-name>appVersion</param-name>

<param-value>Version 1.0</param-value>

</context-param>

<welcome-file-list>

<welcome-file>MyTest01.jsp</welcome-file>

</welcome-file-list>

</web-app>

5 使用application对象获取Web应用程序的环境信息

测试代码:

TestApplication03.jsp

<%@ page language=”java” contentType=”text/html; charset=GBK”

pageEncoding=”GBK”%>

<% request.setCharacterEncoding(“GBK”); %>

<html>

<body>

<h2>使用application对象获取Web应用程序的环境信息</h2>

<p>

<font color=”Red”>获取当前Web服务器的版本信息:</font><%= application.getServerInfo() %><br>

<font color=”Red”>获取Servlet API的主版本号:</font><%= application.getMajorVersion() %><br>

<font color=”Red”>获取Servlet API的次版本号:</font><%= application.getMinorVersion() %>

<p>

<font color=”Red”>获得指定URL的ServletContext对象:</font>

<%

ServletContext sc = application.getContext(“/ch3/TestApplication01.jsp”);

out.println(sc.getServerInfo());

%>

<p>

<%–需要在web.xml设置 display-name 元素–%>

<font color=”Red”>获取当前Web应用程序的名称:</font><%= application.getServletContextName() %>

<p>

<font color=”Red”>获取当前Web应用程序的上下文路径:</font><%= application.getContextPath() %>

</body>

</html>

测试结果:

6  session对象和application对象的比较

(1) 两者的作用范围不同:

session对象是用户级的对象,而application对象是应用程序级的对象。

一个用户一个session对象,每个用户的session对象不同,在用户所访问网站的多个页面之间共享同一个session对象。

一个Web应用程序一个application对象,每个Web应用程序的application对象不同,但一个Web应用程序的多个用户之间共享同一个application对象。

在同一个网站下:

n 每个用户的session对象不同

n 所用用户的application对象相同

在不同网站下:

n 每个用户的session对象不同

n 每个用户的application对象不同

(2) 两者的生命周期不同:

session对象的生命周期:用户首次访问网站创建,用户离开该网站 (不一定要关闭浏览器) 消亡。

application对象的生命周期:启动Web服务器创建,关闭Web服务器销毁。

Java基础回顾Application(二)的更多相关文章

  1. Java基础回顾Application(一)

    Java Web 中application(应用级) session(会话级) request(请求级) 在JavaWeb 中实现数据共享往往通过定义属性的方法来实现,而什么是属性呢?它类似于Hash ...

  2. 四、Android学习第四天——JAVA基础回顾(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的 ...

  3. Javascript基础回顾 之(二) 作用域

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  4. java基础语法(二)--单列模式

    java基础语法(二)--单列模式 /** * 功能:单列模式 * @author Administrator * */ public class SingletonTest { public sta ...

  5. 【Spring学习】【Java基础回顾-数据类型】

    Java基础回顾过程中,之前对于Java相关基础知识都是从这个人的博客看一些,那边的内容看一下,觉得不够系统化,决定用xmind脑图的形式,将Java基础知识回顾的作为一个系列,当前正在做的会包含: ...

  6. java基础解析系列(二)---Integer

    java基础解析系列(二)---Integer 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bug的时候,才能处理更加从容. 目录 java基础解析 ...

  7. Java基础拾遗(二)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76358523冷血之心的博客) 马上就要秋招了,新的一轮笔试面试马上 ...

  8. java基础知识点补充---二维数组

    #java基础知识点补充---二维数组 首先定义一个二维数组 int[][] ns={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; 实现遍 ...

  9. Java基础回顾_第二部分_Java流程控制

    Java基础回顾_第二部分 Java流程控制 Scanner对象(扫描器,捕获输入) import java.util.Scanner; public class Demo01 { public st ...

随机推荐

  1. EF6 学习笔记(三):排序、过滤查询及分页

    EF6 学习笔记索引目录页: ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇:EF6 学习笔记(二):操练 CRUD 增删改查 本篇原文地址:Sorting, Filterin ...

  2. 分享Pos函数(比FastPos还要快)

    ): Integer; ): Integer; 主要用途是搜索字符串中第n个Substr. 经过测试,这2个函数的速度比直接用Pos+Copy快好几倍(如果字符串够长,可能10几倍) 比Pos+Del ...

  3. three.js 一幅图片多个精灵

    https://blog.csdn.net/zhulx_sz/article/details/79105359 核心代码 // 把一幅外部图片中包含的5种精灵存入一个精灵材质数组 var sprite ...

  4. typescript handbook 学习笔记4

    概述 这是我学习typescript的笔记.写这个笔记的原因主要有2个,一个是熟悉相关的写法:另一个是理清其中一些晦涩的东西.供以后开发时参考,相信对其他人也有用. 学习typescript建议直接看 ...

  5. ElasticSearch权威指南学习(分布式文档存储)

    路由文档到分片 当你索引一个文档,它被存储在单独一个主分片上.Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢? 进程不能是 ...

  6. Shell - Shell脚本调试方法

    Shell脚本调试选项 Shell本身提供一些调试方法选项: -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误. -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出. -x,提供跟踪执 ...

  7. Java language

    1.Java开发环境: java编译运行过程: 1. 编译期:.java源文件,经过编译,生成.class字节码文件 2. 运行期:JVM加载.class并运行.class - 特点:跨平台.一次编程 ...

  8. Spring Boot 2.0正式发布,新特性解读

    作者|翟永超 Spring Boot 2.0 来啦,有哪些新特性?升级吗? 写在前面 北京时间 3 月 1 日,经过漫长的等待之后,Spring Boot 2.0 正式发布.作为 Spring 生态中 ...

  9. 使用 Notification API 开启浏览器桌面提醒

    Notifications API 允许网页控制向最终用户显示系统通知 —这些都在顶级浏览上下文视口之外,因此即使用户已经切换标签页或移动到不同的应用程序,也可以显示.该API被设计成与不同平台上的现 ...

  10. 从零开始学 Web 之 Ajax(二)PHP基础语法

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...