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 ...
随机推荐
- 1.html基础标签:文本+链接+图片
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Avoiding Common Networking Mistakes
https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/Networkin ...
- Android Studio在项目中添加assets资源目录
第一步: 切换到"Project"视图,找到app --> src --> main目录 第二步: 右键点击main目录,New --> Directory -- ...
- 初涉Java方法
初涉Java方法 方法就是一段可重复调用的代码段,方法命名规范,第一个单词小写,从第二个单词开始首字母均大写. 格式: public static 返回值类型 ...
- 脚手架vue-cli系列二:vue-cli的工程模板与构建工具
上篇文章我们提到了vue-cli的工程模板.这里我们来详细的进行介绍. vue-cli提供的脚手架只是一个最基础的,也可以说是Vue团队认为的工程结构的一种最佳实践.对于初学者或者以前曾从事Angul ...
- 用Eclipse导入Maven工程
步骤一 : 选择 “Import”操作 有两个途径可以选择 “Import”操作; 1>“File”--> "Import..." 2> 在 "Pro ...
- FF笔试题整理
一.选择题 1.怎样能唯一确定一颗二叉树? [解析] 只要知道中序遍历顺序,再加上其余两个遍历中任意一个都可以唯一确定一个二叉树.如果不知道中序遍历顺序,则无法确定. [反例] A-B-C,A是跟,B ...
- Hadoop2源码分析-HDFS核心模块分析
1.概述 这篇博客接着<Hadoop2源码分析-RPC机制初识>来讲述,前面我们对MapReduce.序列化.RPC进行了分析和探索,对Hadoop V2的这些模块都有了大致的了解,通过对 ...
- leetcode — reverse-integer
/** * Source : https://oj.leetcode.com/problems/reverse-integer/ * * Created by lverpeng on 2017/7/4 ...
- 如何设计和实现高可用的MySQL
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB发表于云+社区专栏 王甲坤,腾讯高级工程师.腾讯云关系型数据库MySQL负责人,拥有多年客户端.数据库 ...