1.application对象简介
- application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。
- 这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。
- 通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。
- 在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作。
2.作用域对比
所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的范围内有效。JSP中九个内置对象及其相应所属作用域如下表:
编号 |
对象 |
所属作用域 |
作用域描述 |
对象作用 |
1 |
request |
request |
在当前请求中有效 |
用于接收通过HTTP协议传送到服务器的数据(包括头信息、系统信息、请求方式以及请求参数等)。 |
2 |
response |
page |
在当前页面有效 |
表示服务器端对客户端的回应。主要用于设置头信息、跳转、Cookie等 |
3 |
out |
page |
在当前页面有效 |
用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区 |
4 |
session |
session |
在当前会话中有效 |
用于存储特定的用户会话所需的信息,默认30分钟后失效 |
5 |
application |
application |
在所有应用程序中有效 |
用于存储和访问来自任何页面的变量 所有的用户分享一个Application对象,服务器启动发送第一个请求时就产生了Application 对象,直到服务器关闭。 |
6 |
config |
page |
在当前页面有效 |
取得服务器的配置信息 |
7 |
pageContext |
page |
在当前页面有效 |
用于存取其他隐含对象,如request、reponse、session、application等对象。(实际上,pageContext 对象提供了对ISP页面所有的对象及命名空间的访问。 |
8 |
page |
page |
在当前页面有效 |
page对象代表JSP本身(对应this),只有在JSP页面内才是合法的 |
9 |
Exception |
page |
在当前页面有效 |
显示异常信息,必须在page指令中设定<%@page isErrorPage="true“%>才能使用,在一般的JSP页面中使用该对象将无法编译JSP文件 |
域对象范围由小到大排列:
page域(pageContext)< request域 < session域 < application域
3.application对象存储数据的方法(代码来源:https://www.iteye.com/blog/qq-24665727-2279609)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>数据共享</title> </head> <body> <% //存储 pageContext.setAttribute("pageContext", 1); request.setAttribute("request", 1); session.setAttribute("session", 1); application.setAttribute("application", 1); //本页获取 Object obj=pageContext.getAttribute("pageContext"); Object obj1=request.getAttribute("request"); Object obj2=session.getAttribute("session"); Object obj3=application.getAttribute("application"); %> pageContext:<%=obj%><br> request:<%=obj1%><br> session:<%=obj2%><br> application:<%=obj3%><br> </body> </html>
页面输出:
pageContext:1
request:1
session:1
application:1
4.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) | 将信息写入日志文件中。 |
5.示例
简单例子1——计数器
count.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>网站计数器</title> </head> <body> <% int count=1; if(application.getAttribute("count")==null) { application.setAttribute("count", 1); } else { count = ((Integer)application.getAttribute("count")).intValue(); if(session.isNew()) { application.setAttribute("count", ++count); } } %> 当前是第:<%=application.getAttribute("count") %>个用户<br> </body> </html>
简单例子2——使用application对象获取Web应用程序的环境信息
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>获取web应用程序配置信息</title>
</head>
<body>
<table>
<tr>
<%-- 获取当前Web服务器的版本信息--%>
<td>getServerInfo</td>
<td><%=application.getServerInfo()%></td>
</tr>
<tr>
<%-- 获取某一资源的路径--%>
<td>getResource</td>
<td><%=application.getResource("/Count.jsp")%></td>
</tr>
<tr>
<%-- 获取根目录的路径--%>
<td>getRealPath</td>
<td><%=application.getRealPath("/")%></td>
</tr>
<tr>
<%-- 获取当前Web应用程序的名称--%>
<td>getServletContextName</td>
<td><%=application.getServletContextName()%></td>
</tr>
</table>
</body>
</html>
简单例子3——使用application对象获取初始化参数(代码来源:https://blog.csdn.net/fjseryi/article/details/12851447?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task)
(1)一 般来说,在web.xml文件中,设置初始化参数有如下两种方式:
- 设置系统范围内的初始化参数
- 针对单个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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> <display-name>DynamicTest</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <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> </web-app>
TestApplication02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>使用application对象获取初始化参数</title> </head> <body> <!-- 使用application对象获取系统范围内的初始化参数 --> <font color=”Red”>使用application对象获取初始化参数:</font> <br> <% String appName = getServletContext().getInitParameter("appName"); String appVersion = getServletContext().getInitParameter("appVersion"); %> 应用程序的名称:<%=appName%><br> 应用程序的版本:<%=appVersion%> </body> </html>
运行结果:
6. session对象和application对象的比较
(1) 两者的作用范围不同:
session对象是用户级的对象,而application对象是应用程序级的对象。
一个用户一个session对象,每个用户的session对象不同,在用户所访问网站的多个页面之间共享同一个session对象。
一个Web应用程序一个application对象,每个Web应用程序的application对象不同,但一个Web应用程序的多个用户之间共享同一个application对象。
在同一个网站下:
- 每个用户的session对象不同
- 所用用户的application对象相同
在不同网站下:
- 每个用户的session对象不同
- 每个用户的application对象不同
(2) 两者的生命周期不同:
- session对象的生命周期:用户首次访问网站创建,用户离开该网站 (不一定要关闭浏览器) 消亡。
- application对象的生命周期:启动Web服务器创建,关闭Web服务器销毁。
参考文章:
https://www.runoob.com/jsp/jsp-implicit-objects.html
https://www.cnblogs.com/raozihao/p/7711582.html
https://blog.csdn.net/w252064/article/details/78963057
https://www.iteye.com/blog/qq-24665727-2279609
https://blog.csdn.net/CCCrunner/article/details/81052373
https://blog.csdn.net/fjseryi/article/details/12851447?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task