Java基础回顾Application(二)
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(二)的更多相关文章
- Java基础回顾Application(一)
Java Web 中application(应用级) session(会话级) request(请求级) 在JavaWeb 中实现数据共享往往通过定义属性的方法来实现,而什么是属性呢?它类似于Hash ...
- 四、Android学习第四天——JAVA基础回顾(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的 ...
- Javascript基础回顾 之(二) 作用域
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- java基础语法(二)--单列模式
java基础语法(二)--单列模式 /** * 功能:单列模式 * @author Administrator * */ public class SingletonTest { public sta ...
- 【Spring学习】【Java基础回顾-数据类型】
Java基础回顾过程中,之前对于Java相关基础知识都是从这个人的博客看一些,那边的内容看一下,觉得不够系统化,决定用xmind脑图的形式,将Java基础知识回顾的作为一个系列,当前正在做的会包含: ...
- java基础解析系列(二)---Integer
java基础解析系列(二)---Integer 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bug的时候,才能处理更加从容. 目录 java基础解析 ...
- Java基础拾遗(二)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76358523冷血之心的博客) 马上就要秋招了,新的一轮笔试面试马上 ...
- java基础知识点补充---二维数组
#java基础知识点补充---二维数组 首先定义一个二维数组 int[][] ns={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; 实现遍 ...
- Java基础回顾_第二部分_Java流程控制
Java基础回顾_第二部分 Java流程控制 Scanner对象(扫描器,捕获输入) import java.util.Scanner; public class Demo01 { public st ...
随机推荐
- mybatis中使用常量
mybatis的mapper文件中项要使用常量的话${@类的全称路劲@常量名称}
- 常用string格式化
1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...
- Flask中的模板语言jinja2
jinja2介绍 jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用. jinja2的优点 jin ...
- Javascript高级编程学习笔记(4)—— JS中的数据类型(2)
接着昨天的文章,今天这篇文章主要讲述JS中剩余的两种数据类型String,和Object String类型 对于该类型,书中给出的解释为:由0或多个16为Unicode字符组成的字符序列. 对于JS中 ...
- Python环境搭建详解(Window平台)
前言 Python,是一种面向对象的解释型计算机程序设计语言,是纯粹的自由软件,Python语法简洁清晰,特色是强制用空白符作为语句缩进,具有丰富和强大的库,它常被称为胶水语言. Python是一种解 ...
- 通过shell快速配置J2EE运行环境
虽然可以通过已经配置好的docker镜像来快速运行相关环境, 但是 现实往往就是这么残酷+有钱很任性的时候 就是给出了一个装好系统的电脑让配置环境,每次的配置环境变量真的很烦 纯体力活 就简单的写个脚 ...
- python多线程获取子线程任务返回值
今天想实现多线程更新资产信息,所以使用到了threading,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装 def auto_asset(node): re ...
- python数据结构-数组/列表/栈/队列及实现
首先 我们要分清楚一些概念和他们之间的关系 数组(array) 表(list) 链表(linked list) 数组链表(array list) 队列(queue) 栈(stack) li ...
- 剑指offer【01】- 二维数组中的查找(Java)
在经历了春招各大公司的笔试题和面试官的血虐之后,决定要刷一些算法题了,不然连面试机会都没有. 而应对笔试和面试,比较出名的就是剑指offer的题目和LeetCode的题目了.剑指offer应对面试中的 ...
- pycharm 安装第三方库报错:AttributeError: 'module' object has no attribute 'main'
pip升级到 10.0.1 之后 老版的pycharm 使用pip安装第三方库的时候会报错,报错如上图所示: 其主要原因是 新版的 pip 更改了 部分api 将其中 pip.main() 改为 pi ...