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服务器销毁。
转载于:https://www.cnblogs.com/Snail-1174158844/p/9633794.html
Java基础回顾Application(二)相关推荐
- 四、Android学习第四天——JAVA基础回顾(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天--JAVA基础回顾 这才学习Android的 ...
- Java基础篇(二)
Java基础篇(二) 1.编写第一个应用程序 第一个应用程序 创建以Java结尾的源文件:如First,java 编写第一个程序 (public) class World { public stati ...
- Javascript基础回顾 之(二) 作用域
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- java基础语法(二)--单列模式
java基础语法(二)--单列模式 /*** 功能:单列模式* @author Administrator**/ public class SingletonTest {public static v ...
- Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)
文章目录 Java基础知识(二) 1.Object类的常用方法 1.1 toString方法 1.2 equals方法 1.3 Objects类 2.日期时间类 2.1 Date类 2.2 DateF ...
- Java基础语法(二)——数据类型
文章目录 Java基础语法(二)--数据类型 一.int 整型类型 1.基本语法格式 2.数值范围 3.未定义时变量的默认初始值 4.注意事项 二. long 长整型类型 1.基本语法格式 2.数值范 ...
- Java基础学习笔记(二)_Java核心技术(进阶)
本篇文章的学习资源来自Java学习视频教程:Java核心技术(进阶)_华东师范大学_中国大学MOOC(慕课) 本篇文章的学习笔记即是对Java核心技术课程的总结,也是对自己学习的总结 文章目录 Jav ...
- JAVA基础整理(二):数组
记录JAVA基础,主要是数组部分的知识点. 该系列文章仅供自己复习使用,记录学习过程中遇到的值得注意的问题,并非记录全部知识点细节. 文章目录 前言 一.什么是数组 1.数组的部分注意事项 2.数组的 ...
- Java基础巩固(二)异常,多线程,线程池,IO流,Properties集合,IO工具类,字符流,对象流,Stream,Lambda表达式
一.异常,多线程 学习目标 : 异常的概述 异常的分类 异常的处理方式 自定义异常 多线程入门 1 异常的概述 1.1 什么是异常? 异常就是程序出现了不正常情况 , 程序在执行过程中 , 数据导致程 ...
最新文章
- python主程序流程图_python中的图形渲染(流程图可视化)
- [SQL] 查找数据库中含有某字段的所有表
- Excel中文字换行
- 二叉树的创建和遍历-C语言实现
- chrome控制台如何把vw显示成px_你可能不知道的chrome调试技巧
- golang 数组组合成最小的整数_golang数组-----寻找数组中缺失的整数方法
- Linux Zero-copy零拷贝技术:源码示例
- java输出5行星型三角_JAVA图形小动画之简单行星运动
- java项目打成war包,使用ide打包部署在tomcat中
- 光猫gpon和epon的区别
- MySQL__数据处理之查询
- 流固耦合仿真案例及教学
- PPT制作设计感需从哪些角度提升呢?
- 人脸检测-人脸对齐-人脸识别原理及方法
- 拼多多商家如何采集整店商品上传?
- WebSocket 双端实践(iOS/ Golang)
- 行业如此内卷,品牌如何实现可持续招商增长?
- eNSP:实现不同网段不同vlan主机之间的互访(配置单臂路由)
- Java中类、抽象类、接口的联系与区别
- 关于引用elasticsearch-rest-high-level-client版本冲突问题