application对象的说明:

前面学习了session对象,用户第一次访问Web服务目录时,Tomcat服务器创建和该用户相对应的session对象,当用户在所访问的Web服务目录的各个页面之间浏览时,这个session对象都是同一个,而且不同用户的session对象是互不相同的。

本次学习的application对象也是由Tomcat服务器负责创建,但与session对象不同的是,application对象被访问该Web服务目录的所有的用户共享,但不同Web服务目录下的application互不相同。

■由于application对象对所有的用户都是相同的,因此,在某些情况下,对该对象的操作需要实现同步(synchronized)处理。

application对象的常用方法:

public void setAttribute(String key, Object obj)
public Object getAttibue(String key)
public void removeAttribue(String key)
Enumeration getAttributeNames()取得所有application范围的属性名
String getRealPath(String path) 返回资源文件在服务器文件系统上的真实路径(文件的绝对路径)。path应该以“/”开始,“/”表示当前web应用的根目录。

application对象访问真实路径:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
	//application整个应用有效
	//String path = application.getRealPath("/");//访问的服务器的文件的路径
	String path = this.getServletContext().getRealPath("/");//上下两种结果一样,但一般用这个
%>

	<h3>真实路径: <%=path %></h3>

</body>
</html>

在这里插入图片描述

内置对象的作用域:
在这里插入图片描述

说明:
application对象作用域范围是整个应用有效,是怎么体现出来的呢?
下面进行演示:

c2_application_2.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="green">

第一个session——🆔页面

<%
	String id = session.getId();
	out.print("<br>你的session——🆔是:"+id);
	session.setAttribute("name", "apple"); 
	
	this.getServletContext().setAttribute("count", "one");
%>

<form action="c2_application_3.jsp" method="post">
		<input type="text" name="boy">
		<input type="submit" name="送出">
</form>

</body>
</html>

c2_application_3.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="pink">

第二个session——🆔页面

<%
	String id = session.getId();
	out.print("<br>你的session——🆔是:"+id);
	String name = (String)session.getAttribute("name");//接收
	
	String count = (String)this.getServletContext().getAttribute("count");
%>

<br>姓名:<%=name %><br>
计数:<%=count %><br>
单击超链接跳转到第三个session——🆔页面.
<a href="c2_application_4.jsp">跳转到第三个session页面</a> 

</body>
</html>

c2_application_4.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="yellowgreen">

第三个session——🆔页面

<%
	String id = session.getId();
	out.print("<br>你的session——🆔是:"+id);
	String name = (String)session.getAttribute("name");//接收
	
	String count = (String)this.getServletContext().getAttribute("count");
%>

<br>姓名:<%=name %><br>
计数:<%=count %><br>
单击超链接跳转到第一个session——🆔页面.
<a href="c2_application_2.jsp">跳转到第一个session页面</a>

<%
		//第三个session页面跳转到第一个页面的时候session——ID发生改变
		session.invalidate();//结束当前的session,开始新的session
%>

</body>
</html>

运行结果演示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

说明:
看到这里你可能会说,这也不能看出来application对象的整个应用有效啊
确实,这样是看不出来的,因为这是从第一个页面依次进行运行的,所以该有的都有
所以,那么不从第一个页面开始运行呢,结果又是什么样子的,让我带你一起研究:

直接运行第二个页面c2_application_3.jsp文件
在这里插入图片描述

对于直接运行第三个页面c2_application_4.jsp文件效果和上面也是一样的,所以可以说明application对象的作用域是整个应用

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐