application對象表明Web應用自己,對於整個Web應用有效,一旦JSP,Servlet將數據放入application中,該數據將能夠被該應用下其餘全部的JSP,Servlet訪問。application對象一般有兩個做用:
1 在整個Web應用的多個JSP,Servlet之間共享數據
2 訪問Web應用的配置參數
經過application對象在整個Web應用的多個JSP,Servlet之間共享數據:
application經過setAttribute(String attrName, Object value)方法將值value設置給application對象的屬性attrName,該屬性的值在整個Web應用有效,該Web應用的每一個JSP頁面和Servlet均可以經過調用getAttribute(String attrName)方法訪問該屬性。
例以下面的頁面set_application.jsp使用JSP聲明語句聲明一個變量count,又在JSP腳本中聲明一個變量local_count,每次刷新該頁面,都把count和local_count自增一次,而後將這兩個變量的值放入application對象中,名稱分別爲access_count,local_count,代碼清單以下: html
<%@ 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>set attribute of application</title> </head> <body> <%-- JSP聲明語句中定義的變量,會自動成爲Servlet類型的屬性 --%> <%! int count = 0; %> <%--JSP腳本中定義 的變量局部變量, 須要初始化 --%> <% int local_count = 0; application.setAttribute("access_count", String.valueOf(++count)); application.setAttribute("local_count", String.valueOf(++local_count)); %> <%=count %><br /> <%=local_count %><br /> </body> </html>
而後在get_application.jsp頁面中使用getAttribute(String attrName)方法分別訪問這兩個屬性,代碼清單以下: java
<%@ 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>get attribute of application</title> </head> <body> <% String access_count = application.getAttribute("access_count").toString(); String local_count = application.getAttribute("local_count").toString(); %> <%="access_count = " + access_count %><br /> <%="local_count = " + local_count %><br /> </body> </html>
將set_application.jsp頁面刷新3次,而後再訪問get_application.jsp頁面,結果以下: mysql
能夠看到通過3次刷新後,access_count屬性值變成3,local_count值屬性值爲1,說明屬性值確實成功設置到application對象中了,在其它JSP頁面中能夠訪問。
至於爲何access_count值變化了,local_count的值沒有變化,是由於JSP聲明語句中聲明的變量會自動轉換成Servlet的屬性,而JSP腳本中聲明的變量轉換成了_jspService方法的局部變量,set_application.jsp對應的Servlet代碼片斷以下,從代碼中能夠看出來: web
//此處省略部分代碼 public final class set_005fapplication_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent, org.apache.jasper.runtime.JspSourceImports { int count = 0; //此處省略部分代碼 public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { //此處省略部分代碼 int local_count = 0; } }
因此刷新set_application.jsp頁面時,count的值會保存,而local_count的值每次都會被從新初始化。
訪問Web應用的配置參數
在頁面get_application_param.jsp經過application對象訪問Web應用的配置參數,配置參數在web.xml中,分別分配了driver,url,username,password四個參數,表示數據庫驅動的名稱,標識,用戶名及密碼;這四項配置在web.xml中以下: sql
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xml> <web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"> <context-param> <param-name>driver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </context-param> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/db_note</param-value> </context-param> <context-param> <param-name>username</param-name> <param-value>zcj</param-value> </context-param> <context-param> <param-name>password</param-name> <param-value>zcj</param-value> </context-param> </web-app>
get_application_param.jsp頁面代碼清單以下: 數據庫
<%@ 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>Get Application Parameters</title> </head> <body> <% String driver = application.getInitParameter("driver"); String url = application.getInitParameter("url"); String user = application.getInitParameter("username"); String password = application.getInitParameter("password"); %> <%="driver: " + driver %><br /> <%="url: " + url %><br /> <%="username: " + user %><br /> <%="password: " + password %><br /> </body> </html>
在瀏覽器中訪問get_application_param.jsp頁面,內容以下: apache
最後要指出的是,雖然aplication對象能夠方便的在JSP,Servlet之間共享數據,但不要僅爲了JSP和Servlet之間共享數據就將數據放入application對象中,這樣會致使濫用application對象,一般只把Web應用的狀態數據放入application對象中。瀏覽器