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 ...
随机推荐
- PHP 文件处理----fopen(),fclose(),feof(),fgets(),fgetc()
fopen() 函数用于在 PHP 中打开文件. 打开文件 fopen() 函数用于在 PHP 中打开文件. 此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件: < ...
- Python json和pickle模块
用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps. ...
- 普通java程序,maven打包
pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...
- [转]kaldi特征和模型空间转换
转:http://blog.csdn.net/shmilyforyq/article/details/76807431 博主话:这篇博客是对kaldi官网中Feature and model-spac ...
- Zhu-Takaoka Two-dimensional Pattern Matching
Two dimensional pattern matching. Details may be added later.... Corresponding more work can be foun ...
- 【接口时序】1、软件与Verilog基本格式规范说明
一. 说明 以前总是没有记录的习惯,导致遇到问题时总得重新回忆与摸索,大大降低了学习效率,从今天开始决定改掉这个坏毛病,认真记录自己的Verilog学习之路,希望自己能一直坚持下去. 二. 软件资源与 ...
- 谈谈我们对userAgent的看法,为什么爬虫中需要userAgent?
首先打开浏览器,按 F12 进入控制台(Console),然后输入:navigator.userAgent,即可看到 UA.例如: 1 2 Mozilla/5.0 (Windows NT 10.0; ...
- LeetCode:105_Construct Binary Tree from Preorder and Inorder Traversal | 根据前序和中序遍历构建二叉树 | Medium
要求:通过二叉树的前序和中序遍历序列构建一颗二叉树 代码如下: struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode ...
- JavaScript的Date类的函数特殊处理导致的问题
记得以前参加校招的时候,总是有日期相关的面试题,比如计算两个日期之间的间隔天数.以前还觉得这种题就是为了纯粹为了面试的,但工作了之后,还就碰到了跟日期相关的bug.下面是一段js代码,是要把字符串描述 ...
- Xamarin.Android 调用手机拍照功能
最近开发Android遇到了调用本地拍照功能,于是在网上搜了一些方法,加上自己理解的注释,在这儿记录下来省的下次用时候找不到,同事也给正在寻找调用本地拍照功能的小伙伴一些帮助~ 实现思路:首先加载-- ...