JSP application对象的用法(附带实例)
在 JSP 技术中,使用 session 内置对象来存储每个用户的私有信息。但是,有时候服务器需要管理面向整个应用的参数,使每个用户都能获得相同的参数值,这时就需要用到 application 内置对象了。
application 是 JSP 技术提供的一个内置对象,对服务器而言,application 可以视为一个所有联机用户共享的数据存取区。application 内置对象中的变量数据在程序设置其值时被初始化,而当 Web 服务器被关闭,或者超过预设时间而未有任何用户联机时自动消失。
对每一个联机浏览网页的用户来说,application 内置对象用于存储其共享的数据,对于网站中任何一个页面,用户存取的数据内容均相同,可以将其视为传统应用程序中的全局共享变量。
application 内置对象的常用方法如下表所示:
【实例】利用 application 内置对象,实现共享留言板的信息。
本例在 inputMessage.jsp 页面中通过表单呈现出留言板,并收集用户填写的内容。
在 checkMessage.jsp 页面中,接收表单中传递过来的信息并加以处理。通过 application 内置对象中的 setAttribute(String name) 方法将用户填写的信息存入相应的全局变量。
在 showMessage.jsp 页面中,通过 application 内置对象中的 getAttribute(String name) 方法获取全局变量的值,并以适当的形式显示出来。
inputMessage.jsp 页面的代码如下:
checkMessage.jsp 页面的代码如下:
showMessage.jsp 页面的代码如下:

图 1 运行inputMessage.jsp页面的效果
用户填写相应的留言信息后,单击“留言”按钮,则会将信息传送至 checkMessage.jsp 页面,并显示留言成功,页面效果如下图所示:

图 2 留言成功的页面效果
单击“返回留言板”链接,就会通过链接返回留言板界面(inputMessage.jsp 页面)。在 inputMessage.jsp 页面中单击“查看留言板”按钮,则可以查看所有用户的历史留言,页面效果如下图所示:

图 3 查看用户历史留言的页面效果
application 是 JSP 技术提供的一个内置对象,对服务器而言,application 可以视为一个所有联机用户共享的数据存取区。application 内置对象中的变量数据在程序设置其值时被初始化,而当 Web 服务器被关闭,或者超过预设时间而未有任何用户联机时自动消失。
对每一个联机浏览网页的用户来说,application 内置对象用于存储其共享的数据,对于网站中任何一个页面,用户存取的数据内容均相同,可以将其视为传统应用程序中的全局共享变量。
application 内置对象的常用方法如下表所示:
方法 | 说明 |
---|---|
setAttribute(String name, Object obj) | 在 application 中设定 name 所指定的属性值为 obj |
getAttribute(String name) | 返回 application 中 name 所指定的属性值 |
getAttributeNames() | 返回 application 中所有变量的名称 |
removeAttribute(String name) | 删除 application 中 name 所指定的属性 |
getMajorVersion() | 返回服务器解释引擎所支持的最新 Servlet API 版本 |
getMinorVersion() | 返回服务器解释引擎所支持的最低 Servlet API 版本 |
getMimeType(string file) | 返回文件 file 的文件格式与编码方式 |
getRealPath(String path) | 返回虚拟路径 path 的真实路径 |
getServerInfo() | 返回服务器解释引擎的信息 |
application内置对象的应用
下面通过对 application 内置对象的应用的讲解,来帮助大家进一步理解该内置对象的使用。【实例】利用 application 内置对象,实现共享留言板的信息。
本例在 inputMessage.jsp 页面中通过表单呈现出留言板,并收集用户填写的内容。
在 checkMessage.jsp 页面中,接收表单中传递过来的信息并加以处理。通过 application 内置对象中的 setAttribute(String name) 方法将用户填写的信息存入相应的全局变量。
在 showMessage.jsp 页面中,通过 application 内置对象中的 getAttribute(String name) 方法获取全局变量的值,并以适当的形式显示出来。
inputMessage.jsp 页面的代码如下:
<%@page language="java" import="java.text.*,java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用application内置对象--inputMessage.jsp</title> <style> #form2 input { color: green; font-weight: bold; } </style> </head> <body bgcolor="#abcdef"> <form action="checkMessage.jsp" method="post"> 请输入姓名:<input type="text" name="name" /><br> 请输入标题:<input type="text" name="title" /><br> 请输入内容: <textarea cols="40" rows="10" name="message"></textarea><br><br><br> <input type="submit" value="留言" /> </form> <br> <form id="form2" action="showMessage.jsp" method="post"> <input type="submit" value="查看留言板" /> </form> </body> </html>
checkMessage.jsp 页面的代码如下:
<%@page language="java" import="java.text.*,java.util.*" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>使用application内置对象--checkMessage.jsp</title> <style> .span0 { color: red; font-weight: bold; } .span1 { color: green; } .span2 { color: blue; } .span3 { color: purple; } .span4 { color: orange; } </style> </head> <body bgcolor="#abcdef"> <%! Vector<String> v = new Vector<String>(); int i = 0; %> <% String datetime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(Calendar.getInstance().getTime()); %> <% request.setCharacterEncoding("utf-8"); String name = request.getParameter("name"); String title = request.getParameter("title"); String message = request.getParameter("message"); %> <% if (name == null || "".equals(name.trim())) { name = "网友" + (int) (Math.random() * 100000 + 10000); } if (title == null || "".equals(title.trim())) { title = "无"; } if (message == null || "".equals(message.trim())) { message = "无"; } %> <% i++; String str = "第<span class='span0'>" + i + "</span>楼 " + ".<span class='span1'>留言人:</span> " + name + ".<span class='span2'>标题:</span> " + title + ".<span class='span3'>内容:</span><br> " + message + ".<span class='span4'>时间:</span> " + datetime + ".<hr>"; v.add(str); application.setAttribute("message", v); %> 留言成功. <a href="inputMessage.jsp">返回留言板</a> </body> </html>
showMessage.jsp 页面的代码如下:
<%@page import="com.sun.org.apache.xml.internal.serializer.utils.StringToIntTable"%> <%@page language="java" import="java.util.*" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用application内置对象--showMessage.jsp</title> <style> body { background: RGBA(38, 38, 38, 1); } div { width: 800px; border: 1px solid RGBA(100, 90, 87, 1); color: white; } span { font-size: 20px; font-weight: bold; } .span0 { color: red; font-size: 25px; } .span1 { color: green; } .span2 { color: orange; } .span3 { color: green; } .span4 { color: red; } </style> </head> <body> <div> <% Object o = application.getAttribute("message"); if (o == null) { out.print("暂时还没有留言呢"); } else { Vector<String> v = (Vector<String>) o; for (int i = v.size() - 1; i >= 0; i--) { StringTokenizer st = new StringTokenizer(v.get(i), "."); while (st.hasMoreElements()) { out.print(st.nextToken() + "<br>"); } } } %> </div> </body> </html>运行 inputMessage.jsp 页面的效果如下图所示:

图 1 运行inputMessage.jsp页面的效果
用户填写相应的留言信息后,单击“留言”按钮,则会将信息传送至 checkMessage.jsp 页面,并显示留言成功,页面效果如下图所示:

图 2 留言成功的页面效果
单击“返回留言板”链接,就会通过链接返回留言板界面(inputMessage.jsp 页面)。在 inputMessage.jsp 页面中单击“查看留言板”按钮,则可以查看所有用户的历史留言,页面效果如下图所示:

图 3 查看用户历史留言的页面效果