Web應用使用application對象

        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對象中。瀏覽器

相關文章
相關標籤/搜索